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 -~----------~----~----~----~------~----~------~--~---