Propagator newProp=construct(cloneTable(constants, getFreeVars(self)),false);
Set freeVars = getFreeVars(self); Propagator newProp=construct(cloneTable(constants, freeVars),false);
    public Object visitWhileStatement(JWhileStatement self,				      JExpression cond,				      JStatement body) {	loopDepth++;	if(!write) {	    cond.accept(this);	    body.accept(this);	} else {	    Propagator newProp=construct(cloneTable(constants, getFreeVars(self)),false);	   	    cond.accept(newProp);	    body.accept(newProp);	    Enumeration remove=newProp.changed.keys();	    //BUG!!!  visiting with newProp could replace references!	    while(remove.hasMoreElements()) {		JLocalVariable var=(JLocalVariable)remove.nextElement();		constants.remove(var);		changed.put(var,Boolean.TRUE);	    }	    Hashtable saveConstants=constants;	    constants=cloneTable(constants, getFreeVars(cond));	    JExpression newExp = (JExpression)cond.accept(this);	    // reset if we found a constant	    if (newExp!=cond) {		self.setCondition(newExp);	    }	    body.accept(this);	    constants=saveConstants;	}	loopDepth--;	return self;    }