Exporting widely used methods via Class, which is guaranteed to be available, rather than Throwable
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",