If class initializer is defined via Object.defineProperty call it by name
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 26 Sep 2014 09:21:49 +0200
changeset 170665c6f805797f
parent 1705 e74a1895f079
child 1707 61dd2c555a1f
If class initializer is defined via Object.defineProperty call it by name
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Sep 26 08:28:11 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Sep 26 09:21:49 2014 +0200
     1.3 @@ -355,10 +355,14 @@
     1.4              return jsb;
     1.5          }
     1.6          final String mn = findMethodName(m, new StringBuilder());
     1.7 +        boolean defineProp = generateMethod(destObject, mn, m);
     1.8          if (mn.equals("class__V")) {
     1.9 -            toInitilize.add(accessClass(className(jc)) + "(false)." + mn);
    1.10 +            if (defineProp) {
    1.11 +                toInitilize.add(accessClass(className(jc)) + "(false)['" + mn + "']");
    1.12 +            } else {
    1.13 +                toInitilize.add(accessClass(className(jc)) + "(false)." + mn);
    1.14 +            }
    1.15          }
    1.16 -        generateMethod(destObject, mn, m);
    1.17          return mn;
    1.18      }
    1.19  
    1.20 @@ -372,7 +376,7 @@
    1.21          return mn;
    1.22      }
    1.23  
    1.24 -    private void generateMethod(String destObject, String name, MethodData m)
    1.25 +    private boolean generateMethod(String destObject, String name, MethodData m)
    1.26              throws IOException {
    1.27          final StackMapIterator stackMapIterator = m.createStackMapIterator();
    1.28          TrapDataIterator trap = m.getTrapDataIterator();
    1.29 @@ -402,7 +406,7 @@
    1.30              } else {
    1.31                  append("};");
    1.32              }
    1.33 -            return;
    1.34 +            return defineProp;
    1.35          }
    1.36  
    1.37          final StackMapper smapper = new StackMapper();
    1.38 @@ -1472,6 +1476,7 @@
    1.39          } else {
    1.40              append("\n};");
    1.41          }
    1.42 +        return defineProp;
    1.43      }
    1.44  
    1.45      private int generateIf(StackMapper mapper, byte[] byteCodes,