Simplifies Object.toString alias generation. Change-Id: Ib93059627c34e4e50c3e396438a6a08643148f89
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java index 2c98b69..d6b8e70 100644 --- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java +++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -15,6 +15,8 @@ */ package com.google.gwt.dev.jjs.impl; +import static com.google.gwt.dev.js.JsUtils.createAssignment; + import com.google.gwt.core.ext.TreeLogger; import com.google.gwt.core.ext.linker.impl.StandardSymbolData; import com.google.gwt.dev.CompilerContext; @@ -2195,10 +2197,6 @@ } } - private JsExpression createAssignment(JsExpression lhs, JsExpression rhs) { - return new JsBinaryOperation(lhs.getSourceInfo(), JsBinaryOperator.ASG, lhs, rhs); - } - private JsExpression createCommaExpression(JsExpression lhs, JsExpression rhs) { if (lhs == null) { return rhs; @@ -2208,14 +2206,6 @@ return new JsBinaryOperation(lhs.getSourceInfo(), JsBinaryOperator.COMMA, lhs, rhs); } - private JsNameRef createNativeToStringRef(JsExpression qualifier) { - JsName toStringName = objectScope.declareName("toString"); - toStringName.setObfuscatable(false); - JsNameRef toStringRef = toStringName.makeRef(qualifier.getSourceInfo()); - toStringRef.setQualifier(qualifier); - return toStringRef; - } - private JsExpression generateCastableTypeMap(JClassType x) { JCastMap castMap = program.getCastMap(x); if (castMap != null) { @@ -2607,29 +2597,11 @@ } private void generateToStringAlias(JClassType x, List<JsStatement> globalStmts) { - JMethod toStringMeth = program.getIndexedMethod("Object.toString"); - if (x.getMethods().contains(toStringMeth)) { - SourceInfo sourceInfo = x.getSourceInfo(); - // _.toString = function(){return this.java_lang_Object_toString();} - - // lhs - JsNameRef lhs = createNativeToStringRef(getPrototypeQualifierOf(x, sourceInfo)); - - // rhs - JsNameRef toStringRef = new JsNameRef(sourceInfo, polymorphicNames.get(toStringMeth)); - toStringRef.setQualifier(new JsThisRef(sourceInfo)); - JsInvocation call = new JsInvocation(sourceInfo, toStringRef); - JsReturn jsReturn = new JsReturn(sourceInfo, call); - JsFunction rhs = new JsFunction(sourceInfo, topScope); - JsBlock body = new JsBlock(sourceInfo); - body.getStatements().add(jsReturn); - rhs.setBody(body); - - // asg - JsExpression asg = createAssignment(lhs, rhs); - JsExprStmt stmt = asg.makeStmt(); - globalStmts.add(stmt); - typeForStatMap.put(stmt, program.getTypeJavaLangObject()); + JMethod toStringMethod = program.getIndexedMethod("Object.toString"); + if (x.getMethods().contains(toStringMethod)) { + JsName toStringName = objectScope.declareName("toString"); + toStringName.setObfuscatable(false); + generateVTableAlias(globalStmts, toStringMethod, toStringName); } }