Null can be casted to any type
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 09 Dec 2012 16:43:36 +0100
changeset 291c6f21b56a6cf
parent 280 21c0cf272b05
child 292 fc3f6ea5e246
child 296 fbf8eb98a8ef
Null can be casted to any type
vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java
vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java
     1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Dec 07 10:35:31 2012 +0100
     1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Dec 09 16:43:36 2012 +0100
     1.3 @@ -759,9 +759,9 @@
     1.4                      final String type = jc.getClassName(indx);
     1.5                      if (!type.startsWith("[")) {
     1.6                          // no way to check arrays right now
     1.7 -                        out.append("if(s[s.length - 1].$instOf_")
     1.8 +                        out.append("if(s[s.length - 1] !== null && !s[s.length - 1].$instOf_")
     1.9                             .append(type.replace('/', '_'))
    1.10 -                           .append(" != 1) throw {};"); // XXX proper exception
    1.11 +                           .append(") throw {};"); // XXX proper exception
    1.12                      }
    1.13                      i += 2;
    1.14                      break;
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java	Fri Dec 07 10:35:31 2012 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java	Sun Dec 09 16:43:36 2012 +0100
     2.3 @@ -106,6 +106,11 @@
     2.4          throw new IllegalStateException();
     2.5      }
     2.6      
     2.7 +    public static String castNull(boolean n) {
     2.8 +        Object value = n ? null : "Ahoj";
     2.9 +        return (String)value;
    2.10 +    }
    2.11 +    
    2.12      public static String swtch(int what) {
    2.13          switch (what) {
    2.14              case 0: return "Jarda";
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Fri Dec 07 10:35:31 2012 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java	Sun Dec 09 16:43:36 2012 +0100
     3.3 @@ -238,6 +238,13 @@
     3.4          );
     3.5      }
     3.6      
     3.7 +    @Test public void checkNullCast() throws Exception {
     3.8 +        assertExec("Null can be cast to any type",
     3.9 +            StaticMethod.class, "castNull__Ljava_lang_String_2Z", 
    3.10 +            null, true
    3.11 +        );
    3.12 +    }
    3.13 +    
    3.14      private static CharSequence codeSeq;
    3.15      private static Invocable code;
    3.16