# HG changeset patch # User Jaroslav Tulach # Date 1410624895 -7200 # Node ID 63ca617c8101cde04288523abfed75e4bf641176 # Parent 35e68f37ca881c85f0d1376f78295bba05a021b2 Only define defender methods if they are not already defined diff -r 35e68f37ca88 -r 63ca617c8101 rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sat Sep 13 18:14:14 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);