# HG changeset patch # User Jaroslav Tulach # Date 1421770992 -3600 # Node ID a93a52b334744df731d1e34afe80c59726ea3a08 # Parent 9830c8b761ced3a0341de0e981d55b09b3c27387 Generate the ClassCastException via java.lang.Class as that one is always known to be exported diff -r 9830c8b761ce -r a93a52b33474 rt/emul/mini/src/main/java/java/lang/Class.java --- a/rt/emul/mini/src/main/java/java/lang/Class.java Tue Jan 20 13:01:31 2015 +0100 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Tue Jan 20 17:23:12 2015 +0100 @@ -1858,5 +1858,10 @@ @JavaScriptOnly(name = "bck2BrwsrThrwrbl", value = "c.bck2BrwsrCnvrt__Ljava_lang_Object_2Ljava_lang_Object_2") private static void bck2BrwsrCnvrtVM() { } + + @Exported + @JavaScriptOnly(name = "castEx", value = "function() { throw vm.java_lang_ClassCastException(true); }") + private static void castEx() { + } } diff -r 9830c8b761ce -r a93a52b33474 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 20 13:01:31 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jan 20 17:23:12 2015 +0100 @@ -2386,7 +2386,7 @@ String type = jc.getClassName(indx); if (!type.startsWith("[")) { emitNoFlush(smapper, - "if (@1 !== null && !@1['$instOf_@2']) throw vm.java_lang_ClassCastException(true);", + "if (@1 !== null && !@1['$instOf_@2']) vm.java_lang_Class(false).castEx();", smapper.getT(0, VarType.REFERENCE, false), type.replace('/', '_')); } else { int cnt = 0; @@ -2396,12 +2396,12 @@ if (type.charAt(cnt) == 'L') { type = "vm." + mangleClassName(type.substring(cnt + 1, type.length() - 1)); emitNoFlush(smapper, - "if (@1 !== null && !Array.prototype['isInstance__ZLjava_lang_Object_2ILjava_lang_Object_2'](@1, @3, @2)) throw vm.java_lang_ClassCastException(true);", + "if (@1 !== null && !Array.prototype['isInstance__ZLjava_lang_Object_2ILjava_lang_Object_2'](@1, @3, @2)) vm.java_lang_Class(false).castEx();", smapper.getT(0, VarType.REFERENCE, false), type, "" + cnt ); } else { emitNoFlush(smapper, - "if (@1 !== null && !Array.prototype['isInstance__ZLjava_lang_Object_2Ljava_lang_String_2'](@1, '@2')) throw vm.java_lang_ClassCastException(true);", + "if (@1 !== null && !Array.prototype['isInstance__ZLjava_lang_Object_2Ljava_lang_String_2'](@1, '@2')) vm.java_lang_Class(false).castEx();", smapper.getT(0, VarType.REFERENCE, false), type ); }