if (!self.needsWork()) { return; }  new ArrayDestroyer().destroyArrays(self); for (int i = 0; i < self.getMethods().length; i++) { self.getMethods()[i].accept(new VarDeclRaiser()); } DeadCodeElimination.doit(self);  addEntryExit(self.getWork());  removeStructureNew(self.getInit()); removeStructureNew(self.getWork());  if (self instanceof SIRTwoStageFilter) { addEntryExit(((SIRTwoStageFilter)self).getInitWork()); removeStructureNew(((SIRTwoStageFilter)self).getInitWork()); }
doGeneralFilter(self);
    public void visitFilter(SIRFilter self,			    SIRFilterIter iter) {	// only worry about actual SIRFilter's, not special cases like	// FileReader's and FileWriter's	if (!self.needsWork()) {	    return;	}        // dismantle arrays	new ArrayDestroyer().destroyArrays(self);        for (int i = 0; i < self.getMethods().length; i++)        {            self.getMethods()[i].accept(new VarDeclRaiser());        }	DeadCodeElimination.doit(self);        // add entry/exit nodes to work function        addEntryExit(self.getWork());        // prune structure creation statements        removeStructureNew(self.getInit());        removeStructureNew(self.getWork());	// add entry/exit nodes to initial work function, if there is one	if (self instanceof SIRTwoStageFilter) {	    addEntryExit(((SIRTwoStageFilter)self).getInitWork());            removeStructureNew(((SIRTwoStageFilter)self).getInitWork());	}    }