# HG changeset patch # User Jaroslav Tulach # Date 1355220306 -3600 # Node ID c12342170235503ae96bd6aa8cd57c6e3bda3f3f # Parent af9c8df8a66028dd457a6882399c67dea3c1c0d7 VM in VM properly processes class constants diff -r af9c8df8a660 -r c12342170235 javap/src/main/java/org/apidesign/javap/ClassData.java --- a/javap/src/main/java/org/apidesign/javap/ClassData.java Tue Dec 11 10:24:00 2012 +0100 +++ b/javap/src/main/java/org/apidesign/javap/ClassData.java Tue Dec 11 11:05:06 2012 +0100 @@ -554,14 +554,14 @@ return in.toString(); } case CONSTANT_CLASS: - String jn = javaName(getClassName(cpx)); + String jn = getClassName(cpx); if (textual) { if (refs != null) { refs[0] = jn; } return jn; } - return jn; + return javaName(jn); case CONSTANT_STRING: String sv = stringValue(((CPX)x).cpx, textual); if (textual) { diff -r af9c8df8a660 -r c12342170235 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Dec 11 10:24:00 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Dec 11 11:05:06 2012 +0100 @@ -19,6 +19,7 @@ import java.io.IOException; import java.io.InputStream; +import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.javap.AnnotationParser; import org.apidesign.javap.ClassData; import org.apidesign.javap.FieldData; diff -r af9c8df8a660 -r c12342170235 vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Tue Dec 11 10:24:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java Tue Dec 11 11:05:06 2012 +0100 @@ -110,6 +110,12 @@ "java.io.IOException", false, null ); } + @Test public void jsClassParam() throws Exception { + assertExec("Calls the nameOfIO()", Classes.class, + "nameOfIO__Ljava_lang_String_2", + "java.io.IOException" + ); + } private static CharSequence codeSeq; private static Invocable code; diff -r af9c8df8a660 -r c12342170235 vm/src/test/java/org/apidesign/vm4brwsr/Classes.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Tue Dec 11 10:24:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Tue Dec 11 11:05:06 2012 +0100 @@ -30,6 +30,14 @@ @ClassesMarker(number = 10) @ClassesNamer(name = "my text") public class Classes { + public static String nameOfIO() { + return nameFor(IOException.class); + } + + private static String nameFor(Class c) { + return c.getName(); + } + public static boolean equalsClassesOfExceptions() { return MalformedURLException.class.getSuperclass() == IOException.class; } diff -r af9c8df8a660 -r c12342170235 vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Tue Dec 11 10:24:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Tue Dec 11 11:05:06 2012 +0100 @@ -104,6 +104,12 @@ ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine js = sem.getEngineByExtension("js"); js.getContext().setAttribute("loader", new BytesLoader(), ScriptContext.ENGINE_SCOPE); + + sb.append("\nfunction initVM() {" + + "\n return bck2brwsr(" + + "\n function(name) { return loader.get(name);}" + + "\n );" + + "\n};"); Object res = js.eval(sb.toString()); Assert.assertTrue(js instanceof Invocable, "It is invocable object: " + res); @@ -115,7 +121,7 @@ if (js) { try { compileTheCode(m.getDeclaringClass()); - Object vm = code.invokeFunction("bck2brwsr"); + Object vm = code.invokeFunction("initVM"); Object inst = code.invokeMethod(vm, "loadClass", m.getDeclaringClass().getName()); value = code.invokeMethod(inst, m.getName() + "__I"); } catch (Exception ex) { diff -r af9c8df8a660 -r c12342170235 vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Tue Dec 11 10:24:00 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Tue Dec 11 11:05:06 2012 +0100 @@ -38,6 +38,10 @@ @Test public void compareGeneratedCodeForArrayClass() throws Exception { compareCode("/org/apidesign/vm4brwsr/Array.class"); } + + @Test public void compareGeneratedCodeForClassesClass() throws Exception { + compareCode("/org/apidesign/vm4brwsr/Classes.class"); + } @BeforeClass public void compileTheCode() throws Exception { @@ -91,9 +95,12 @@ assertTrue(ret instanceof String, "It is string: " + ret); if (!ret1.toString().equals(ret)) { - StringBuilder msg = StaticMethodTest.dumpJS(ret1); - msg.append(" is not the same as "); + StringBuilder msg = new StringBuilder("Difference found between "); + msg.append(StaticMethodTest.dumpJS(ret1)); + msg.append(" "); msg.append(StaticMethodTest.dumpJS((CharSequence) ret)); + msg.append(" compiled by "); + msg.append(StaticMethodTest.dumpJS(codeSeq)); fail(msg.toString()); } }