# HG changeset patch # User Jaroslav Tulach # Date 1355067816 -3600 # Node ID c6f21b56a6cf27297423f6db3f93e3227142dc79 # Parent 21c0cf272b0590649a5ad6f5e79d2bb59505d6ec Null can be casted to any type diff -r 21c0cf272b05 -r c6f21b56a6cf vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Dec 07 10:35:31 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 09 16:43:36 2012 +0100 @@ -759,9 +759,9 @@ final String type = jc.getClassName(indx); if (!type.startsWith("[")) { // no way to check arrays right now - out.append("if(s[s.length - 1].$instOf_") + out.append("if(s[s.length - 1] !== null && !s[s.length - 1].$instOf_") .append(type.replace('/', '_')) - .append(" != 1) throw {};"); // XXX proper exception + .append(") throw {};"); // XXX proper exception } i += 2; break; diff -r 21c0cf272b05 -r c6f21b56a6cf vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Fri Dec 07 10:35:31 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Sun Dec 09 16:43:36 2012 +0100 @@ -106,6 +106,11 @@ throw new IllegalStateException(); } + public static String castNull(boolean n) { + Object value = n ? null : "Ahoj"; + return (String)value; + } + public static String swtch(int what) { switch (what) { case 0: return "Jarda"; diff -r 21c0cf272b05 -r c6f21b56a6cf vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Fri Dec 07 10:35:31 2012 +0100 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Sun Dec 09 16:43:36 2012 +0100 @@ -238,6 +238,13 @@ ); } + @Test public void checkNullCast() throws Exception { + assertExec("Null can be cast to any type", + StaticMethod.class, "castNull__Ljava_lang_String_2Z", + null, true + ); + } + private static CharSequence codeSeq; private static Invocable code;