diff -r 2d3d0b72af04 -r 63ca617c8101 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Aug 17 19:58:05 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Sep 13 18:14:55 2014 +0200 @@ -258,7 +258,7 @@ append("\n ").append(destObject).append(".").append(mn).append(".cls = CLS;"); } append("\n c.constructor = CLS;"); - append("\n function fillInstOf(x) {"); + append("\n function ").append(className).append("fillInstOf(x) {"); String instOfName = "$instOf_" + className; append("\n Object.defineProperty(x, '").append(instOfName).append("', { value : true });"); if (jc.isInterface()) { @@ -268,7 +268,7 @@ && (m.getAccess() & ACC_PRIVATE) == 0) { final String mn = findMethodName(m, new StringBuilder()); append("\n try {"); - append("\n Object.defineProperty(x, '").append(mn).append("', { value : c['").append(mn).append("']});"); + append("\n if (!x['").append(mn).append("']) Object.defineProperty(x, '").append(mn).append("', { value : c['").append(mn).append("']});"); append("\n } catch (ignore) {"); append("\n }"); } @@ -281,8 +281,8 @@ } append("\n }"); append("\n try {"); - append("\n Object.defineProperty(c, 'fillInstOf', { value: fillInstOf });"); - append("\n fillInstOf(c);"); + append("\n Object.defineProperty(c, 'fillInstOf', { value: ").append(className).append("fillInstOf });"); + append("\n ").append(className).append("fillInstOf(c);"); append("\n } catch (ignore) {"); append("\n }"); // obfuscationDelegate.exportJSProperty(this, "c", instOfName);