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