We were failing to staticify certain call sites simply because no new static impl methods are created.
Found by:andres.a.testi
Review by: spoon (postmortem)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3133 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java b/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java
index a5df81d..7e5e399 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java
@@ -158,7 +158,7 @@
}
// Set the new original param types based on the old original param types
- List<JType> originalParamTypes = new ArrayList<JType>();
+ List<JType> originalParamTypes = new ArrayList<JType>();
originalParamTypes.add(enclosingType);
originalParamTypes.addAll(x.getOriginalParamTypes());
newMethod.setOriginalParamTypes(originalParamTypes);
@@ -302,19 +302,21 @@
private boolean execImpl() {
FindStaticDispatchSitesVisitor finder = new FindStaticDispatchSitesVisitor();
finder.accept(program);
- if (toBeMadeStatic.isEmpty()) {
- return false;
- }
CreateStaticImplsVisitor creator = new CreateStaticImplsVisitor();
for (JMethod method : toBeMadeStatic) {
creator.accept(method);
}
+ /*
+ * Run the rewriter even if we didn't make any new static methods; other
+ * optimizations can unlock devirtualizations even if no more static impls
+ * are created.
+ */
RewriteCallSites rewriter = new RewriteCallSites();
rewriter.accept(program);
- assert (rewriter.didChange());
- return true;
+ assert (rewriter.didChange() || toBeMadeStatic.isEmpty());
+ return rewriter.didChange();
}
}