instanceOf support
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 20 Sep 2012 10:39:54 +0200
changeset 17cb0cfba1b863
parent 16 6e8e00258234
child 18 361b76189f8d
instanceOf support
src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java
src/test/java/org/apidesign/java4browser/InstanceTest.java
     1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java	Thu Sep 20 10:26:59 2012 +0200
     1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java	Thu Sep 20 10:39:54 2012 +0200
     1.3 @@ -82,6 +82,7 @@
     1.4                  out.append("\n  this." + v.getName() + " = 0;");
     1.5              }
     1.6          }
     1.7 +        out.append("\n  this.$instOf_").append(className).append(" = true;");
     1.8          out.append("\n}");
     1.9          ClassName sc = jc.getSuperClass();
    1.10          if (sc != null) {
    1.11 @@ -446,6 +447,14 @@
    1.12                      i += 2;
    1.13                      break;
    1.14                  }
    1.15 +                case bc_instanceof: {
    1.16 +                    int indx = readIntArg(byteCodes, i);
    1.17 +                    CPClassInfo ci = jc.getConstantPool().getClass(indx);
    1.18 +                    out.append("stack.push(stack.pop().$instOf_")
    1.19 +                       .append(ci.getClassName().getExternalName().replace('.', '_'))
    1.20 +                       .append(" ? 1 : 0);");
    1.21 +                    i += 2;
    1.22 +                }
    1.23                      
    1.24              }
    1.25              out.append(" /*");
     2.1 --- a/src/test/java/org/apidesign/java4browser/InstanceTest.java	Thu Sep 20 10:26:59 2012 +0200
     2.2 +++ b/src/test/java/org/apidesign/java4browser/InstanceTest.java	Thu Sep 20 10:39:54 2012 +0200
     2.3 @@ -57,7 +57,7 @@
     2.4              Double.valueOf(0.0)
     2.5          );
     2.6      }
     2.7 -    /*
     2.8 +
     2.9      @Test public void isInstanceOf() throws Exception {
    2.10          assertExec(
    2.11              "Yes, we are instance",
    2.12 @@ -73,7 +73,7 @@
    2.13              Double.valueOf(0.0), false
    2.14          );
    2.15      }
    2.16 -    */
    2.17 +    
    2.18      private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
    2.19          StringBuilder sb = new StringBuilder();
    2.20          Invocable i = StaticMethodTest.compileClass(sb, "Instance.class", "InstanceSub.class");