vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 30 7efb52f76270
parent 22 b9318fe303cd
child 31 3072c9fab69c
     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              }