No need to generate primitive final fields as their values get inlined in the classfiles anyway ReducedStack
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 17 Feb 2014 17:41:00 +0100
branchReducedStack
changeset 14720a1b4f1bf4d0
parent 1471 6655ae68ef9b
child 1473 484248c9c1d6
No need to generate primitive final fields as their values get inlined in the classfiles anyway
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 17 17:33:22 2014 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 17 17:41:00 2014 +0100
     1.3 @@ -153,6 +153,11 @@
     1.4          }
     1.5          for (FieldData v : jc.getFields()) {
     1.6              if (v.isStatic()) {
     1.7 +                if ((v.access & ACC_FINAL) != 0) {
     1.8 +                    if (v.getInternalSig().length() == 1) {
     1.9 +                        continue;
    1.10 +                    }
    1.11 +                }
    1.12                  out.append("\n  CLS.fld_").append(v.getName()).append(initField(v));
    1.13                  out.append("\n  c._").append(v.getName()).append(" = function (v) {")
    1.14                     .append("  if (arguments.length == 1) CLS.fld_").append(v.getName())
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java	Mon Feb 17 17:33:22 2014 +0100
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/InstanceSub.java	Mon Feb 17 17:41:00 2014 +0100
     2.3 @@ -31,7 +31,7 @@
     2.4      
     2.5      @Override
     2.6      public void setByte(byte b) {
     2.7 -        super.setByte((byte) (b + 1));
     2.8 +        super.setByte((byte) (b + StaticMethod.MISSING_CONSTANT));
     2.9      }
    2.10      
    2.11      public static double recallDbl() {
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java	Mon Feb 17 17:33:22 2014 +0100
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java	Mon Feb 17 17:41:00 2014 +0100
     3.3 @@ -67,6 +67,9 @@
     3.4          assertEquals(method.indexOf("for"), -1, "There should be no for blocks:\n" + method);
     3.5      }
     3.6      
     3.7 +    @Test public void dontGeneratePrimitiveFinalConstants() {
     3.8 +        assertEquals(code.indexOf("MISSING_CONSTANT"), -1, "MISSING_CONSTANT field should not be generated");
     3.9 +    }
    3.10      
    3.11      @BeforeClass 
    3.12      public static void compileTheCode() throws Exception {
     4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java	Mon Feb 17 17:33:22 2014 +0100
     4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/StaticMethod.java	Mon Feb 17 17:41:00 2014 +0100
     4.3 @@ -24,6 +24,7 @@
     4.4   * @author Jaroslav Tulach <jtulach@netbeans.org>
     4.5   */
     4.6  public class StaticMethod {
     4.7 +    public static final int MISSING_CONSTANT = 1;
     4.8      private static int cnt;
     4.9      private static Object NULL;
    4.10  
    4.11 @@ -82,7 +83,7 @@
    4.12          if (n <= 1) {
    4.13              return 1;
    4.14          } else {
    4.15 -            return n * factRec(n - 1);
    4.16 +            return n * factRec(n - MISSING_CONSTANT);
    4.17          }
    4.18      }
    4.19      public static long factIter(int n) {