src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java
changeset 9 0cab1e07e677
parent 8 82772c96ec57
child 10 e84d9314f1bc
     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  }