Using function callback so we can assign the vm attribute in a non-string way and obfuscation applies to it.
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 26 Sep 2014 08:28:11 +0200
changeset 1705e74a1895f079
parent 1704 2e69145b9feb
child 1706 65c6f805797f
Using function callback so we can assign the vm attribute in a non-string way and obfuscation applies to it.
rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Thu Sep 25 23:48:41 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri Sep 26 08:28:11 2014 +0200
     1.3 @@ -731,15 +731,15 @@
     1.4              append(
     1.5                    "\n}, function(exports) {\n"
     1.6                  + "  var vm = {};\n");
     1.7 -            append("  function link(n) {\n"
     1.8 +            append("  function link(n, assign) {\n"
     1.9                  + "    return function() {\n"
    1.10                  + "      var cls = n['replace__Ljava_lang_String_2CC']"
    1.11                                         + "('/', '_').toString();\n"
    1.12                  + "      var dot = n['replace__Ljava_lang_String_2CC']"
    1.13                                         + "('/', '.').toString();\n"
    1.14                  + "      exports.loadClass(dot);\n"
    1.15 -                + "      vm[cls] = exports[cls];\n"
    1.16 -                + "      return vm[cls](arguments);\n"
    1.17 +                + "      assign(exports[cls]);\n"
    1.18 +                + "      return exports[cls](arguments);\n"
    1.19                  + "    };\n"
    1.20                  + "  };\n"
    1.21              );
    1.22 @@ -753,11 +753,11 @@
    1.23          @Override
    1.24          protected String generateClass(String className) throws IOException {
    1.25              if (isExternalClass(className)) {
    1.26 -                append("\n").append(assignClass(
    1.27 -                                            className.replace('/', '_')))
    1.28 +                final String cls = className.replace('/', '_');
    1.29 +                append("\n").append(assignClass(cls))
    1.30                     .append("link('")
    1.31                     .append(className)
    1.32 -                   .append("');");
    1.33 +                   .append("', function(f) { ").append(assignClass(cls)).append(" f; });");
    1.34  
    1.35                  return null;
    1.36              }
    1.37 @@ -782,7 +782,8 @@
    1.38              out.append("\nvm.").append(cls).append(" = function() {");
    1.39              out.append("\n  var instance = arguments.length == 0 || arguments[0] === true;");
    1.40              out.append("\n  delete vm.").append(cls).append(";");
    1.41 -            out.append("\n  return link('").append(n).append("')(instance);");
    1.42 +            out.append("\n  return link('").append(n).append("', function(f) { vm.");
    1.43 +            out.append(cls).append(" = f;})(instance);");
    1.44              out.append("\n}");
    1.45          }
    1.46      }