Exporting widely used methods via Class, which is guaranteed to be available, rather than Throwable closure
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 04 May 2014 12:02:57 +0200
branchclosure
changeset 15220d32bf6b4436
parent 1521 6c709f05afa5
child 1523 d1eeb43a75a3
Exporting widely used methods via Class, which is guaranteed to be available, rather than Throwable
rt/emul/mini/src/main/java/java/lang/Class.java
rt/emul/mini/src/main/java/java/lang/Throwable.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ClosureWrapper.java
     1.1 --- a/rt/emul/mini/src/main/java/java/lang/Class.java	Sat May 03 20:41:35 2014 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java	Sun May 04 12:02:57 2014 +0200
     1.3 @@ -1790,4 +1790,23 @@
     1.4          + "}\n"
     1.5      )
     1.6      static native int activate();
     1.7 +    
     1.8 +    private static Object bck2BrwsrCnvrt(Object o) {
     1.9 +        if (o instanceof Throwable) {
    1.10 +            return o;
    1.11 +        }
    1.12 +        final String msg = msg(o);
    1.13 +        if (msg == null || msg.startsWith("TypeError")) {
    1.14 +            return new NullPointerException(msg);
    1.15 +        }
    1.16 +        return new Throwable(msg);
    1.17 +    }
    1.18 +
    1.19 +    @JavaScriptBody(args = {"o"}, body = "return o ? o.toString() : null;")
    1.20 +    private static native String msg(Object o);
    1.21 +
    1.22 +    @JavaScriptOnly(name = "bck2BrwsrThrwrbl", value = "c.bck2BrwsrCnvrt__Ljava_lang_Object_2Ljava_lang_Object_2")
    1.23 +    private static void bck2BrwsrCnvrtVM() {
    1.24 +    }
    1.25 +    
    1.26  }
     2.1 --- a/rt/emul/mini/src/main/java/java/lang/Throwable.java	Sat May 03 20:41:35 2014 +0200
     2.2 +++ b/rt/emul/mini/src/main/java/java/lang/Throwable.java	Sun May 04 12:02:57 2014 +0200
     2.3 @@ -1025,22 +1025,4 @@
     2.4  //        else
     2.5  //            return suppressedExceptions.toArray(EMPTY_THROWABLE_ARRAY);
     2.6      }
     2.7 -    
     2.8 -    private static Object bck2BrwsrCnvrt(Object o) {
     2.9 -        if (o instanceof Throwable) {
    2.10 -            return o;
    2.11 -        }
    2.12 -        final String msg = msg(o);
    2.13 -        if (msg == null || msg.startsWith("TypeError")) {
    2.14 -            return new NullPointerException(msg);
    2.15 -        }
    2.16 -        return new Throwable(msg);
    2.17 -    }
    2.18 -    
    2.19 -    @JavaScriptBody(args = { "o" }, body = "return o ? o.toString() : null;")
    2.20 -    private static native String msg(Object o);
    2.21 -
    2.22 -    @JavaScriptOnly(name = "bck2BrwsrCnvrt", value = "c.bck2BrwsrCnvrt__Ljava_lang_Object_2Ljava_lang_Object_2")
    2.23 -    private static void bck2BrwsrCnvrtVM() {
    2.24 -    }
    2.25  }
     3.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sat May 03 20:41:35 2014 +0200
     3.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun May 04 12:02:57 2014 +0200
     3.3 @@ -2062,7 +2062,7 @@
     3.4              if (e.catch_cpx != 0) { //not finally
     3.5                  final String classInternalName = jc.getClassName(e.catch_cpx);
     3.6                  addReference(classInternalName);
     3.7 -                append("e = vm.java_lang_Throwable(false).bck2BrwsrCnvrt(e);");
     3.8 +                append("e = vm.java_lang_Class(false).bck2BrwsrThrwrbl(e);");
     3.9                  append("if (e['$instOf_" + classInternalName.replace('/', '_') + "']) {");
    3.10                  append("var stA0 = e;");
    3.11                  goTo(this, current, e.handler_pc, topMostLabel);
     4.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClosureWrapper.java	Sat May 03 20:41:35 2014 +0200
     4.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClosureWrapper.java	Sun May 04 12:02:57 2014 +0200
     4.3 @@ -150,7 +150,7 @@
     4.4  
     4.5      private static final String[] FIXED_EXTERNS = {
     4.6          "bck2brwsr",
     4.7 -        "bck2BrwsrCnvrt",
     4.8 +        "bck2BrwsrThrwrbl",
     4.9          "registerExtension",
    4.10          "$class",
    4.11          "anno",