Don't obfuscate names of fields in objects - otherwise fields provided by two modules may clash
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 10 May 2016 04:52:05 +0200
changeset 19629d46ae9d4a2e
parent 1960 60cd3d14f1ae
child 1963 4b7ef2a05eb7
Don't obfuscate names of fields in objects - otherwise fields provided by two modules may clash
rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/AnnotationImpl.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
     1.1 --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/AnnotationImpl.java	Fri Apr 29 07:35:06 2016 +0200
     1.2 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/AnnotationImpl.java	Tue May 10 04:52:05 2016 +0200
     1.3 @@ -41,7 +41,7 @@
     1.4          + "function r(anno, val, prop, m) {\n"
     1.5          + "  var v = val[prop];\n"
     1.6          + "  if (typeof v === 'undefined') {\n"
     1.7 -        + "    var cls = anno.fld_org_apidesign_bck2brwsr_emul_reflect_AnnotationImpl_type.cnstr;\n"
     1.8 +        + "    var cls = anno['fld_org_apidesign_bck2brwsr_emul_reflect_AnnotationImpl_type'].cnstr;\n"
     1.9          + "    v = cls.prototype[m]();\n"
    1.10          + "  }\n"
    1.11          + "  return v;\n"
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Fri Apr 29 07:35:06 2016 +0200
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue May 10 04:52:05 2016 +0200
     2.3 @@ -252,18 +252,18 @@
     2.4                          continue;
     2.5                      }
     2.6                  }
     2.7 -                append("\n  CLS.fld_").append(v.getName()).append(initField(v));
     2.8 +                append("\n  CLS['fld_").append(v.getName()).append("']").append(initField(v));
     2.9                  append("\n  m = c._").append(v.getName()).append(" = function (v) {")
    2.10 -                    .append("  if (arguments.length == 1) CLS.fld_").append(v.getName())
    2.11 -                    .append(" = v; return CLS.fld_").
    2.12 -                    append(v.getName()).append("; };");
    2.13 +                    .append("  if (arguments.length == 1) CLS['fld_").append(v.getName())
    2.14 +                    .append("'] = v; return CLS['fld_").
    2.15 +                    append(v.getName()).append("']; };");
    2.16              } else {
    2.17                  append("\n  m = c._").append(v.getName()).append(" = function (v) {")
    2.18 -                    .append("  if (arguments.length == 1) this.fld_").
    2.19 +                    .append("  if (arguments.length == 1) this['fld_").
    2.20                      append(className).append('_').append(v.getName())
    2.21 -                    .append(" = v; return this.fld_").
    2.22 +                    .append("'] = v; return this['fld_").
    2.23                      append(className).append('_').append(v.getName())
    2.24 -                    .append("; };");
    2.25 +                    .append("']; };");
    2.26              }
    2.27  
    2.28              declaredField(v, "c", "_" + v.getName());
    2.29 @@ -375,9 +375,9 @@
    2.30              byte[] onlyArr = v.findAnnotationData(true);
    2.31              if (javaScriptOnly(onlyArr)) continue;
    2.32              if (!v.isStatic()) {
    2.33 -                append("\n    this.fld_").
    2.34 +                append("\n    this['fld_").
    2.35                      append(className).append('_').
    2.36 -                    append(v.getName()).append(initField(v));
    2.37 +                    append(v.getName()).append("']").append(initField(v));
    2.38              }
    2.39          }
    2.40          append("\n    return this;");
    2.41 @@ -1453,7 +1453,7 @@
    2.42                          );
    2.43                      } else {
    2.44                          final String fieldOwner = mangleClassName(field.cls.getClassName());
    2.45 -                        smapper.replace(this, type, "@1.@2",
    2.46 +                        smapper.replace(this, type, "@1@2",
    2.47                               smapper.getA(0),
    2.48                               accessField(fieldOwner, field, fi)
    2.49                          );
    2.50 @@ -1477,7 +1477,7 @@
    2.51                          );
    2.52                      } else {
    2.53                          final String fieldOwner = mangleClassName(field.cls.getClassName());
    2.54 -                        emit(smapper, this, "@2.@3 = @1;",
    2.55 +                        emit(smapper, this, "@2@3 = @1;",
    2.56                               smapper.popT(type),
    2.57                               smapper.popA(),
    2.58                               accessField(fieldOwner, field, fi)
     3.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri Apr 29 07:35:06 2016 +0200
     3.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Tue May 10 04:52:05 2016 +0200
     3.3 @@ -363,7 +363,7 @@
     3.4      protected String accessField(String object, FieldData field, String[] fieldInfoName)
     3.5      throws IOException {
     3.6          if (field != null && !field.isStatic()) {
     3.7 -            return "fld_" + object + "_" + field.getName();
     3.8 +            return "['fld_" + object + "_" + field.getName() + "']";
     3.9          } else {
    3.10              String mangledName = "_" + fieldInfoName[1];
    3.11             return accessNonVirtualMember(