JStatement loop = makeForLoop(body, phaseInfo.popCounter, new JIntLiteral(filterInfo.filter. getPeekInt() - filterInfo.filter. getPopInt() - 1));     JAssignmentExpression assignExp = new JAssignmentExpression(null, new JLocalVariableExpression(null, phaseInfo. pushCounter), new JLocalVariableExpression(null, phaseInfo. popCounter)); JExpressionStatement assign = new JExpressionStatement(null, assignExp, null);   JStatement[] sequence = { loop, assign }; return new JBlock(null, sequence, null);
return makeForLoop(body, phaseInfo.loopCounter, new JIntLiteral(filterInfo.filter. getPeekInt() - filterInfo.filter. getPopInt()));
    private static JStatement makePeekRestore(FilterInfo filterInfo,					      PhaseInfo phaseInfo) {	// make a statement that will copy peeked items into the pop	// buffer, assuming the counter will count from 0 to	// (peek-pop) [exclusive upper bound]	// the lhs of the source of the assignment	JExpression sourceLhs = 	    new JFieldAccessExpression(null,				       new JThisExpression(null),				       filterInfo.peekBuffer.				       getVariable().getIdent());	// the rhs of the source of the assignment	JExpression sourceRhs = 	    new JLocalVariableExpression(null, 					 phaseInfo.popCounter);	// the lhs of the dest of the assignment	JExpression destLhs = 	    new JLocalVariableExpression(null,					 phaseInfo.popBuffer);	    	// the rhs of the dest of the assignment	JExpression destRhs = 	    new JLocalVariableExpression(null,					 phaseInfo.popCounter);	// the expression that copies items from the pop buffer to the	// peek buffer	JExpression copyExp = 	    new JAssignmentExpression(null,				      new JArrayAccessExpression(null,								 destLhs,								 destRhs),				      new JArrayAccessExpression(null,								 sourceLhs,								 sourceRhs));	// finally we have the body of the loop	JStatement body = new JExpressionStatement(null, copyExp, null);	// make a for loop that executes (peek-pop-1) times.	JStatement loop = makeForLoop(body,				      phaseInfo.popCounter, 				      new JIntLiteral(filterInfo.filter.						      getPeekInt() -						      filterInfo.filter.						      getPopInt() - 1));	// follow the for loop with a statement assigning the	// pushCount to the popCount, so that the producer will start	// filling up the queue at the right place.	JAssignmentExpression assignExp =	    new 	    JAssignmentExpression(null,				  new JLocalVariableExpression(null,							       phaseInfo.							       pushCounter),				  new JLocalVariableExpression(null,							       phaseInfo.							       popCounter));	JExpressionStatement assign = 	    new JExpressionStatement(null, assignExp, null);	// return the statement sequence	JStatement[] sequence = { loop, assign };	return new JBlock(null, sequence, null);    }