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);
}
}