if (info != null && info.getIsDeclaredInInit()) info = null;
    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;            // if we are not in init then limit unroll factor for loops that            // do not have tape operations in them            unrollLimit = KjcOptions.unroll;            if (limitNoTapeLoops && !inContainerInit) {                boolean tape_op = FindTapeOps.findTapeOps(body);                if (!tape_op) {                    if (KjcOptions.unroll > unrollLimitNoTapeLoops) {                        unrollLimit = unrollLimitNoTapeLoops;                    }                }            }            // 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                LoopIterInfo info = LoopIterInfo.getLoopInfo(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.getVar(),Boolean.TRUE);                    // do unrolling                    return doUnroll(info, self);                } else if(canUnroll(info,currentModified)) {                    // Set modified                    saveModified.putAll(currentModified);                    currentModified=saveModified;                    currentModified.put(info.getVar(),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                if (!childHasUnrolled)                    self.setUnrolled(true);            }            saveModified.putAll(currentModified);            currentModified=saveModified;        }        return self;    }