Throw real ClassCastException model
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 10 Apr 2013 10:08:18 +0200
branchmodel
changeset 962787578f33c21
parent 961 3cdaee10e72b
child 963 62d77cc38117
Throw real ClassCastException
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Apr 10 09:55:26 2013 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed Apr 10 10:08:18 2013 +0200
     1.3 @@ -1940,7 +1940,7 @@
     1.4          final String type = jc.getClassName(indx);
     1.5          if (!type.startsWith("[")) {
     1.6              emit(out,
     1.7 -                 "if (@1 !== null && !@1.$instOf_@2) throw {};",
     1.8 +                 "if (@1 !== null && !@1.$instOf_@2) throw vm.java_lang_ClassCastException(true);",
     1.9                   smapper.getA(0), type.replace('/', '_'));
    1.10          } else {
    1.11              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);",
     2.1 --- a/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Wed Apr 10 09:55:26 2013 +0200
     2.2 +++ b/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Wed Apr 10 10:08:18 2013 +0200
     2.3 @@ -103,6 +103,15 @@
     2.4          StaticUse.class.getMethod("instanceMethod").invoke(null);
     2.5          return "should not happen";
     2.6      }
     2.7 +    
     2.8 +    @Compare public String classCastException() {
     2.9 +        try {
    2.10 +            Integer i = (Integer)StaticUseSub.getNonNull();
    2.11 +            return "" + i.intValue();
    2.12 +        } catch (ClassCastException ex) {
    2.13 +            return ex.getClass().getName();
    2.14 +        }
    2.15 +    }
    2.16  
    2.17      @Compare public String methodThatThrowsException() throws Exception {
    2.18          StaticUse.class.getMethod("instanceMethod").invoke(new StaticUse());