1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 19:28:07 2015 +0100
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 20:55:00 2015 +0100
1.3 @@ -29,6 +29,7 @@
1.4 abstract class ByteCodeToJavaScript implements Appendable {
1.5 private ClassData jc;
1.6 private final Appendable out;
1.7 + private final StringArray classRefs = new StringArray();
1.8 private boolean outChanged;
1.9 private boolean callbacks;
1.10
1.11 @@ -85,11 +86,12 @@
1.12 return classOperation;
1.13 }
1.14
1.15 - String accessClassFalse(String classOperation) {
1.16 + final String accessClassFalse(String classOperation) {
1.17 if (jc.getClassName().replace('/', '_').equals(classOperation)) {
1.18 return "c";
1.19 }
1.20 - return accessClass(classOperation) + "(false)";
1.21 + classRefs.addIfMissing(classOperation);
1.22 + return "(refs_" + classOperation + " || (refs_" + classOperation + " = " + accessClass(classOperation) + "(false)))";
1.23 }
1.24
1.25 protected String accessField(String object, String mangledName,
1.26 @@ -323,6 +325,10 @@
1.27 for (String init : toInitilize.toArray()) {
1.28 append("\n ").append(init).append("();");
1.29 }
1.30 + for (String ref : classRefs.toArray()) {
1.31 + append("\n var refs_").append(ref).append(";");
1.32 + }
1.33 + classRefs.clear();
1.34
1.35 if (jsResource != null) {
1.36 requireResource(jsResource);