JStatement init; JExpression cond; JStatement incr;
if (GENERATE_DO_LOOPS && self instanceof JDoLoopStatement) { visitDoLoopStatement((JDoLoopStatement)self); return; }
    public void visitForStatement(JForStatement self,                                  JStatement forInit,                                  JExpression forCond,                                  JStatement forIncr,                                  JStatement body) {	JStatement init;	JExpression cond;	JStatement incr;		//be careful, if you return prematurely, decrement me	forLoopHeader++;	//check if this is a do loop	if (GENERATE_DO_LOOPS && doloops.containsKey(self)) {	    DoLoopInformation doInfo = (DoLoopInformation)doloops.get(self);	    //System.out.println("Induction Var: " + doInfo.induction);	    //System.out.println("init exp: " + doInfo.init);		       	    //System.out.println("cond exp: " + doInfo.cond);	    //System.out.println("incr exp: " + doInfo.incr);			    	    print("doloop (");	    print(doInfo.induction.getType());	    print(" ");	    print(doInfo.induction.getIdent());	    print(" = ");	    init = doInfo.init;	    cond = doInfo.cond;	    incr = doInfo.incr;	} else { //normal for loop	    print("for (");	    init = forInit;	    cond = forCond;	    incr = forIncr;	}		if (init != null) {	    init.accept(this);	    //the ; will print in a statement visitor	}		print(" ");	if (cond != null) {	    cond.accept(this);	}	//cond is an expression so print the ;	print("; ");	if (incr != null) {	    FlatIRToRS l2c = new FlatIRToRS(newArrayExprs);	    l2c.doloops = this.doloops;	    incr.accept(l2c);	    // get String	    String str = l2c.getString();	    // leave off the trailing semicolon if there is one	    if (str.endsWith(";")) {		print(str.substring(0, str.length()-1));	    } else { 		print(str);	    }	}	forLoopHeader--;	print(") ");	        //print("{");	newLine();        pos += TAB_SIZE;        body.accept(this);        pos -= TAB_SIZE;        newLine();	//print("}");    }