1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 24 00:11:04 2013 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Jan 24 17:08:02 2013 +0100
1.3 @@ -1106,11 +1106,13 @@
1.4 int indx = readIntArg(byteCodes, i);
1.5 final String type = jc.getClassName(indx);
1.6 if (!type.startsWith("[")) {
1.7 - // no way to check arrays right now
1.8 - // XXX proper exception
1.9 emit(out,
1.10 "if (@1 !== null && !@1.$instOf_@2) throw {};",
1.11 smapper.getA(0), type.replace('/', '_'));
1.12 + } else {
1.13 + 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);",
1.14 + smapper.getA(0), type
1.15 + );
1.16 }
1.17 i += 2;
1.18 break;
1.19 @@ -1118,9 +1120,16 @@
1.20 case opc_instanceof: {
1.21 int indx = readIntArg(byteCodes, i);
1.22 final String type = jc.getClassName(indx);
1.23 - emit(out, "var @2 = @1.$instOf_@3 ? 1 : 0;",
1.24 - smapper.popA(), smapper.pushI(),
1.25 - type.replace('/', '_'));
1.26 + if (!type.startsWith("[")) {
1.27 + emit(out, "var @2 = @1.$instOf_@3 ? 1 : 0;",
1.28 + smapper.popA(), smapper.pushI(),
1.29 + type.replace('/', '_'));
1.30 + } else {
1.31 + emit(out, "var @2 = vm.java_lang_Class(false).forName__Ljava_lang_Class_2Ljava_lang_String_2('@3').isInstance__ZLjava_lang_Object_2(@1);",
1.32 + smapper.popA(), smapper.pushI(),
1.33 + type
1.34 + );
1.35 + }
1.36 i += 2;
1.37 break;
1.38 }