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