Fixes a bug where array class literals could read the value of Object.class before it was defined.
Review by: spoon (postmortem)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2497 8db76d5a-ed1c-0410-87a9-c151d255dfc7
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 2b990ba..6fb3a68 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
@@ -1206,13 +1206,24 @@
return new JsBinaryOperation(JsBinaryOperator.COMMA, lhs, rhs);
}
+ private void generateClassLiteral(JType type, JsVars vars) {
+ JsName jsName = classLits.get(type);
+ JsExpression classObjectAlloc = classObjects.get(jsName);
+ JsVar var = new JsVar(jsName);
+ var.setInitExpr(classObjectAlloc);
+ vars.add(var);
+ }
+
private void generateClassLiterals(JsVars vars) {
+ // Object must go first; arrays depend on it.
+ JClassType objType = program.getTypeJavaLangObject();
+ if (classLits.containsKey(objType)) {
+ generateClassLiteral(objType, vars);
+ }
for (JType type : classLits.keySet()) {
- JsName jsName = classLits.get(type);
- JsExpression classObjectAlloc = classObjects.get(jsName);
- JsVar var = new JsVar(jsName);
- var.setInitExpr(classObjectAlloc);
- vars.add(var);
+ if (type != objType) {
+ generateClassLiteral(type, vars);
+ }
}
}