1.1 --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Wed Nov 28 13:41:33 2012 +0100
1.2 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Wed Nov 28 14:51:52 2012 +0100
1.3 @@ -409,6 +409,7 @@
1.4 }
1.5 java_lang_String.prototype = new String;
1.6 java_lang_String.prototype.toString = function() { return this.r; };;
1.7 +java_lang_String.prototype.valueOf = function() { return this.toString().valueOf(); };;
1.8 //java_lang_String_classV();
1.9
1.10 /* new method for JavaScript String */
2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java Wed Nov 28 13:41:33 2012 +0100
2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazy.java Wed Nov 28 14:51:52 2012 +0100
2.3 @@ -19,25 +19,42 @@
2.4
2.5 import java.io.ByteArrayInputStream;
2.6 import java.io.IOException;
2.7 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.8
2.9 /**
2.10 *
2.11 * @author Jaroslav Tulach <jtulach@netbeans.org>
2.12 */
2.13 class VMLazy extends ByteCodeToJavaScript {
2.14 - private VMLazy(Appendable out) {
2.15 + private final Object vm;
2.16 + private final Object global;
2.17 +
2.18 + private VMLazy(Object global, Object vm, Appendable out) {
2.19 super(out);
2.20 + this.vm = vm;
2.21 + this.global = global;
2.22 }
2.23
2.24 - static String toJavaScript(byte[] is) throws IOException {
2.25 + static String toJavaScript(Object global, Object vm, byte[] is) throws IOException {
2.26 StringBuilder sb = new StringBuilder();
2.27 - new VMLazy(sb).compile(new ByteArrayInputStream(is));
2.28 + new VMLazy(global, vm, sb).compile(new ByteArrayInputStream(is));
2.29 return sb.toString().toString();
2.30 }
2.31
2.32 + @JavaScriptBody(args = { "self", "n" },
2.33 + body=
2.34 + "var cls = n.replaceLjava_lang_StringCC(n,'/','_').toString();"
2.35 + + "var glb = self.fld_global;"
2.36 + + "var vm = self.fld_vm;"
2.37 + + "if (glb[cls]) return false;"
2.38 + + "glb[cls] = function() {"
2.39 + + " return vm.loadClass(n,cls);"
2.40 + + "};"
2.41 + + "return true;"
2.42 + )
2.43 @Override
2.44 protected boolean requireReference(String internalClassName) {
2.45 - return false;
2.46 + throw new UnsupportedOperationException();
2.47 }
2.48
2.49 @Override
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Wed Nov 28 13:41:33 2012 +0100
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMLazyTest.java Wed Nov 28 14:51:52 2012 +0100
3.3 @@ -42,16 +42,21 @@
3.4 StringBuilder sb = new StringBuilder();
3.5
3.6 sb.append("\nfunction test(clazz, as, method) {");
3.7 - sb.append("\n var l = new lazyVM();");
3.8 + sb.append("\n var l = new lazyVM(this);");
3.9 sb.append("\n var c = l.loadClass(clazz, as);");
3.10 sb.append("\n return c[method]();");
3.11 sb.append("\n}");
3.12
3.13
3.14 - sb.append("\nfunction lazyVM() {");
3.15 + sb.append("\nfunction lazyVM(global) {");
3.16 sb.append("\n var self = this;");
3.17 - sb.append("\n this.constructor.prototype.loadClass = function(res, name) {");
3.18 - sb.append("\n var script = org_apidesign_vm4brwsr_VMLazy(true).toJavaScriptLjava_lang_StringAB(loader.get(res + '.class'));");
3.19 + sb.append("\n var glb = global;");
3.20 + sb.append("\n lazyVM.prototype.loadClass = function(res, name) {");
3.21 + sb.append("\n var script = org_apidesign_vm4brwsr_VMLazy(true)."
3.22 + + "toJavaScriptLjava_lang_StringLjava_lang_ObjectLjava_lang_ObjectAB("
3.23 + + " glb, self,"
3.24 + + " loader.get(res + '.class')"
3.25 + + ");");
3.26 sb.append("\n try {");
3.27 sb.append("\n new Function(script)(self, name);");
3.28 sb.append("\n } catch (ex) {");
3.29 @@ -75,7 +80,12 @@
3.30 "org/apidesign/vm4brwsr/StaticMethod", "org_apidesign_vm4brwsr_StaticMethod", "minusOneI"
3.31 );
3.32 }
3.33 -
3.34 +
3.35 + @Test public void loadDependantClass() throws Exception {
3.36 + assertExec("Trying to get zero", "test", Double.valueOf(0),
3.37 + "org/apidesign/vm4brwsr/InstanceSub", "org_apidesign_vm4brwsr_InstanceSub", "recallDblD"
3.38 + );
3.39 + }
3.40
3.41 private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception {
3.42 Object ret = null;