Obfuscated tests and their libraries pass tests OK
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 14 May 2014 21:43:16 +0200
changeset 1573e2e9fb660c85
parent 1557 bfda398c3a68
parent 1572 bdf93fec05a5
child 1574 d51a5533a2e7
Obfuscated tests and their libraries pass tests OK
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Sun May 11 14:01:18 2014 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypes.java	Wed May 14 21:43:16 2014 +0200
     1.3 @@ -96,7 +96,7 @@
     1.4        + "  var el = window.document.getElementById(name);\n"
     1.5        + "  el.parentNode.removeChild(el);\n"
     1.6        + "  arr[0] = data;\n"
     1.7 -      + "  run.run__V();\n"
     1.8 +      + "  run['run__V']();\n"
     1.9        + "};\n"
    1.10        + "return true;\n"
    1.11      )
    1.12 @@ -115,7 +115,7 @@
    1.13          + "  } catch (error) {;\n"
    1.14          + "    throw 'Cannot parse' + error + ':' + this.response;\n"
    1.15          + "  };\n"
    1.16 -        + "  callback.run__V();\n"
    1.17 +        + "  callback['run__V']();\n"
    1.18          + "};"
    1.19          + "request.send();"
    1.20      )
     2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java	Sun May 11 14:01:18 2014 +0200
     2.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/KOList.java	Wed May 14 21:43:16 2014 +0200
     2.3 @@ -140,7 +140,7 @@
     2.4      }
     2.5      
     2.6      
     2.7 -    @JavaScriptOnly(name = "koArray", value = "function() { return this.toArray___3Ljava_lang_Object_2(); }")
     2.8 +    @JavaScriptOnly(name = "koArray", value = "function() { return this['toArray___3Ljava_lang_Object_2'](); }")
     2.9      private static native int koArray();
    2.10  
    2.11      private void notifyChange() {
     3.1 --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypesTest.java	Sun May 11 14:01:18 2014 +0200
     3.2 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ConvertTypesTest.java	Wed May 14 21:43:16 2014 +0200
     3.3 @@ -28,9 +28,9 @@
     3.4   */
     3.5  public class ConvertTypesTest {
     3.6      @JavaScriptBody(args = { "includeSex" }, body = "var json = new Object();"
     3.7 -        + "json.firstName = 'son';\n"
     3.8 -        + "json.lastName = 'dj';\n"
     3.9 -        + "if (includeSex) json.sex = 'MALE';\n"
    3.10 +        + "json['firstName'] = 'son';\n"
    3.11 +        + "json['lastName'] = 'dj';\n"
    3.12 +        + "if (includeSex) json['sex'] = 'MALE';\n"
    3.13          + "return json;"
    3.14      )
    3.15      private static native Object createJSON(boolean includeSex);
     4.1 --- a/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java	Sun May 11 14:01:18 2014 +0200
     4.2 +++ b/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/impl/Console.java	Wed May 14 21:43:16 2014 +0200
     4.3 @@ -266,7 +266,7 @@
     4.4          return u;
     4.5      }
     4.6      
     4.7 -    @JavaScriptBody(args = {}, body = "vm.java_lang_Class(false).desiredAssertionStatus = true;")
     4.8 +    @JavaScriptBody(args = {}, body = "vm['java_lang_Class'](false)['desiredAssertionStatus'] = true;")
     4.9      private static void turnAssetionStatusOn() {
    4.10      }
    4.11  
     5.1 --- a/rt/emul/compact/src/main/java/java/util/EnumMap.java	Sun May 11 14:01:18 2014 +0200
     5.2 +++ b/rt/emul/compact/src/main/java/java/util/EnumMap.java	Wed May 14 21:43:16 2014 +0200
     5.3 @@ -737,7 +737,7 @@
     5.4       * Returns all of the values comprising K.
     5.5       * The result is uncloned, cached, and shared by all callers.
     5.6       */
     5.7 -    @JavaScriptBody(args = { "enumType" }, body = "return enumType.cnstr.fld_$VALUES;")
     5.8 +    @JavaScriptBody(args = { "enumType" }, body = "return enumType.cnstr.prototype['_$VALUES']();")
     5.9      private static native <K extends Enum<K>> K[] getKeyUniverse(Class<K> keyType);
    5.10  
    5.11      private static final long serialVersionUID = 458661240069192865L;
     6.1 --- a/rt/emul/compact/src/main/java/java/util/EnumSet.java	Sun May 11 14:01:18 2014 +0200
     6.2 +++ b/rt/emul/compact/src/main/java/java/util/EnumSet.java	Wed May 14 21:43:16 2014 +0200
     6.3 @@ -384,7 +384,7 @@
     6.4       * Returns all of the values comprising E.
     6.5       * The result is uncloned, cached, and shared by all callers.
     6.6       */
     6.7 -    @JavaScriptBody(args = { "enumType" }, body = "return enumType.cnstr.fld_$VALUES;")
     6.8 +    @JavaScriptBody(args = { "enumType" }, body = "return enumType.cnstr.prototype['_$VALUES']();")
     6.9      private static native <E extends Enum<E>> E[] getUniverse(Class<E> elementType);
    6.10  
    6.11      /**
     7.1 --- a/rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java	Sun May 11 14:01:18 2014 +0200
     7.2 +++ b/rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java	Wed May 14 21:43:16 2014 +0200
     7.3 @@ -679,8 +679,8 @@
     7.4  
     7.5      @JavaScriptBody(args = { "ignore", "name", "byteCode" }, 
     7.6          body = 
     7.7 -            "var r = vm._reload;"
     7.8 -          + "if (!r) r = exports._reload;"
     7.9 +            "var r = vm['_reload'];"
    7.10 +          + "if (!r) r = exports['_reload'];"
    7.11            + "return r(name, byteCode).constructor.$class;"
    7.12      )
    7.13      private static native Class defineClass0(
    7.14 @@ -909,8 +909,8 @@
    7.15          @JavaScriptBody(args = { "c", "sig", "method", "primitive" }, body = 
    7.16              "var p = c.cnstr.prototype;\n" +
    7.17              "p[sig] = function() {\n" +
    7.18 -            "  var h = this._h();\n" +
    7.19 -            "  var res = h.invoke__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_reflect_Method_2_3Ljava_lang_Object_2(this, method, arguments);\n" +
    7.20 +            "  var h = this['_h']();\n" +
    7.21 +            "  var res = h['invoke__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_reflect_Method_2_3Ljava_lang_Object_2'](this, method, arguments);\n" +
    7.22              "  \n" +
    7.23              "  \n" +
    7.24              "  return res;\n" +
    7.25 @@ -919,8 +919,8 @@
    7.26          private static native void defineMethod(Class<?> proxyClass, String sig, Method method, boolean primitive);
    7.27  
    7.28          @JavaScriptBody(args = "c", body = 
    7.29 -              "var h = c.cnstr.cons__VLjava_lang_reflect_InvocationHandler_2 = function(h) {\n"
    7.30 -            + "  c.superclass.cnstr.cons__VLjava_lang_reflect_InvocationHandler_2.call(this, h);\n"
    7.31 +              "var h = c.cnstr['cons__VLjava_lang_reflect_InvocationHandler_2'] = function(h) {\n"
    7.32 +            + "  c.superclass.cnstr['cons__VLjava_lang_reflect_InvocationHandler_2'].call(this, h);\n"
    7.33              + "}\n"
    7.34              + "h.cls = c.cnstr;\n"
    7.35          )
     8.1 --- a/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Sun May 11 14:01:18 2014 +0200
     8.2 +++ b/rt/emul/compact/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Wed May 14 21:43:16 2014 +0200
     8.3 @@ -178,11 +178,13 @@
     8.4          return "".getClass().isEnum();
     8.5      }
     8.6      
     8.7 -    @Compare public String newInstanceFails() throws InstantiationException {
     8.8 +    @Compare public String newInstanceFails() {
     8.9          try {
    8.10              return "success: " + StaticUseSub.class.newInstance();
    8.11          } catch (IllegalAccessException ex) {
    8.12 -            return ex.getClass().getName();
    8.13 +            return "failure";
    8.14 +        } catch (InstantiationException ex) {
    8.15 +            return "failure";
    8.16          }
    8.17      }
    8.18      
     9.1 --- a/rt/emul/mini/src/main/java/java/lang/Enum.java	Sun May 11 14:01:18 2014 +0200
     9.2 +++ b/rt/emul/mini/src/main/java/java/lang/Enum.java	Wed May 14 21:43:16 2014 +0200
     9.3 @@ -235,7 +235,7 @@
     9.4          throw new IllegalArgumentException();
     9.5      }
     9.6      
     9.7 -    @JavaScriptBody(args = { "enumType" }, body = "return enumType.cnstr.fld_$VALUES;")
     9.8 +    @JavaScriptBody(args = { "enumType" }, body = "return enumType.cnstr.prototype['_$VALUES']();")
     9.9      private static native Object[] values(Class<?> enumType);
    9.10  
    9.11      /**
    10.1 --- a/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js	Sun May 11 14:01:18 2014 +0200
    10.2 +++ b/rt/emul/mini/src/main/resources/org/apidesign/vm4brwsr/emul/lang/java_lang_String.js	Wed May 14 21:43:16 2014 +0200
    10.3 @@ -3,15 +3,17 @@
    10.4  vm.java_lang_String(false);
    10.5  
    10.6  Array.at = function(arr, indx, value) {
    10.7 -  if (indx < 0 || indx >= arr.length) {
    10.8 -      var e = vm.java_lang_ArrayIndexOutOfBoundsException(true);
    10.9 -      e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString());
   10.10 -      throw e;
   10.11 +  var prev = arr[indx];
   10.12 +  if (typeof prev === 'undefined' && (indx < 0 || indx >= arr.length)) {
   10.13 +    var e = vm.java_lang_ArrayIndexOutOfBoundsException(true);
   10.14 +    e.constructor.cons__VLjava_lang_String_2.call(e, indx.toString());
   10.15 +    throw e;
   10.16    }
   10.17    if (arguments.length === 3) {
   10.18 -      arr[indx] = value;
   10.19 +    arr[indx] = value;
   10.20 +  } else {
   10.21 +    return prev;
   10.22    }
   10.23 -  return arr[indx];
   10.24  };
   10.25  Array.prototype.getClass__Ljava_lang_Class_2 = function() {
   10.26    return vm.java_lang_Class(false).defineArray__Ljava_lang_Class_2Ljava_lang_String_2Ljava_lang_Object_2(this.jvmName, this.fnc);
    11.1 --- a/rt/emul/zip/src/main/java/org/apidesign/bck2brwsr/emul/zip/FastJar.java	Sun May 11 14:01:18 2014 +0200
    11.2 +++ b/rt/emul/zip/src/main/java/org/apidesign/bck2brwsr/emul/zip/FastJar.java	Wed May 14 21:43:16 2014 +0200
    11.3 @@ -36,6 +36,7 @@
    11.4  import java.lang.reflect.Method;
    11.5  import java.util.zip.ZipEntry;
    11.6  import java.util.zip.ZipInputStream;
    11.7 +import org.apidesign.bck2brwsr.core.Exported;
    11.8  import org.apidesign.bck2brwsr.core.JavaScriptBody;
    11.9  
   11.10  /**
   11.11 @@ -185,6 +186,8 @@
   11.12              + "    }\n"
   11.13              + "}"
   11.14      )
   11.15 +    
   11.16 +    @Exported
   11.17      static void arraycopy(Object src, int srcBegin, Object dst, int dstBegin, int count) {
   11.18          try {
   11.19              Class<?> system = Class.forName("java.lang.System");
    12.1 --- a/rt/emul/zip/src/test/java/org/apidesign/bck2brwsr/emul/zip/ZipArchive.java	Sun May 11 14:01:18 2014 +0200
    12.2 +++ b/rt/emul/zip/src/test/java/org/apidesign/bck2brwsr/emul/zip/ZipArchive.java	Wed May 14 21:43:16 2014 +0200
    12.3 @@ -17,7 +17,6 @@
    12.4   */
    12.5  package org.apidesign.bck2brwsr.emul.zip;
    12.6  
    12.7 -import java.io.ByteArrayOutputStream;
    12.8  import java.io.IOException;
    12.9  import java.io.InputStream;
   12.10  import java.util.zip.ZipEntry;
    13.1 --- a/rt/emul/zip/src/test/java/org/apidesign/bck2brwsr/vmtest/impl/ZipFileTest.java	Sun May 11 14:01:18 2014 +0200
    13.2 +++ b/rt/emul/zip/src/test/java/org/apidesign/bck2brwsr/vmtest/impl/ZipFileTest.java	Wed May 14 21:43:16 2014 +0200
    13.3 @@ -54,8 +54,8 @@
    13.4      
    13.5      @JavaScriptBody(args = { "res", "path" }, body = 
    13.6            "var myvm = bck2brwsr.apply(null, path);\n"
    13.7 -        + "var cls = myvm.loadClass('java.lang.String');\n"
    13.8 -        + "return cls.getClass__Ljava_lang_Class_2().getResourceAsStream__Ljava_io_InputStream_2Ljava_lang_String_2(res);\n"
    13.9 +        + "var cls = myvm['loadClass']('java.lang.String');\n"
   13.10 +        + "return cls['getClass__Ljava_lang_Class_2']()['getResourceAsStream__Ljava_io_InputStream_2Ljava_lang_String_2'](res);\n"
   13.11      )
   13.12      private static native Object loadVMResource(String res, String...path);
   13.13  
    14.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun May 11 14:01:18 2014 +0200
    14.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Wed May 14 21:43:16 2014 +0200
    14.3 @@ -1313,7 +1313,8 @@
    14.4                      String[] fi = jc.getFieldInfoName(indx);
    14.5                      final int type = VarType.fromFieldType(fi[2].charAt(0));
    14.6                      String ac = accessClass(mangleClassName(fi[0]));
    14.7 -                    smapper.assign(this, type, ac + "(false)._" + fi[1] + "()");
    14.8 +                    String af = accessField(ac + "(false)", "_" + fi[1], fi);
    14.9 +                    smapper.assign(this, type, af + "()");
   14.10                      i += 2;
   14.11                      addReference(fi[0]);
   14.12                      break;
   14.13 @@ -1980,7 +1981,7 @@
   14.14                  }
   14.15                  cnt[++depth] = 0;
   14.16                  if (attrName != null) {
   14.17 -                    append(attrName).append(" : ");
   14.18 +                    append('"').append(attrName).append("\" : ");
   14.19                  }
   14.20                  if (type == '[') {
   14.21                      append("[");
   14.22 @@ -2010,8 +2011,13 @@
   14.23                  final String slashType = attrType.substring(1, attrType.length() - 1);
   14.24                  requireReference(slashType);
   14.25                  
   14.26 -                append(accessClass(mangleClassName(slashType)))
   14.27 -                   .append("(false).constructor.fld_").append(value);
   14.28 +                final String cn = mangleClassName(slashType);
   14.29 +                append(accessClass(cn))
   14.30 +                   .append("(false)['valueOf__L").
   14.31 +                    append(cn).
   14.32 +                    append("_2Ljava_lang_String_2']('").
   14.33 +                    append(value).
   14.34 +                    append("')");
   14.35              }
   14.36          };
   14.37          ap.parse(data, cd);
    15.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClosureWrapper.java	Sun May 11 14:01:18 2014 +0200
    15.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ClosureWrapper.java	Wed May 14 21:43:16 2014 +0200
    15.3 @@ -33,7 +33,13 @@
    15.4   */
    15.5  @ExtraJavaScript(processByteCode = false, resource="")
    15.6  final class ClosureWrapper extends CommandLineRunner {
    15.7 -    private static final String[] ARGS = { "--compilation_level", "SIMPLE_OPTIMIZATIONS", "--js", "bck2brwsr-raw.js" /*, "--debug", "--formatting", "PRETTY_PRINT" */ };
    15.8 +    private static final String[] ARGS = { 
    15.9 +        "--compilation_level", 
   15.10 +        "SIMPLE_OPTIMIZATIONS", 
   15.11 +        "--js", "bck2brwsr-raw.js" 
   15.12 +        //, "--debug"
   15.13 +        //, "--formatting", "PRETTY_PRINT"
   15.14 +    };
   15.15  
   15.16      private final Bck2Brwsr config;
   15.17  
   15.18 @@ -175,6 +181,7 @@
   15.19          "toInt32",
   15.20          "toFP",
   15.21          "toLong",
   15.22 +        "toJS",
   15.23          "toExactString",
   15.24          "add64",
   15.25          "sub64",
   15.26 @@ -185,6 +192,7 @@
   15.27          "shl64",
   15.28          "shr64",
   15.29          "ushr64",
   15.30 +        "compare",
   15.31          "compare64",
   15.32          "neg64",
   15.33          "div32",
    16.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ExportedSymbols.java	Sun May 11 14:01:18 2014 +0200
    16.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ExportedSymbols.java	Wed May 14 21:43:16 2014 +0200
    16.3 @@ -55,8 +55,20 @@
    16.4      }
    16.5  
    16.6      boolean isExported(FieldData fieldData) throws IOException {
    16.7 -        return isAccessible(fieldData.access) && isExported(fieldData.cls)
    16.8 -                   || isMarkedAsExported(fieldData);
    16.9 +        if (
   16.10 +            isAccessible(fieldData.access) && 
   16.11 +            isExported(fieldData.cls) || isMarkedAsExported(fieldData)
   16.12 +        ) {
   16.13 +            return true;
   16.14 +        }
   16.15 +        if (
   16.16 +            fieldData.isStatic() && fieldData.getName().equals("$VALUES") &&
   16.17 +            "java/lang/Enum".equals(fieldData.cls.getSuperClassName())
   16.18 +        ) {
   16.19 +            // enum values need to be exported
   16.20 +            return true;
   16.21 +        }
   16.22 +        return false;
   16.23      }
   16.24  
   16.25      private boolean isMarkedAsExportedPackage(String pkgName) {
    17.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun May 11 14:01:18 2014 +0200
    17.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Wed May 14 21:43:16 2014 +0200
    17.3 @@ -98,7 +98,7 @@
    17.4          }
    17.5          
    17.6          for (String r : asBinary.toArray()) {
    17.7 -            append("\n  ").append(getExportsObject()).append(".registerResource('");
    17.8 +            append("\n  ").append(getExportsObject()).append("['registerResource']('");
    17.9              append(r).append("', '");
   17.10              InputStream is = this.resources.get(r);
   17.11              byte[] arr = new byte[is.available()];
   17.12 @@ -522,7 +522,7 @@
   17.13                  + "    for (var i = 0; i < extensions.length; ++i) {\n"
   17.14                  + "      extensions[i](vm);\n"
   17.15                  + "    }\n"
   17.16 -                + "    vm.registerResource = null;\n"
   17.17 +                + "    vm['registerResource'] = null;\n"
   17.18                  + "    var knownExtensions = extensions.length;\n"
   17.19                  + "    var loader = {};\n"
   17.20                  + "    loader.vm = vm;\n"
   17.21 @@ -535,9 +535,9 @@
   17.22                  + "          load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
   17.23                  + "      } catch (err) {\n"
   17.24                  + "        while (knownExtensions < extensions.length) {\n"
   17.25 -                + "          vm.registerResource = registerResource;\n"
   17.26 +                + "          vm['registerResource'] = registerResource;\n"
   17.27                  + "          extensions[knownExtensions++](vm);\n"
   17.28 -                + "          vm.registerResource = null;\n"
   17.29 +                + "          vm['registerResource'] = null;\n"
   17.30                  + "        }\n"
   17.31                  + "        fn = vm[attr];\n"
   17.32                  + "        if (fn) return fn(false);\n"
   17.33 @@ -568,9 +568,9 @@
   17.34                  + "        loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, name, args, skip);\n"
   17.35                  + "      if (ret !== null) return ret;\n"
   17.36                  + "      while (knownExtensions < extensions.length) {\n"
   17.37 -                + "        vm.registerResource = registerResource;\n"
   17.38 +                + "        vm['registerResource'] = registerResource;\n"
   17.39                  + "        extensions[knownExtensions++](vm);\n"
   17.40 -                + "        vm.registerResource = null;\n"
   17.41 +                + "        vm['registerResource'] = null;\n"
   17.42                  + "      }\n"
   17.43                  + "      var arr = resources[name];\n"
   17.44                  + "      return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
    18.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java	Sun May 11 14:01:18 2014 +0200
    18.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java	Wed May 14 21:43:16 2014 +0200
    18.3 @@ -37,46 +37,46 @@
    18.4          return a % b;
    18.5      }
    18.6  
    18.7 -    static float deserFloat() throws IOException {
    18.8 +    public static float deserFloat() throws IOException {
    18.9          byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
   18.10          ByteArrayInputStream is = new ByteArrayInputStream(arr);
   18.11          DataInputStream dis = new DataInputStream(is);
   18.12          float r = dis.readFloat();
   18.13          return r;
   18.14      }
   18.15 -    static double deserDouble() throws IOException {
   18.16 +    public static double deserDouble() throws IOException {
   18.17          byte[] arr = {(byte)64, (byte)8, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0};
   18.18          ByteArrayInputStream is = new ByteArrayInputStream(arr);
   18.19          DataInputStream dis = new DataInputStream(is);
   18.20          return dis.readDouble();
   18.21      }
   18.22 -    static long deserLong(byte[] arr) throws IOException {
   18.23 +    public static long deserLong(byte[] arr) throws IOException {
   18.24          ByteArrayInputStream is = new ByteArrayInputStream(arr);
   18.25          DataInputStream dis = new DataInputStream(is);
   18.26          return dis.readLong();
   18.27      }
   18.28 -    static long deserLong(byte[] arr, int shift) throws IOException {
   18.29 +    public static long deserLong(byte[] arr, int shift) throws IOException {
   18.30          return deserLong(arr) >> shift;
   18.31      }
   18.32 -    static int deserInt() throws IOException {
   18.33 +    public static int deserInt() throws IOException {
   18.34          byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
   18.35          ByteArrayInputStream is = new ByteArrayInputStream(arr);
   18.36          DataInputStream dis = new DataInputStream(is);
   18.37          return dis.readInt();
   18.38      }
   18.39 -    static long bytesToLong(byte b1, byte b2, int shift) {
   18.40 +    public static long bytesToLong(byte b1, byte b2, int shift) {
   18.41          return (((long)b1 << 56) +
   18.42                  ((long)b2 & 255) << 48) >> shift;
   18.43      }
   18.44  
   18.45 -    static String intToString() {
   18.46 +    public static String intToString() {
   18.47          return new Integer(5).toString().toString();
   18.48      }
   18.49 -    static String floatToString() {
   18.50 +    public static String floatToString() {
   18.51          return new Float(7.0).toString().toString();
   18.52      }
   18.53      
   18.54 -    static double seven(int todo) {
   18.55 +    public static double seven(int todo) {
   18.56          switch (todo) {
   18.57              case 0: return sevenNew().doubleValue();
   18.58              case 1: return sevenNew().intValue();
   18.59 @@ -91,7 +91,7 @@
   18.60              default: throw new IllegalStateException();
   18.61          }
   18.62      }
   18.63 -    static boolean bseven(int todo) {
   18.64 +    public static boolean bseven(int todo) {
   18.65          switch (todo) {
   18.66              case 30: return bvalueOf(Boolean.FALSE);
   18.67              case 31: return bvalueOf(Boolean.TRUE);
    19.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java	Sun May 11 14:01:18 2014 +0200
    19.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java	Wed May 14 21:43:16 2014 +0200
    19.3 @@ -64,7 +64,7 @@
    19.4                  ((long)b2 & 255) << 48) >> shift;
    19.5      }
    19.6  
    19.7 -    static String loadHello() throws IOException {
    19.8 +    public static String loadHello() throws IOException {
    19.9          Enumeration<URL> en;
   19.10          try {
   19.11              en = Resources.class.getClassLoader().getResources("META-INF/ahoj");
   19.12 @@ -78,7 +78,7 @@
   19.13          }
   19.14          return sb.toString().toString();
   19.15      }
   19.16 -    static String loadJustHello() throws IOException {
   19.17 +    public static String loadJustHello() throws IOException {
   19.18          URL url = Resources.class.getResource("/META-INF/ahoj");
   19.19          StringBuilder sb = new StringBuilder();
   19.20          sb.append(readIS(url.openStream(), true));
    20.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java	Sun May 11 14:01:18 2014 +0200
    20.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java	Wed May 14 21:43:16 2014 +0200
    20.3 @@ -160,7 +160,9 @@
    20.4                      return super.get(name);
    20.5                  }
    20.6              }).
    20.7 -            addRootClasses(name).library(true);
    20.8 +            addRootClasses(name).
    20.9 +            obfuscation(ObfuscationLevel.FULL).
   20.10 +            library(true);
   20.11          if (resourceName != null) {
   20.12              b2b = b2b.addResources(resourceName);
   20.13          }