vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
branchjavap
changeset 173 2f0205599623
parent 172 9eb74b221cff
child 178 28143312edb5
     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  }