# HG changeset patch # User Jaroslav Tulach # Date 1354806708 -3600 # Node ID a6a23aa7a546a24aa60724301edbc537c6d765e5 # Parent 79697fa91bfc7c2adb7401d5ff476ee81173a46d Moving the definition of Array.prototype.fillNulls() outside of the generator into the emulation .js file diff -r 79697fa91bfc -r a6a23aa7a546 emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js --- a/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Wed Dec 05 10:52:50 2012 +0100 +++ b/emul/src/main/resources/org/apidesign/vm4brwsr/emul/java_lang_String.js Thu Dec 06 16:11:48 2012 +0100 @@ -1,2 +1,9 @@ // initialize methods on String constants java_lang_String(false); + +// we need initialized arrays +Array.prototype.fillNulls = function() { + for(var i = 0; i < this.length; i++) this[i] = null; + return this; +}; + diff -r 79697fa91bfc -r a6a23aa7a546 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Wed Dec 05 10:52:50 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Dec 06 16:11:48 2012 +0100 @@ -31,7 +31,7 @@ */ public abstract class ByteCodeToJavaScript { private ClassData jc; - private final Appendable out; + final Appendable out; protected ByteCodeToJavaScript(Appendable out) { this.out = out; diff -r 79697fa91bfc -r a6a23aa7a546 vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Wed Dec 05 10:52:50 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/GenJS.java Thu Dec 06 16:11:48 2012 +0100 @@ -26,7 +26,7 @@ * * @author Jaroslav Tulach */ -final class GenJS extends ByteCodeToJavaScript { +class GenJS extends ByteCodeToJavaScript { public GenJS(Appendable out) { super(out); } @@ -41,22 +41,16 @@ compile(GenJS.class.getClassLoader(), out, names); } static void compile(ClassLoader l, Appendable out, StringArray names) throws IOException { - out.append("Array.prototype.fillNulls = function() {\n" + - " for(var i = 0; i < this.length; i++) {\n" + - " this[i] = null;\n" + - " }\n" + - " return this;\n" + - "};"); - - + new GenJS(out).doCompile(l, names); + } + protected void doCompile(ClassLoader l, StringArray names) throws IOException { StringArray processed = new StringArray(); StringArray initCode = new StringArray(); for (String baseClass : names.toArray()) { - GenJS js = new GenJS(out); - js.references.add(baseClass); + references.add(baseClass); for (;;) { String name = null; - for (String n : js.references.toArray()) { + for (String n : references.toArray()) { if (processed.contains(n)) { continue; } @@ -70,7 +64,7 @@ throw new IOException("Can't find class " + name); } try { - String ic = js.compile(is); + String ic = compile(is); processed.add(name); initCode.add(ic == null ? "" : ic); } catch (RuntimeException ex) { @@ -93,7 +87,7 @@ } } - for (String resource : js.scripts.toArray()) { + for (String resource : scripts.toArray()) { while (resource.startsWith("/")) { resource = resource.substring(1); } @@ -103,9 +97,9 @@ } readResource(emul, out); } - js.scripts = new StringArray(); + scripts = new StringArray(); - StringArray toInit = StringArray.asList(js.references.toArray()); + StringArray toInit = StringArray.asList(references.toArray()); toInit.reverse(); for (String ic : toInit.toArray()) { diff -r 79697fa91bfc -r a6a23aa7a546 vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java Wed Dec 05 10:52:50 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/StringArray.java Thu Dec 06 16:11:48 2012 +0100 @@ -48,7 +48,7 @@ return arr == null ? new String[0] : arr; } - static StringArray asList(String[] names) { + static StringArray asList(String... names) { return new StringArray(names); }