Author: b...@google.com
Date: Thu Feb 26 18:54:09 2009
New Revision: 4894

Modified:
     
trunk/dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java

Log:
Fix aliasing in AST nodes created by JavaScriptObjectNormalizer by calling  
CloneExpressionVisitor.

Patch by: bobv
Review by: scottb (TBR)


Modified:  
trunk/dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java
==============================================================================
---  
trunk/dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java  
 
(original)
+++  
trunk/dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java  
 
Thu Feb 26 18:54:09 2009
@@ -148,15 +148,18 @@
                x.getTarget());
            localCall.getArgs().addAll(x.getArgs());

+          // We need a second copy of the arguments for the else expression
+          CloneExpressionVisitor cloner = new  
CloneExpressionVisitor(program);
+
            // instance.jsoMethod(arg, arg)
-          JMethodCall jsoCall = new JMethodCall(program, info, instance,
-              jsoMethod);
-          jsoCall.getArgs().addAll(x.getArgs());
+          JMethodCall jsoCall = new JMethodCall(program, info,
+              cloner.cloneExpression(instance), jsoMethod);
+          jsoCall.getArgs().addAll(cloner.cloneExpressions(x.getArgs()));

            // Cast.isJavaScriptObject() ? instance.jsoMethod() :
            // instance.method();
-          JConditional newExpr = makeIsJsoConditional(info, instance,
-              x.getType(), jsoCall, localCall);
+          JConditional newExpr = makeIsJsoConditional(info,
+              cloner.cloneExpression(instance), x.getType(), jsoCall,  
localCall);

            multi.exprs.add(newExpr);
            // We may only have the ternary operation if there's no  
side-effect

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to