} else if (newExp!=expr)  {
constants.put(self, ((JLiteral)newExp).convertType(self.getType(), null)); added = true; changed.put(self, Boolean.TRUE); } else if (newExp!=expr)  {
    public Object visitVariableDefinition(JVariableDefinition self,                                          int modifiers,                                          CType type,                                          String ident,                                          JExpression expr) {        // visit static array dimensions        if (type.isArrayType()) {            JExpression[] dims = ((CArrayType)type).getDims();            for (int i=0; i<dims.length; i++) {                JExpression newExp = (JExpression)dims[i].accept(this);                if (newExp !=null && newExp!=dims[i]) {                    dims[i] = newExp;                }            }            // ripped out of original propagator, looks like it's            // initializing array entries to zero            changed.put(self,Boolean.TRUE);            if(dims.length==1) {                if(dims[0] instanceof JIntLiteral) {                    int dim1 = ((JIntLiteral)dims[0]).intValue();                    // only propagate arrays if they are under a threshold size                    if (dim1 < MAX_ARRAY_SIZE) {                        Object[] array=new Object[dim1];                        constants.put(self,array);                        added=true;                    } else                        constants.remove(self);                } else                    constants.remove(self);            } else if(dims.length==2) {                if((dims[0] instanceof JIntLiteral)&&(dims[1] instanceof JIntLiteral)) {                    int dim1 = ((JIntLiteral)dims[0]).intValue();                    int dim2 = ((JIntLiteral)dims[1]).intValue();                    int numElements = dim1 * dim2;                    // only propagate arrays if they are under a threshold size                    if (numElements < MAX_ARRAY_SIZE) {                        Object[][] array=new Object[dim1][dim2];                        constants.put(self,array);                        added=true;                    } else                        constants.remove(self);                } else                    constants.remove(self);            } else                constants.remove(self);        }         // inspect initializer        else if (expr != null) {            JExpression newExp = (JExpression)expr.accept(this);            // if we have a constant AND it's a final variable...            if(newExp.isConstant()) {                constants.put(self,((JLiteral)newExp).convertType(self.getType(),null));                added=true;                changed.put(self,Boolean.TRUE);                if(write)                    self.setExpression(newExp);            } else if (newExp!=expr) /*&& CModifier.contains(modifiers,                                       ACC_FINAL)*/ {                // reset the value                if(write)                    self.setExpression(newExp);                // remember the value for the duration of our visiting                constants.put(self, newExp);                added=true;                changed.put(self,Boolean.TRUE);            } else if(newExp instanceof JLocalVariableExpression) {                if(write)                    self.setExpression(newExp);                constants.put(self, newExp);                added=true;                changed.put(self,Boolean.TRUE);            } else if(newExp instanceof SIRCreatePortal) {                if (!constants.containsKey(self)) {                    //System.out.println("\n[new Exp]Adding portal to constants, variable is: "+self.getIdent()+" constants: "+constants+" at: "+self.getTokenReference());                    constants.put(self, new SIRPortal(type));                }            } else if (newExp instanceof JArrayInitializer) {                recordArrayInit((JArrayInitializer)newExp,                                 self);            }                }        return self;    }