# HG changeset patch # User Jaroslav Tulach # Date 1355555865 -3600 # Node ID 3884815c0629831abb5b744174d3045529639272 # Parent 1848c77df886350f9ac0c102d9bb59a840532365 Class.forName can load new classes diff -r 1848c77df886 -r 3884815c0629 emul/src/main/java/java/lang/Class.java --- a/emul/src/main/java/java/lang/Class.java Sat Dec 15 07:10:58 2012 +0100 +++ b/emul/src/main/java/java/lang/Class.java Sat Dec 15 08:17:45 2012 +0100 @@ -144,18 +144,22 @@ */ public static Class forName(String className) throws ClassNotFoundException { - Class c = loadCls(className.replace('.', '_')); + Class c = loadCls(className, className.replace('.', '_')); if (c == null) { throw new ClassNotFoundException(); } return c; } - @JavaScriptBody(args = "c", body = - "if (vm[c]) return vm[c].$class;" - + "else return null;" + @JavaScriptBody(args = {"n", "c" }, body = + "if (vm[c]) return vm[c].$class;\n" + + "if (vm.loadClass) {\n" + + " vm.loadClass(n);\n" + + " if (vm[c]) return vm[c].$class;\n" + + "}\n" + + "return null;" ) - private static native Class loadCls(String c); + private static native Class loadCls(String n, String c); /** diff -r 1848c77df886 -r 3884815c0629 vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sat Dec 15 07:10:58 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sat Dec 15 08:17:45 2012 +0100 @@ -119,6 +119,7 @@ + " return vm.org_apidesign_vm4brwsr_VMLazy(false).\n" + " load___3Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n" + " }\n" + + " if (args[0]) vm.loadClass = loader.loadClass;\n" + " return loader;\n" + " };\n"); out.append("}(this));"); diff -r 1848c77df886 -r 3884815c0629 vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareStringsTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareStringsTest.java Sat Dec 15 07:10:58 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/tck/CompareStringsTest.java Sat Dec 15 08:17:45 2012 +0100 @@ -17,6 +17,7 @@ */ package org.apidesign.vm4brwsr.tck; +import java.lang.reflect.Method; import org.apidesign.vm4brwsr.Compare; import org.apidesign.vm4brwsr.CompareVMs; import org.testng.annotations.Factory; @@ -39,7 +40,10 @@ @Compare public String nameOfStringClass() throws Exception { return Class.forName("java.lang.String").getName(); } - + @Compare public String nameOfArrayClass() throws Exception { + return Class.forName("org.apidesign.vm4brwsr.Array").getName(); + } + @Factory public static Object[] create() { return CompareVMs.create(CompareStringsTest.class);