diff -r 8ac637d7d62a -r a34e2191b6be rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Jun 22 00:09:56 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Jun 22 17:19:16 2014 +0200 @@ -365,7 +365,14 @@ final LocalsMapper lmapper = new LocalsMapper(stackMapIterator.getArguments()); - append(destObject).append(".").append(name).append(" = function("); + boolean obj = "java/lang/Object".equals(jc.getClassName()); + + if (obj) { + append("Object.defineProperty(").append(destObject). + append(", '").append(name).append("', { configurable: true, writable: true, value: function("); + } else { + append(destObject).append(".").append(name).append(" = function("); + } lmapper.outputArguments(this, m.isStatic()); append(") {").append("\n"); @@ -374,6 +381,9 @@ append(" throw 'no code found for ") .append(jc.getClassName()).append('.') .append(m.getName()).append("';\n"); + if (obj) { + append("}"); + } append("};"); return; } @@ -1393,7 +1403,11 @@ while (openBraces-- > 0) { append('}'); } - append("\n};"); + if (obj) { + append("\n}});"); + } else { + append("\n};"); + } } private int generateIf(StackMapper mapper, byte[] byteCodes,