rem: while (y) { 
add: while (y && y.cAssessment) { 
context: XRai.upwardUpdate = function(x, olda, newa, updateOnly, skip) {   if (!skip) {      if (debug) XRai.debug("Updating (upward) " + XRai.getPath(x) + ": " + olda + " -> "  + newa + "\n");      if (x.cAssessment) XRai.upwardCheck(x, olda, newa, x.cAssessment, updateOnly);   } else {      // Is it contained in a passage ?      var y = x;      while (y) {         if (debug) XRai.debug("Looking for passage (" + XRai.getPath(y) + " IN=" + (y.passages ? y.passages.length : "null") + ")\n");         if (y.passages && y.passages.length > 0) {            for(var i = 0; i < y.passages.length; i++) {               var p = y.passages[i];               if (XRai.isInRange(x,p.start, p.end)) {                  if (debug) XRai.debug(XRai.getPath(x) + " is in passage " + p.getPaths() + " with a = " + p.assessment.getAttribute("a") + "\n");                  XRai.upwardCheck(p, olda, newa, p.assessment, updateOnly);               } else if (debug) XRai.debug(XRai.getPath(x) + " is NOT in passage " + p.getPaths() + "\n");            }            break;         } else if (debug) XRai.debug(XRai.getPath(x) + " is not an intersection\n");         if (y.cAssessment.getAttribute("type") != "in") {            if (debug) XRai.debug("We are not within a passage anymore:" + y.cAssessment.getAttribute("type") + "!\n");            break;         }         y = XRai.parent(y,1);      }   }   // Go up   x = XRai.parent(x,1);   if (x) XRai.upwardUpdate(x, olda, newa, updateOnly, false);}
meta: 8632	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/8632/54ec3394e56995837ac14240ddfe00752d141a15/article.js/clean/trunk/js/article.js