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];