VM in VM properly processes class constants lazyvm
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 11 Dec 2012 11:05:06 +0100
branchlazyvm
changeset 303c12342170235
parent 302 af9c8df8a660
child 304 3090a35d970f
VM in VM properly processes class constants
javap/src/main/java/org/apidesign/javap/ClassData.java
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java
vm/src/test/java/org/apidesign/vm4brwsr/Classes.java
vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java
vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java
     1.1 --- a/javap/src/main/java/org/apidesign/javap/ClassData.java	Tue Dec 11 10:24:00 2012 +0100
     1.2 +++ b/javap/src/main/java/org/apidesign/javap/ClassData.java	Tue Dec 11 11:05:06 2012 +0100
     1.3 @@ -554,14 +554,14 @@
     1.4              return in.toString();
     1.5          }
     1.6          case CONSTANT_CLASS:
     1.7 -            String jn = javaName(getClassName(cpx));
     1.8 +            String jn = getClassName(cpx);
     1.9              if (textual) {
    1.10                  if (refs != null) {
    1.11                      refs[0] = jn;
    1.12                  }
    1.13                  return jn;
    1.14              }
    1.15 -            return jn;
    1.16 +            return javaName(jn);
    1.17          case CONSTANT_STRING:
    1.18              String sv = stringValue(((CPX)x).cpx, textual);
    1.19              if (textual) {
     2.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Dec 11 10:24:00 2012 +0100
     2.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Dec 11 11:05:06 2012 +0100
     2.3 @@ -19,6 +19,7 @@
     2.4  
     2.5  import java.io.IOException;
     2.6  import java.io.InputStream;
     2.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
     2.8  import org.apidesign.javap.AnnotationParser;
     2.9  import org.apidesign.javap.ClassData;
    2.10  import org.apidesign.javap.FieldData;
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Tue Dec 11 10:24:00 2012 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Tue Dec 11 11:05:06 2012 +0100
     3.3 @@ -110,6 +110,12 @@
     3.4              "java.io.IOException", false, null
     3.5          );
     3.6      }
     3.7 +    @Test public void jsClassParam() throws Exception {
     3.8 +        assertExec("Calls the nameOfIO()", Classes.class, 
     3.9 +            "nameOfIO__Ljava_lang_String_2", 
    3.10 +            "java.io.IOException"
    3.11 +        );
    3.12 +    }
    3.13      
    3.14      private static CharSequence codeSeq;
    3.15      private static Invocable code;
     4.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Tue Dec 11 10:24:00 2012 +0100
     4.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Tue Dec 11 11:05:06 2012 +0100
     4.3 @@ -30,6 +30,14 @@
     4.4  @ClassesMarker(number = 10)
     4.5  @ClassesNamer(name = "my text")
     4.6  public class Classes {
     4.7 +    public static String nameOfIO() {
     4.8 +        return nameFor(IOException.class);
     4.9 +    }
    4.10 +    
    4.11 +    private static String nameFor(Class<?> c) {
    4.12 +        return c.getName();
    4.13 +    }
    4.14 +    
    4.15      public static boolean equalsClassesOfExceptions() {
    4.16          return MalformedURLException.class.getSuperclass() == IOException.class;
    4.17      }
     5.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java	Tue Dec 11 10:24:00 2012 +0100
     5.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java	Tue Dec 11 11:05:06 2012 +0100
     5.3 @@ -104,6 +104,12 @@
     5.4              ScriptEngineManager sem = new ScriptEngineManager();
     5.5              ScriptEngine js = sem.getEngineByExtension("js");
     5.6              js.getContext().setAttribute("loader", new BytesLoader(), ScriptContext.ENGINE_SCOPE);
     5.7 +            
     5.8 +            sb.append("\nfunction initVM() {"
     5.9 +                + "\n  return bck2brwsr("
    5.10 +                + "\n    function(name) { return loader.get(name);}"
    5.11 +                + "\n  );"
    5.12 +                + "\n};");
    5.13  
    5.14              Object res = js.eval(sb.toString());
    5.15              Assert.assertTrue(js instanceof Invocable, "It is invocable object: " + res);
    5.16 @@ -115,7 +121,7 @@
    5.17              if (js) {
    5.18                  try {
    5.19                      compileTheCode(m.getDeclaringClass());
    5.20 -                    Object vm = code.invokeFunction("bck2brwsr");
    5.21 +                    Object vm = code.invokeFunction("initVM");
    5.22                      Object inst = code.invokeMethod(vm, "loadClass", m.getDeclaringClass().getName());
    5.23                      value = code.invokeMethod(inst, m.getName() + "__I");
    5.24                  } catch (Exception ex) {
     6.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java	Tue Dec 11 10:24:00 2012 +0100
     6.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java	Tue Dec 11 11:05:06 2012 +0100
     6.3 @@ -38,6 +38,10 @@
     6.4      @Test public void compareGeneratedCodeForArrayClass() throws Exception {
     6.5          compareCode("/org/apidesign/vm4brwsr/Array.class");
     6.6      }
     6.7 +
     6.8 +    @Test public void compareGeneratedCodeForClassesClass() throws Exception {
     6.9 +        compareCode("/org/apidesign/vm4brwsr/Classes.class");
    6.10 +    }
    6.11      
    6.12      @BeforeClass
    6.13      public void compileTheCode() throws Exception {
    6.14 @@ -91,9 +95,12 @@
    6.15          assertTrue(ret instanceof String, "It is string: " + ret);
    6.16          
    6.17          if (!ret1.toString().equals(ret)) {
    6.18 -            StringBuilder msg = StaticMethodTest.dumpJS(ret1);
    6.19 -            msg.append(" is not the same as ");
    6.20 +            StringBuilder msg = new StringBuilder("Difference found between ");
    6.21 +            msg.append(StaticMethodTest.dumpJS(ret1));
    6.22 +            msg.append(" ");
    6.23              msg.append(StaticMethodTest.dumpJS((CharSequence) ret));
    6.24 +            msg.append(" compiled by ");
    6.25 +            msg.append(StaticMethodTest.dumpJS(codeSeq));
    6.26              fail(msg.toString());
    6.27          }
    6.28      }