Fail the build if invokeDynamic instruction remains un-preprocessed
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 14 Sep 2014 22:33:35 +0200
changeset 1696ce34fdc36fac
parent 1695 e92259cb930a
child 1697 461cd4b24db9
Fail the build if invokeDynamic instruction remains un-preprocessed
rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/Bck2BrwsrJars.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/Bck2BrwsrJars.java	Sun Sep 14 21:54:20 2014 +0200
     1.2 +++ b/rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/Bck2BrwsrJars.java	Sun Sep 14 22:33:35 2014 +0200
     1.3 @@ -81,7 +81,11 @@
     1.4              }
     1.5              @Override
     1.6              public InputStream get(String resource) throws IOException {
     1.7 -                InputStream is = jf.getInputStream(new ZipEntry(resource));
     1.8 +                InputStream is = getConverted(resource);
     1.9 +                if (is != null) {
    1.10 +                    return is;
    1.11 +                }
    1.12 +                is = jf.getInputStream(new ZipEntry(resource));
    1.13                  return is == null ? super.get(resource) : is;
    1.14              }
    1.15          }
    1.16 @@ -198,13 +202,20 @@
    1.17              this.proc = p;
    1.18          }
    1.19  
    1.20 -        @Override
    1.21 -        public InputStream get(String name) throws IOException {
    1.22 +        protected final InputStream getConverted(String name) throws IOException {
    1.23              byte[] arr = converted.get(name);
    1.24              if (arr != null) {
    1.25                  return new ByteArrayInputStream(arr);
    1.26              }
    1.27 -            
    1.28 +            return null;
    1.29 +        }
    1.30 +        
    1.31 +        @Override
    1.32 +        public InputStream get(String name) throws IOException {
    1.33 +            InputStream is = getConverted(name);
    1.34 +            if (is != null) {
    1.35 +                return is;
    1.36 +            }
    1.37              Enumeration<URL> en = Bck2BrwsrJars.class.getClassLoader().getResources(name);
    1.38              URL u = null;
    1.39              while (en.hasMoreElements()) {
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Sep 14 21:54:20 2014 +0200
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Sep 14 22:33:35 2014 +0200
     2.3 @@ -1076,11 +1076,15 @@
     2.4                      char[] returnType = {'V'};
     2.5                      StringBuilder cnt = new StringBuilder();
     2.6                      String mn = findMethodName(mi, cnt, returnType);
     2.7 -                    println("  mi[0]: " + mi[0]);
     2.8 -                    println("  mi[1]: " + mi[1]);
     2.9 -                    println("  mi[2]: " + mi[2]);
    2.10 -                    println("  mn   : " + mn);
    2.11 -                    println("  name and type: " + jc.stringValue(c2.cpx2, true));
    2.12 +                    StringBuilder sb = new StringBuilder();
    2.13 +                    sb.append("We don't handle invokedynamic, need to preprocess ahead-of-time:\n");
    2.14 +                    sb.append("  mi[0]: ").append(mi[0]).append("\n");
    2.15 +                    sb.append("  mi[1]: ").append(mi[1]).append("\n");
    2.16 +                    sb.append("  mi[2]: ").append(mi[2]).append("\n");
    2.17 +                    sb.append("  mn   : ").append(mn).append("\n");
    2.18 +                    sb.append("  name and type: ").append(jc.stringValue(c2.cpx2, true)).append("\n");
    2.19 +                    throw new IOException(sb.toString());
    2.20 +                    /*
    2.21                      CPX2 nameAndType = jc.getCpoolEntry(c2.cpx2);
    2.22                      String type = jc.StringValue(nameAndType.cpx2);
    2.23                      String object = accessClass(mcn) + "(false)";
    2.24 @@ -1106,6 +1110,7 @@
    2.25                      emit(smapper, this, "throw 'Invoke dynamic: ' + @1 + ': ' + metHan;", "" + indx);
    2.26                      i += 4;
    2.27                      break;
    2.28 +                    */
    2.29                  }
    2.30                  case opc_new: {
    2.31                      int indx = readUShortArg(byteCodes, i);