two.getInitPeek(), two.getInitPop(), two.getInitPush(),
(JExpression)two.getInitPeek().accept(this), (JExpression)two.getInitPop().accept(this), (JExpression)two.getInitPush().accept(this),
    private SIRFilter renameFilter(SIRFilter str)    {        RASymbolTable ost = symtab;        symtab = new RASymbolTable(ost);        classsymtab = symtab;        findDecls(str.getFields());        findDecls(str.getMethods());        JFieldDeclaration[] newFields =            new JFieldDeclaration[str.getFields().length];        for (int i = 0; i < str.getFields().length; i++)            newFields[i] = (JFieldDeclaration)str.getFields()[i].accept(this);        // Rename all of the methods; notice when we see init        // and work functions.        JMethodDeclaration oldInit = str.getInit();        JMethodDeclaration oldWork = str.getWork();	// also for twostagefilters... this is messy and should be	// made more general somehow (just wait for general phased filters.)	JMethodDeclaration oldInitWork = null;	if (str instanceof SIRTwoStageFilter) {	    oldInitWork = ((SIRTwoStageFilter)str).getInitWork();	}        JMethodDeclaration newInit = null, newWork = null, newInitWork = null;        JMethodDeclaration[] newMethods =            new JMethodDeclaration[str.getMethods().length];        for (int i = 0; i < str.getMethods().length; i++)        {            JMethodDeclaration oldMeth = str.getMethods()[i];            JMethodDeclaration newMeth =                (JMethodDeclaration)oldMeth.accept(this);            if (oldInit == oldMeth) newInit = newMeth;            if (oldWork == oldMeth) newWork = newMeth;            if (oldInitWork == oldMeth) newInitWork = newMeth;            newMethods[i] = newMeth;        }	SIRFilter nf;	if (str instanceof SIRTwoStageFilter) {	    assert oldInitWork!=null;	    assert newInitWork!=null;	    SIRTwoStageFilter two = (SIRTwoStageFilter)str;	    nf = new SIRTwoStageFilter(two.getParent(),				       newName(two.getIdent()),				       newFields,				       newMethods,				       (JExpression)two.getPeek().accept(this),				       (JExpression)two.getPop().accept(this),				       (JExpression)two.getPush().accept(this),				       newWork,				       two.getInitPeek(),				       two.getInitPop(),				       two.getInitPush(),				       newInitWork,				       two.getInputType(),				       two.getOutputType());	} else {	    nf = new SIRFilter(str.getParent(),                               newName(str.getIdent()),                               newFields,                               newMethods,                               (JExpression)str.getPeek().accept(this),                               (JExpression)str.getPop().accept(this),                               (JExpression)str.getPush().accept(this),                               newWork,                               str.getInputType(),                               str.getOutputType());	}	    	// replace any init call to <str> in the parent with an init	// call to <nf> -- DON'T DO THIS since it messes up mutation case.	// replaceParentInit(str, nf);	nf.setInit(newInit);        symtab = ost;        return nf;    }