1.1 --- a/rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java Sun Mar 20 11:01:12 2016 +0100
1.2 +++ b/rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java Sun Mar 20 15:26:19 2016 +0100
1.3 @@ -48,9 +48,9 @@
1.4 import java.util.List;
1.5 import java.util.ListIterator;
1.6 import java.util.WeakHashMap;
1.7 +import org.apidesign.bck2brwsr.core.Exported;
1.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
1.9 import org.apidesign.bck2brwsr.emul.reflect.MethodImpl;
1.10 -import org.apidesign.vm4brwsr.api.VM;
1.11
1.12 /**
1.13 * {@code Proxy} provides static methods for creating dynamic proxy
1.14 @@ -234,6 +234,7 @@
1.15 * @see InvocationHandler
1.16 * @since 1.3
1.17 */
1.18 +@Exported
1.19 public final class ProxyImpl implements java.io.Serializable {
1.20
1.21 private static final long serialVersionUID = -2222568056686623797L;
2.1 --- a/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Sun Mar 20 11:01:12 2016 +0100
2.2 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Sun Mar 20 15:26:19 2016 +0100
2.3 @@ -75,6 +75,10 @@
2.4 return Runnable.class.getMethod("run").getName();
2.5 }
2.6
2.7 + @Compare public boolean RunnableRunReturnsVoid() throws NoSuchMethodException {
2.8 + return Runnable.class.getMethod("run").getReturnType() == Void.TYPE;
2.9 + }
2.10 +
2.11 @Compare public String isRunnableDeclaresRunMethod() throws NoSuchMethodException {
2.12 return Runnable.class.getDeclaredMethod("run").getName();
2.13 }
3.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Mar 20 11:01:12 2016 +0100
3.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Mar 20 15:26:19 2016 +0100
3.3 @@ -130,8 +130,9 @@
3.4 return object + "." + mangledName + '(';
3.5 }
3.6
3.7 - protected void declaredClass(ClassData classData, String mangledName)
3.8 - throws IOException {
3.9 + protected void declareClass(ClassData classData, String mangledName)
3.10 + throws IOException {
3.11 + append(mangledName);
3.12 }
3.13
3.14 protected void declaredField(FieldData fieldData,
3.15 @@ -223,7 +224,7 @@
3.16 );
3.17 StringArray toInitilize = new StringArray();
3.18 final String className = className(jc);
3.19 - append("\n\n").append(assignClass(className));
3.20 + append("\n\n");
3.21 append("function ").append(className).append("() {");
3.22 append("\n var m;");
3.23 append("\n var CLS = ").append(className).append(';');
3.24 @@ -383,7 +384,9 @@
3.25 append("\n return arguments[0] ? new CLS() : CLS.prototype;");
3.26 append("\n};");
3.27
3.28 - declaredClass(jc, className);
3.29 + append("\n").append(assignClass(className));
3.30 + declareClass(jc, className);
3.31 + append(";\n");
3.32
3.33 // StringBuilder sb = new StringBuilder();
3.34 // for (String init : toInitilize.toArray()) {
4.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sun Mar 20 11:01:12 2016 +0100
4.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Sun Mar 20 15:26:19 2016 +0100
4.3 @@ -95,8 +95,11 @@
4.4
4.5 private void doCompile(StringArray names) throws IOException {
4.6 generatePrologue();
4.7 - append(
4.8 - "\n var invoker = {};");
4.9 + append("\n var invoker = {};");
4.10 + append("\n function registerClass(vm, name, fn) {");
4.11 + append("\n if (!vm[name]) vm[name] = fn;");
4.12 + append("\n return vm[name];");
4.13 + append("\n }");
4.14 generateBody(names);
4.15 append(invokerMethods);
4.16
4.17 @@ -147,15 +150,17 @@
4.18 protected abstract void lazyReference(Appendable out, String n) throws IOException;
4.19
4.20 @Override
4.21 - protected final void declaredClass(ClassData classData, String mangledName)
4.22 + protected final void declareClass(ClassData classData, String mangledName)
4.23 throws IOException {
4.24 if (exportedSymbols.isExported(classData)) {
4.25 - append("\n").append(getExportsObject()).append("['")
4.26 + append("registerClass(").append(getExportsObject()).append(",'")
4.27 .append(mangledName)
4.28 - .append("'] = ")
4.29 - .append(accessClass(mangledName))
4.30 - .append(";\n");
4.31 + .append("',")
4.32 + .append(mangledName)
4.33 + .append(")");
4.34 exportedCount++;
4.35 + } else {
4.36 + append(mangledName);
4.37 }
4.38 }
4.39