CType type = self.getVariable().getType();
    public Object visitLocalVariableExpression(JLocalVariableExpression self,					       String ident) {	JLocalVariable var = self.getVariable();	if (destroyedVars.contains(var)) {	    if (!RENAME) {		// discover first assign and last use!		if (assign) {		    //System.out.println("destroyed variable: "+ident+" assigned to!");		    if (!first_assign.containsKey(var)) {			first_assign.put(var,self);		    }		} else {		    //System.out.println("destroyed variable: "+ident+" used.");		    last_usage.put(var,self);		}	    } else {		// rename variables and find max number of live variables of each type		CType type = self.getVariable().getType();		Object o1 = first_assign.get(self.getVariable());		Object o2 = last_usage.get(self.getVariable());		if (self == o1) {		    //System.out.println("live_vars++");		    JVariableDefinition alias;		    if (!live_vars.containsKey(type)) live_vars.put(type, new Integer(0));		    if (!max_live_vars.containsKey(type)) max_live_vars.put(type, new Integer(0));		    if (!available_names.containsKey(type)) available_names.put(type, new Stack());		    int live = ((Integer)live_vars.get(type)).intValue() + 1;		    live_vars.put(type, new Integer(live));		    if (live > ((Integer)max_live_vars.get(type)).intValue()) {			max_live_vars.put(type, new Integer(live));			alias = new JVariableDefinition(null, 0, type, 				     "__destroyed_"+type.toString()+"_"+live, null);		    } else {			Stack alias_stack = (Stack)available_names.get(type);			assert (!alias_stack.empty());			alias = (JVariableDefinition)alias_stack.pop();		    }		    var_alias.put(self.getVariable(), alias);		    if (o2 == null) {			// variable is never used so we can reuse its alias			Stack alias_stack = (Stack)available_names.get(type);			alias_stack.push(alias);		    }		}		if (self == o2) {		    //System.out.println("live_vars--");		    assert (live_vars.containsKey(type));		    int live = ((Integer)live_vars.get(type)).intValue() - 1;		    		    assert (live >= 0);		    live_vars.put(type, new Integer(live));		    Stack alias_stack = (Stack)available_names.get(type);		    alias_stack.push(var_alias.get(self.getVariable()));		}		JVariableDefinition defn = (JVariableDefinition)var_alias.get(self.getVariable());		return new JLocalVariableExpression(null, defn);	    }	}	return self;    }