JExpression constant = (JExpression)constants.get(((JLocalVariableExpression)args.get(i)).getVariable());  constants.put(parameters[i], constant); args.set(i, constant);
Object constant = constants.get(((JLocalVariableExpression)args.get(i)).getVariable());  constants.put(parameters[i],constant); if(constant instanceof JExpression) args.set(i, constant);
    private void recurseInto(SIRStream str, List args, Hashtable constants) {	JMethodDeclaration initMethod = str.getInit();	// if there is no init function, we're done	if (initMethod==null) {	    return;	}	JFormalParameter[] parameters = initMethod.getParameters();	// build new constants	for (int i=0; i<args.size(); i++) {	    // if we are passing an arg to the init function...	    if (args.get(i) instanceof JLiteral) {		//System.err.println("!! top finding " + parameters[i].getIdent() + " " + parameters[i].hashCode() + " = " + args.get(i) + " in call to " + str.getIdent());		// if it's already a literal, record it		constants.put(parameters[i], (JLiteral)args.get(i));	    } else if ((args.get(i) instanceof JLocalVariableExpression)&&constants.get(((JLocalVariableExpression)args.get(i)).getVariable())!=null) {		// otherwise if it's associated w/ a literal, then		// record that and set the actual argument to be a literal		JExpression constant = (JExpression)constants.get(((JLocalVariableExpression)args.get(i)).getVariable());		//System.err.println("!! bottom finding " + parameters[i].getIdent() + " " + parameters[i].hashCode() + " = " + constant + " in call to " + str.getIdent());				constants.put(parameters[i], constant);		args.set(i, constant);	    }	}	// recurse into sub-stream	propagateAndUnroll(str, constants);    }