new JBlock(null, loopContents, null),
new JBlock(null, body, null),
    private void makeDuplicateInitWork(SIRTwoStageFilter filter, int i) {	// set the peek, pop, and push ratios...	// we push zero, since we're just clearing the input line	filter.setInitPush(0);	// we pop <i> * the original pop amount	filter.setInitPop(i*filter.getPopInt());	// we peek the original peek amount (plus the pop)	filter.setInitPeek((i-1)*filter.getPopInt()+filter.getPeekInt());	// to build <initWork>, first clone the statements in the work	// function of <filter>	JBlock initBlock = 	    (JBlock)ObjectDeepCloner.deepCopy(filter.getWork().getBody());	// now extract the statements and replace the push statements	// with empty statements; the purpose of the initWork is just	// to pop the elements that the predecessor has processed.	initBlock.accept(new SLIRReplacingVisitor() {		public Object 		    visitExpressionStatement(JExpressionStatement self,					     JExpression expr) {		    if (expr instanceof SIRPushExpression) {			return new JEmptyStatement(null, null);		    } else {			return super.visitExpressionStatement(self, expr);		    }		}});	// now wrap the block in a for loop that goes to <i>	JStatement[] loopContents = 	    { Utils.makeForLoop(initBlock, i) } ;	// make an init function with <loopedBlock> as the body	filter.setInitWork(new JMethodDeclaration(null,				     at.dms.kjc.Constants.ACC_PUBLIC,				     CStdType.Void,				     FusePipe.INIT_WORK_NAME, 				     JFormalParameter.EMPTY,				     CClassType.EMPTY,				     new JBlock(null, loopContents, null),				     null,				     null));    }