# HG changeset patch # User Jaroslav Tulach # Date 1410726815 -7200 # Node ID ce34fdc36fac9d0b57297e69c667159bffcfd84e # Parent e92259cb930a379aafebde20db574078b508c31e Fail the build if invokeDynamic instruction remains un-preprocessed diff -r e92259cb930a -r ce34fdc36fac rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/Bck2BrwsrJars.java --- a/rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/Bck2BrwsrJars.java Sun Sep 14 21:54:20 2014 +0200 +++ b/rt/aot/src/main/java/org/apidesign/bck2brwsr/aot/Bck2BrwsrJars.java Sun Sep 14 22:33:35 2014 +0200 @@ -81,7 +81,11 @@ } @Override public InputStream get(String resource) throws IOException { - InputStream is = jf.getInputStream(new ZipEntry(resource)); + InputStream is = getConverted(resource); + if (is != null) { + return is; + } + is = jf.getInputStream(new ZipEntry(resource)); return is == null ? super.get(resource) : is; } } @@ -198,13 +202,20 @@ this.proc = p; } - @Override - public InputStream get(String name) throws IOException { + protected final InputStream getConverted(String name) throws IOException { byte[] arr = converted.get(name); if (arr != null) { return new ByteArrayInputStream(arr); } - + return null; + } + + @Override + public InputStream get(String name) throws IOException { + InputStream is = getConverted(name); + if (is != null) { + return is; + } Enumeration en = Bck2BrwsrJars.class.getClassLoader().getResources(name); URL u = null; while (en.hasMoreElements()) { diff -r e92259cb930a -r ce34fdc36fac rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Sep 14 21:54:20 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Sep 14 22:33:35 2014 +0200 @@ -1076,11 +1076,15 @@ char[] returnType = {'V'}; StringBuilder cnt = new StringBuilder(); String mn = findMethodName(mi, cnt, returnType); - println(" mi[0]: " + mi[0]); - println(" mi[1]: " + mi[1]); - println(" mi[2]: " + mi[2]); - println(" mn : " + mn); - println(" name and type: " + jc.stringValue(c2.cpx2, true)); + StringBuilder sb = new StringBuilder(); + sb.append("We don't handle invokedynamic, need to preprocess ahead-of-time:\n"); + sb.append(" mi[0]: ").append(mi[0]).append("\n"); + sb.append(" mi[1]: ").append(mi[1]).append("\n"); + sb.append(" mi[2]: ").append(mi[2]).append("\n"); + sb.append(" mn : ").append(mn).append("\n"); + sb.append(" name and type: ").append(jc.stringValue(c2.cpx2, true)).append("\n"); + throw new IOException(sb.toString()); + /* CPX2 nameAndType = jc.getCpoolEntry(c2.cpx2); String type = jc.StringValue(nameAndType.cpx2); String object = accessClass(mcn) + "(false)"; @@ -1106,6 +1110,7 @@ emit(smapper, this, "throw 'Invoke dynamic: ' + @1 + ': ' + metHan;", "" + indx); i += 4; break; + */ } case opc_new: { int indx = readUShortArg(byteCodes, i);