1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Nov 17 17:43:15 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Nov 17 18:34:12 2012 +0100
1.3 @@ -93,7 +93,7 @@
1.4 for (FieldData v : jc.getFields()) {
1.5 if (!v.isStatic()) {
1.6 out.append("\n this.fld_").
1.7 - append(v.getName()).append(" = 0;");
1.8 + append(v.getName()).append(initField(v));
1.9 }
1.10 }
1.11 out.append("\n}\n\nfunction ").append(className).append("_proto() {");
1.12 @@ -844,7 +844,7 @@
1.13 private void generateStaticField(FieldData v) throws IOException {
1.14 out.append("\nvar ")
1.15 .append(className(jc))
1.16 - .append('_').append(v.getName()).append(" = 0;");
1.17 + .append('_').append(v.getName()).append(initField(v));
1.18 }
1.19
1.20 private String findMethodName(MethodData m, StringBuilder cnt) {
1.21 @@ -1065,4 +1065,23 @@
1.22 ap.parse(arr, cd);
1.23 return found[0] ? values : null;
1.24 }
1.25 +
1.26 + private CharSequence initField(FieldData v) {
1.27 + final String is = v.getInternalSig();
1.28 + if (is.length() == 1) {
1.29 + switch (is.charAt(0)) {
1.30 + case 'S':
1.31 + case 'J':
1.32 + case 'B':
1.33 + case 'Z':
1.34 + case 'C':
1.35 + case 'I': return " = 0;";
1.36 + case 'F':
1.37 + case 'D': return " = 0.0";
1.38 + default:
1.39 + throw new IllegalStateException(is);
1.40 + }
1.41 + }
1.42 + return " = null;";
1.43 + }
1.44 }
2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Sat Nov 17 17:43:15 2012 +0100
2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java Sat Nov 17 18:34:12 2012 +0100
2.3 @@ -25,6 +25,7 @@
2.4 */
2.5 public class StaticMethod {
2.6 private static int cnt;
2.7 + private static Object NULL;
2.8
2.9 public static int minusOne() {
2.10 return -1;
2.11 @@ -42,6 +43,10 @@
2.12 return toRet;
2.13 }
2.14
2.15 + public static boolean isNull() {
2.16 + return NULL == null;
2.17 + }
2.18 +
2.19 public static int sum(int x, int y) {
2.20 return x + y;
2.21 }
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Sat Nov 17 17:43:15 2012 +0100
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethodTest.java Sat Nov 17 18:34:12 2012 +0100
3.3 @@ -42,6 +42,14 @@
3.4 );
3.5 }
3.6
3.7 + @Test public void checkReallyInitializedValues() throws Exception {
3.8 + assertExec(
3.9 + "Return true",
3.10 + "org_apidesign_vm4brwsr_StaticMethod_isNullZ",
3.11 + Double.valueOf(1)
3.12 + );
3.13 + }
3.14 +
3.15 @Test public void powerOfThree() throws Exception {
3.16 assertExec(
3.17 "Should be nine",
4.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Sat Nov 17 17:43:15 2012 +0100
4.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/VMinVMTest.java Sat Nov 17 18:34:12 2012 +0100
4.3 @@ -48,6 +48,16 @@
4.4 } catch (Exception ex) {
4.5 File f = File.createTempFile("execution", ".js");
4.6 FileWriter w = new FileWriter(f);
4.7 + w.append("var byteCode = [\n ");
4.8 + String sep = "";
4.9 + for (int i = 0; i < arr.length; i++) {
4.10 + w.append(sep).append(Integer.toString((arr[i] + 256) % 256));
4.11 + sep = ", ";
4.12 + if (i % 20 == 0) {
4.13 + w.append("\n ");
4.14 + }
4.15 + }
4.16 + w.append("\n];\n");
4.17 w.append(codeSeq);
4.18 w.close();
4.19 throw new Exception(ex.getMessage() + " file: " + f, ex);