Use shorter access to own class
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 09 Feb 2015 21:30:04 +0100
changeset 1780b6e926f68703
parent 1779 9d757281c666
child 1782 0dee66ee08d9
Use shorter access to own class
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 09 20:36:12 2015 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 09 21:30:04 2015 +0100
     1.3 @@ -85,6 +85,13 @@
     1.4      /* protected */ String accessClass(String classOperation) {
     1.5          return classOperation;
     1.6      }
     1.7 +    
     1.8 +    String accessClassFalse(String classOperation) {
     1.9 +        if (jc.getClassName().replace('/', '_').equals(classOperation)) {
    1.10 +            return "c";
    1.11 +        }
    1.12 +        return accessClass(classOperation) + "(false)";
    1.13 +    }
    1.14  
    1.15      protected String accessField(String object, String mangledName,
    1.16                                   String[] fieldInfoName) throws IOException {
    1.17 @@ -383,9 +390,9 @@
    1.18          boolean defineProp = generateMethod(destObject, mn, m);
    1.19          if (mn.equals("class__V")) {
    1.20              if (defineProp) {
    1.21 -                toInitilize.add(accessClass(className(jc)) + "(false)['" + mn + "']");
    1.22 +                toInitilize.add(accessClassFalse(className(jc)) + "['" + mn + "']");
    1.23              } else {
    1.24 -                toInitilize.add(accessClass(className(jc)) + "(false)." + mn);
    1.25 +                toInitilize.add(accessClassFalse(className(jc)) + "." + mn);
    1.26              }
    1.27          }
    1.28          return mn;
    1.29 @@ -1392,10 +1399,10 @@
    1.30                      String[] fi = jc.getFieldInfoName(indx);
    1.31                      final int type = VarType.fromFieldType(fi[2].charAt(0));
    1.32                      final String mangleClass = mangleClassName(fi[0]);
    1.33 -                    final String mangleClassAccess = accessClass(mangleClass);
    1.34 +                    final String mangleClassAccess = accessClassFalse(mangleClass);
    1.35                      smapper.replace(this, type, "@2.call(@1)",
    1.36                           smapper.getA(0),
    1.37 -                         accessField(mangleClassAccess + "(false)",
    1.38 +                         accessField(mangleClassAccess,
    1.39                                       "_" + fi[1], fi)
    1.40                      );
    1.41                      i += 2;
    1.42 @@ -1407,11 +1414,11 @@
    1.43                      String[] fi = jc.getFieldInfoName(indx);
    1.44                      final int type = VarType.fromFieldType(fi[2].charAt(0));
    1.45                      final String mangleClass = mangleClassName(fi[0]);
    1.46 -                    final String mangleClassAccess = accessClass(mangleClass);
    1.47 +                    final String mangleClassAccess = accessClassFalse(mangleClass);
    1.48                      emit(smapper, this, "@3.call(@2, @1);",
    1.49                           smapper.popT(type),
    1.50                           smapper.popA(),
    1.51 -                         accessField(mangleClassAccess + "(false)",
    1.52 +                         accessField(mangleClassAccess,
    1.53                                       "_" + fi[1], fi));
    1.54                      i += 2;
    1.55                      addReference(fi[0]);
    1.56 @@ -1421,8 +1428,8 @@
    1.57                      int indx = readUShortArg(byteCodes, i);
    1.58                      String[] fi = jc.getFieldInfoName(indx);
    1.59                      final int type = VarType.fromFieldType(fi[2].charAt(0));
    1.60 -                    String ac = accessClass(mangleClassName(fi[0]));
    1.61 -                    String af = accessField(ac + "(false)", "_" + fi[1], fi);
    1.62 +                    String ac = accessClassFalse(mangleClassName(fi[0]));
    1.63 +                    String af = accessField(ac, "_" + fi[1], fi);
    1.64                      smapper.assign(this, type, af + "()");
    1.65                      i += 2;
    1.66                      addReference(fi[0]);
    1.67 @@ -1432,8 +1439,8 @@
    1.68                      int indx = readUShortArg(byteCodes, i);
    1.69                      String[] fi = jc.getFieldInfoName(indx);
    1.70                      final int type = VarType.fromFieldType(fi[2].charAt(0));
    1.71 -                    emit(smapper, this, "@1(false)._@2(@3);",
    1.72 -                         accessClass(mangleClassName(fi[0])), fi[1],
    1.73 +                    emit(smapper, this, "@1._@2(@3);",
    1.74 +                         accessClassFalse(mangleClassName(fi[0])), fi[1],
    1.75                           smapper.popT(type));
    1.76                      i += 2;
    1.77                      addReference(fi[0]);
    1.78 @@ -1755,7 +1762,7 @@
    1.79          } else {
    1.80              mcn = mangleClassName(in);
    1.81          }
    1.82 -        String object = accessClass(mcn) + "(false)";
    1.83 +        String object = accessClassFalse(mcn);
    1.84          if (mn.startsWith("cons_")) {
    1.85              object += ".constructor";
    1.86          }
    1.87 @@ -1838,7 +1845,7 @@
    1.88                  s = accessClass("java_lang_Class") + "(false)['forName__Ljava_lang_Class_2Ljava_lang_String_2']('" + classRef[0] + "')";
    1.89              } else {
    1.90                  addReference(classRef[0]);
    1.91 -                s = accessClass(mangleClassName(s)) + "(false).constructor.$class";
    1.92 +                s = accessClassFalse(mangleClassName(s)) + ".constructor.$class";
    1.93              }
    1.94          }
    1.95          return s;
    1.96 @@ -2166,8 +2173,8 @@
    1.97                  requireReference(slashType);
    1.98                  
    1.99                  final String cn = mangleClassName(slashType);
   1.100 -                append(accessClass(cn))
   1.101 -                   .append("(false)['valueOf__L").
   1.102 +                append(accessClassFalse(cn))
   1.103 +                   .append("['valueOf__L").
   1.104                      append(cn).
   1.105                      append("_2Ljava_lang_String_2']('").
   1.106                      append(value).