1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sat Sep 15 22:12:49 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Sun Sep 16 07:28:57 2012 +0200
1.3 @@ -30,6 +30,7 @@
1.4 import org.netbeans.modules.classfile.Code;
1.5 import org.netbeans.modules.classfile.Method;
1.6 import org.netbeans.modules.classfile.Parameter;
1.7 +import org.netbeans.modules.classfile.Variable;
1.8
1.9 /** Translator of the code inside class files to JavaScript.
1.10 *
1.11 @@ -58,6 +59,11 @@
1.12 compiler.generateStaticMethod(m);
1.13 }
1.14 }
1.15 + for (Variable v : jc.getVariables()) {
1.16 + if (v.isStatic()) {
1.17 + compiler.generateStaticField(v);
1.18 + }
1.19 + }
1.20 }
1.21 private void generateStaticMethod(Method m) throws IOException {
1.22 out.append("\nfunction ").append(
1.23 @@ -369,6 +375,22 @@
1.24 i += 2;
1.25 break;
1.26 }
1.27 + case bc_getstatic: {
1.28 + int indx = readIntArg(byteCodes, i);
1.29 + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
1.30 + out.append("stack.push(").append(fi.getClassName().getExternalName().replace('.', '_'));
1.31 + out.append('_').append(fi.getFieldName()).append(");");
1.32 + i += 2;
1.33 + break;
1.34 + }
1.35 + case bc_putstatic: {
1.36 + int indx = readIntArg(byteCodes, i);
1.37 + CPFieldInfo fi = (CPFieldInfo) jc.getConstantPool().get(indx);
1.38 + out.append(fi.getClassName().getExternalName().replace('.', '_'));
1.39 + out.append('_').append(fi.getFieldName()).append(" = stack.pop();");
1.40 + i += 2;
1.41 + break;
1.42 + }
1.43
1.44 }
1.45 out.append(" /*");
1.46 @@ -446,4 +468,10 @@
1.47 }
1.48 return cnt;
1.49 }
1.50 +
1.51 + private void generateStaticField(Variable v) throws IOException {
1.52 + out.append("\nvar ")
1.53 + .append(jc.getName().getExternalName().replace('.', '_'))
1.54 + .append('_').append(v.getName()).append(" = 0;");
1.55 + }
1.56 }