self.setUnrolled(true);
if (!childHasUnrolled) self.setUnrolled(true);
    public Object visitForStatement(JForStatement self,				    JStatement init,				    JExpression cond,				    JStatement incr,				    JStatement body) {	// to do the right thing if someone set an unroll factor of 0	// (or 1, which means to do nothing)	if((KjcOptions.unroll>1 || inContainerInit) && !self.getUnrolled()) { //Ignore if already unrolled	    // first recurse into body...	    Hashtable saveModified=currentModified;	    currentModified=new Hashtable();	    // we're going to see if any child unrolls, to avoid	    // unrolling doubly-nested loops	    boolean saveHasUnrolled = hasUnrolled;	    hasUnrolled = false;	    JStatement newStmt = (JStatement)body.accept(this);	    if (newStmt!=null && newStmt!=body) {		self.setBody(newStmt);	    }	    	    boolean childHasUnrolled = hasUnrolled;	    // restore this way because you want to propagate child	    // unrollings up, but don't want to eliminate record of	    // previous unrolling	    hasUnrolled = saveHasUnrolled || childHasUnrolled;	    	    // only unroll if we're set to unroll outer loops, or if	    // child hasn't unrolled, or if we're doing the init	    // function	    if (unrollOuterLoops || !childHasUnrolled || inContainerInit) {		// check for loop induction variable		UnrollInfo info = getUnrollInfo(init, cond, incr, body,values,constants);		// see if we can unroll...		if(shouldUnroll(info, body, currentModified)) {		    // Set modified		    saveModified.putAll(currentModified);		    currentModified=saveModified;		    currentModified.put(info.var,Boolean.TRUE);		    // do unrolling		    return doUnroll(info, self);		} else if(canUnroll(info,currentModified)) {		    // Set modified		    saveModified.putAll(currentModified);		    currentModified=saveModified;		    currentModified.put(info.var,Boolean.TRUE);		    // do unrolling		    return doPartialUnroll(info, self);		}	    } else {		// otherwise, still mark the loop as having unrolled,		// because we don't want to consider it again and		// unroll it when children were unrolled by a		// different unroller		self.setUnrolled(true);	    }	    saveModified.putAll(currentModified);	    currentModified=saveModified;	}	return self;    }