private boolean shouldUnroll(UnrollInfo info, JStatement body, Hashtable currentModified) {
private boolean shouldUnroll(LoopIterInfo info, JStatement body, Hashtable currentModified) {
    private boolean shouldUnroll(UnrollInfo info, JStatement body, Hashtable currentModified) {        // if no unroll info or variable is modified in loop, fail        if (info==null || currentModified.containsKey(info.var)) {            return false;        }        //Unroll if in init        if(inContainerInit)            return true;            /*        // otherwise if there is an SIRInitStatement in the loop, then        // definately unroll for the sake of graph expansion        final boolean[] hasInit = { false };        body.accept(new SLIREmptyVisitor() {        public void visitInitStatement(SIRInitStatement self,        SIRStream target) {        super.visitInitStatement(self, target);        hasInit[0] = true;        }        });        if (hasInit[0]) {        return true;        }        */        // Unroll maximally for number gathering        if(KjcOptions.numbers>0) {            final boolean[] hasPrint = { false };            body.accept(new SLIREmptyVisitor() {                    public void visitPrintStatement(SIRPrintStatement self,                                                    JExpression arg) {                        hasPrint[0]=true;                        super.visitPrintStatement(self,arg);                    }                });            if (hasPrint[0]) {                return true;            }        }        // otherwise calculate how many times the loop will execute,        // and only unroll if it is within our max unroll range        int count = getNumExecutions(info);        return count <= unrollLimit;    }