rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java
branchclosure
changeset 1535 c02c6d409461
parent 1534 ca538fb33f48
child 1702 228f26fc1159
     1.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java	Tue May 06 10:08:42 2014 +0200
     1.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Array.java	Tue May 06 11:12:40 2014 +0200
     1.3 @@ -77,6 +77,7 @@
     1.4      }
     1.5      
     1.6      public static double sum() {
     1.7 +        disableClassForName();
     1.8          double sum = 0.0;
     1.9          for (Array[] row : arr()) {
    1.10              int indx = -1;
    1.11 @@ -111,7 +112,11 @@
    1.12      }
    1.13      
    1.14      public static String objectArrayClass() {
    1.15 -        return Object[].class.getName();
    1.16 +        enableClassForName(prevClassForName);
    1.17 +        prevClassForName = null;
    1.18 +        String s = Object[].class.getName();
    1.19 +        disableClassForName();
    1.20 +        return s;
    1.21      }
    1.22      
    1.23      public static boolean instanceOfArray(Object obj) {
    1.24 @@ -169,13 +174,29 @@
    1.25      }
    1.26      
    1.27      @JavaScriptBody(args = {  }, body = 
    1.28 -        "if (!vm.java_lang_Class(false).forName__Ljava_lang_Class_2Ljava_lang_String_2) throw 'forName not defined';\n"
    1.29 +        "var prev = vm.java_lang_Class(false).forName__Ljava_lang_Class_2Ljava_lang_String_2;\n"
    1.30 +      + "if (!prev) throw 'forName not defined';\n"
    1.31        + "vm.java_lang_Class(false).forName__Ljava_lang_Class_2Ljava_lang_String_2 = function(s) {\n"
    1.32        + "  throw 'Do not call me: ' + s;\n"
    1.33 -      + "};\n")
    1.34 -    private static void disableClassForName() {
    1.35 +      + "};\n"
    1.36 +      + "return prev;\n")
    1.37 +    private static Object disableClassForNameImpl() {
    1.38 +        return null;
    1.39      }
    1.40      
    1.41 +    private static void disableClassForName() {
    1.42 +        if (prevClassForName == null) {
    1.43 +            prevClassForName = disableClassForNameImpl();
    1.44 +        }
    1.45 +    }
    1.46 +    
    1.47 +    @JavaScriptBody(args = { "fn" }, body = 
    1.48 +        "if (fn !== null) vm.java_lang_Class(false).forName__Ljava_lang_Class_2Ljava_lang_String_2 = fn;"
    1.49 +    )
    1.50 +    private static void enableClassForName(Object fn) {
    1.51 +    }
    1.52 +    
    1.53 +    private static Object prevClassForName;
    1.54      public static String nameOfClonedComponent() {
    1.55          disableClassForName();
    1.56          Object[] intArr = new Integer[10];