When SameParameterValueOptimizer substitutes a value
for a parameter, it now casts the value to the type
of the parameter.  This prevents, for example,
treating an integer as a long.

Review by: scottb


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7338 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
index e118238..c22d483 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizer.java
@@ -173,7 +173,6 @@
    * all calls.
    */
   private Map<JParameter, JValueLiteral> parameterValues = new IdentityHashMap<JParameter, JValueLiteral>();
-
   private final JProgram program;
 
   /**
@@ -183,9 +182,11 @@
    * TODO: support polymorphic calls properly.
    */
   private Set<JMethod> rescuedMethods = new HashSet<JMethod>();
+  private final Simplifier simplifier;
 
   private SameParameterValueOptimizer(JProgram program) {
     this.program = program;
+    simplifier = new Simplifier(program);
   }
 
   private boolean execImpl(JNode node) {
@@ -200,7 +201,7 @@
       JValueLiteral valueLiteral = parameterValues.get(parameter);
       if (valueLiteral != null) {
         SubstituteParameterVisitor substituteParameterVisitor = new SubstituteParameterVisitor(
-            parameter, valueLiteral);
+            parameter, simplifier.cast(parameter.getType(), valueLiteral));
         substituteParameterVisitor.accept(parameter.getEnclosingMethod());
         madeChanges |= substituteParameterVisitor.didChange();
       }
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
index 231539b..036d71a 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/SameParameterValueOptimizerTest.java
@@ -40,6 +40,12 @@
         "public static int foo(int i){", "  return i;", "}");
   }
 
+  public void testNumericCast() throws Exception {
+    assertOptimize("foo", "static void foo(long i) { long j = i; }",
+        "foo(1); foo(1);").into("public static void foo(long i){",
+        "  long j = 1L;", "}");
+  }
+
   public void testSameParameter() throws Exception {
     assertOptimize("foo", "static void foo(int i) { int j = i; }",
         "foo(1); foo(1);").into("public static void foo(int i){",