diff -r 9eb74b221cff -r 2f0205599623 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Nov 17 17:43:15 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Nov 17 18:34:12 2012 +0100 @@ -93,7 +93,7 @@ for (FieldData v : jc.getFields()) { if (!v.isStatic()) { out.append("\n this.fld_"). - append(v.getName()).append(" = 0;"); + append(v.getName()).append(initField(v)); } } out.append("\n}\n\nfunction ").append(className).append("_proto() {"); @@ -844,7 +844,7 @@ private void generateStaticField(FieldData v) throws IOException { out.append("\nvar ") .append(className(jc)) - .append('_').append(v.getName()).append(" = 0;"); + .append('_').append(v.getName()).append(initField(v)); } private String findMethodName(MethodData m, StringBuilder cnt) { @@ -1065,4 +1065,23 @@ ap.parse(arr, cd); return found[0] ? values : null; } + + private CharSequence initField(FieldData v) { + final String is = v.getInternalSig(); + if (is.length() == 1) { + switch (is.charAt(0)) { + case 'S': + case 'J': + case 'B': + case 'Z': + case 'C': + case 'I': return " = 0;"; + case 'F': + case 'D': return " = 0.0"; + default: + throw new IllegalStateException(is); + } + } + return " = null;"; + } }