body.accept(this); JExpression newExp = (JExpression)cond.accept(this); if (write&&(newExp!=cond)) { self.setCondition(newExp);
loopDepth++; if(!write) { cond.accept(this); body.accept(this); } else {  Set<JLocalVariable> freeVars = getFreeVars(self); Propagator newProp=construct(cloneTable(constants, freeVars),false);  cond.accept(newProp); body.accept(newProp); Enumeration<Object> remove=newProp.changed.keys();  while(remove.hasMoreElements()) { JLocalVariable var=(JLocalVariable)remove.nextElement(); constants.remove(var); changed.put(var,Boolean.TRUE); } Hashtable saveConstants=constants; constants=cloneTable(constants, freeVars); JExpression newExp = (JExpression)cond.accept(this);  if (newExp!=cond) { self.setCondition(newExp); } body.accept(this); constants=saveConstants;
    public Object visitDoStatement(JDoStatement self,                                   JExpression cond,                                   JStatement body) {        body.accept(this);        JExpression newExp = (JExpression)cond.accept(this);        if (write&&(newExp!=cond)) {            self.setCondition(newExp);        }        return self;    }