diff -r 24096bd2b38a -r b8e33a00bfab rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java Sun Mar 10 21:28:50 2013 +0100 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/lang/System.java Thu Jan 09 08:21:26 2014 +0100 @@ -19,6 +19,7 @@ import java.lang.reflect.Method; import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.core.JavaScriptOnly; /** * @@ -71,4 +72,27 @@ } @JavaScriptBody(args = { "obj" }, body="return vm.java_lang_Object(false).hashCode__I.call(obj);") public static native int identityHashCode(Object obj); + + @JavaScriptOnly(name = "toJS", value = "function(v) {\n" + + " if (v === null) return null;\n" + + " if (Object.prototype.toString.call(v) === '[object Array]') {\n" + + " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).convArray__Ljava_lang_Object_2Ljava_lang_Object_2(v);\n" + + " }\n" + + " return v.valueOf();\n" + + "}\n" + ) + public static native int toJS(); + + private static Object convArray(Object o) { + if (o instanceof Object[]) { + Object[] arr = (Object[]) o; + final int l = arr.length; + Object[] ret = new Object[l]; + for (int i = 0; i < l; i++) { + ret[i] = convArray(arr[i]); + } + return ret; + } + return o; + } }