# HG changeset patch # User Jaroslav Tulach # Date 1365581298 -7200 # Node ID 787578f33c2142363aa921ac0efde3338b39a784 # Parent 3cdaee10e72b6184cd184ad461ff871e0f5a14b6 Throw real ClassCastException diff -r 3cdaee10e72b -r 787578f33c21 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Apr 10 09:55:26 2013 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Apr 10 10:08:18 2013 +0200 @@ -1940,7 +1940,7 @@ final String type = jc.getClassName(indx); if (!type.startsWith("[")) { emit(out, - "if (@1 !== null && !@1.$instOf_@2) throw {};", + "if (@1 !== null && !@1.$instOf_@2) throw vm.java_lang_ClassCastException(true);", smapper.getA(0), type.replace('/', '_')); } else { emit(out, "vm.java_lang_Class(false).forName__Ljava_lang_Class_2Ljava_lang_String_2('@2').cast__Ljava_lang_Object_2Ljava_lang_Object_2(@1);", diff -r 3cdaee10e72b -r 787578f33c21 rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java --- a/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Wed Apr 10 09:55:26 2013 +0200 +++ b/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Wed Apr 10 10:08:18 2013 +0200 @@ -103,6 +103,15 @@ StaticUse.class.getMethod("instanceMethod").invoke(null); return "should not happen"; } + + @Compare public String classCastException() { + try { + Integer i = (Integer)StaticUseSub.getNonNull(); + return "" + i.intValue(); + } catch (ClassCastException ex) { + return ex.getClass().getName(); + } + } @Compare public String methodThatThrowsException() throws Exception { StaticUse.class.getMethod("instanceMethod").invoke(new StaticUse());