Author: [EMAIL PROTECTED] Date: Tue Sep 16 19:18:10 2008 New Revision: 3659
Modified: changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/JavaToJavaScriptMap.java Log: Improves the map between Java methods and JavaScript functions for instance methods. Modified: changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java ============================================================================== --- changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java (original) +++ changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java Tue Sep 16 19:18:10 2008 @@ -585,6 +585,10 @@ } JavaToJavaScriptMap postStringInterningMap = new JavaToJavaScriptMap() { + public JsName nameForType(JReferenceType type) { + return map.nameForType(type); + } + public JMethod nameToMethod(JsName name) { return map.nameToMethod(name); } @@ -595,6 +599,10 @@ public JReferenceType typeForStat(JsStatement stat) { return map.typeForStat(stat); + } + + public JMethod vtableInitToMethod(JsStatement stat) { + return map.vtableInitToMethod(stat); } }; Modified: changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java ============================================================================== --- changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java (original) +++ changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java Tue Sep 16 19:18:10 2008 @@ -316,8 +316,8 @@ } else { // create a new peer JsFunction jsFunction = new JsFunction(topScope, globalName, true); - methodBodyMap.put(x.getBody(), jsFunction); } + methodBodyMap.put(x.getBody(), jsFunction); push(jsFunction.getScope()); return true; } @@ -518,7 +518,6 @@ + " does belong in a fragment"; JsExprStmt funcStmt = func.makeStmt(); globalStmts.add(funcStmt); - typeForStatMap.put(funcStmt, x); } } } @@ -1556,7 +1555,7 @@ JsExpression asg = createAssignment(lhs, rhs); JsExprStmt asgStat = new JsExprStmt(asg); globalStmts.add(asgStat); - typeForStatMap.put(asgStat, x); + vtableInitForMethodMap.put(asgStat, method); } } } @@ -1740,6 +1739,8 @@ return generateJavaScriptAST.execImpl(); } + public Map<JsStatement, JMethod> vtableInitForMethodMap = new HashMap<JsStatement, JMethod>(); + private final Map<JBlock, JsCatch> catchMap = new IdentityHashMap<JBlock, JsCatch>(); private final Map<JClassType, JsScope> classScopes = new IdentityHashMap<JClassType, JsScope>(); @@ -1749,6 +1750,7 @@ * clinit). */ private Set<JMethod> crossClassTargets = new HashSet<JMethod>(); + /** * Contains JsNames for all interface methods. A special scope is needed so * that independent classes will obfuscate their interface implementation @@ -1762,12 +1764,11 @@ * Sorted to avoid nondeterministic iteration. */ private final Map<Long, JsName> longLits = new TreeMap<Long, JsName>(); - private final Map<JsName, JsExpression> longObjects = new IdentityHashMap<JsName, JsExpression>(); private final Map<JAbstractMethodBody, JsFunction> methodBodyMap = new IdentityHashMap<JAbstractMethodBody, JsFunction>(); private final Map<HasName, JsName> names = new IdentityHashMap<HasName, JsName>(); - private JsName nullMethodName; + private JsName nullMethodName; /** * Contains JsNames for the Object instance methods, such as equals, hashCode, * and toString. All other class scopes have this scope as an ultimate parent. @@ -1798,6 +1799,7 @@ * Contains JsNames for all globals, such as static fields and methods. */ private final JsScope topScope; + private final Map<JsStatement, JReferenceType> typeForStatMap = new HashMap<JsStatement, JReferenceType>(); private final JTypeOracle typeOracle; @@ -1950,7 +1952,14 @@ } } + // TODO(spoon): avoid capturing a reference to GenerateJavaScriptAST; that's + // wasteful of memory. return new JavaToJavaScriptMap() { + public JsName nameForType(JReferenceType type) { + // TODO(spoon): use a smaller map than this whole thing + return names.get(type); + } + public JMethod nameToMethod(JsName name) { return nameToMethodMap.get(name); } @@ -1965,6 +1974,10 @@ public JReferenceType typeForStat(JsStatement stat) { return typeForStatMap.get(stat); + } + + public JMethod vtableInitToMethod(JsStatement stat) { + return vtableInitForMethodMap.get(stat); } }; } Modified: changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/JavaToJavaScriptMap.java ============================================================================== --- changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/JavaToJavaScriptMap.java (original) +++ changes/spoon/runAsync/dev/core/src/com/google/gwt/dev/jjs/impl/JavaToJavaScriptMap.java Tue Sep 16 19:18:10 2008 @@ -21,12 +21,35 @@ import com.google.gwt.dev.js.ast.JsStatement; /** - * A map from chunks of Java to chunks of JavaScript. + * A map between chunks of JavaScript to chunks of Java. */ public interface JavaToJavaScriptMap { + /** + * Return the JavaScript name corresponding to a Java type. + */ + JsName nameForType(JReferenceType type); + + /** + * If <code>name</code> is the name of a function that corresponds to a Java + * method, then return that method. Otherwise, return null. + */ JMethod nameToMethod(JsName name); + /** + * If <code>var</code> is the name of the variable used to hold an interned + * string literal, then return the string it interns. Otherwise, return null. + */ String stringLiteralForName(JsName var); - + + /** + * If <code>stat</code> is used to set up the definition of some class, + * return that class. Otherwise, return null. + */ JReferenceType typeForStat(JsStatement stat); + + /** + * If <code>stat</code> is used to set up a vtable entry for a method, + * then return that method. Otherwise return null. + */ + JMethod vtableInitToMethod(JsStatement stat); } --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---