1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Sep 24 11:07:38 2012 +0200
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Sep 25 12:26:29 2012 +0200
1.3 @@ -101,6 +101,9 @@
1.4 }
1.5 }
1.6 out.append("\n this.$instOf_").append(className).append(" = true;");
1.7 + for (ClassName superInterface : jc.getInterfaces()) {
1.8 + out.append("\n this.$instOf_").append(superInterface.getInternalName().replace('/', '_')).append(" = true;");
1.9 + }
1.10 out.append("\n}");
1.11 ClassName sc = jc.getSuperClass();
1.12 if (sc != null) {
1.13 @@ -569,6 +572,15 @@
1.14 i += 2;
1.15 break;
1.16 }
1.17 + case bc_checkcast: {
1.18 + int indx = readIntArg(byteCodes, i);
1.19 + CPClassInfo ci = jc.getConstantPool().getClass(indx);
1.20 + out.append("if(stack[stack.length - 1].$instOf_")
1.21 + .append(ci.getClassName().getInternalName().replace('/', '_'))
1.22 + .append(" != 1) throw {};"); // XXX proper exception
1.23 + i += 2;
1.24 + break;
1.25 + }
1.26 case bc_instanceof: {
1.27 int indx = readIntArg(byteCodes, i);
1.28 CPClassInfo ci = jc.getConstantPool().getClass(indx);
1.29 @@ -576,6 +588,7 @@
1.30 .append(ci.getClassName().getInternalName().replace('/', '_'))
1.31 .append(" ? 1 : 0);");
1.32 i += 2;
1.33 + break;
1.34 }
1.35
1.36 }