# HG changeset patch # User Jaroslav Tulach # Date 1425066900 -3600 # Node ID a29572878b0e11f6d7fc5dbf196f72e434662cbe # Parent 65cab8539582f9e6aa438e34dd5fcc4974e87c14 Keeping references to classes in variables seems to optimize things a bit diff -r 65cab8539582 -r a29572878b0e rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 19:28:07 2015 +0100 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Feb 27 20:55:00 2015 +0100 @@ -29,6 +29,7 @@ abstract class ByteCodeToJavaScript implements Appendable { private ClassData jc; private final Appendable out; + private final StringArray classRefs = new StringArray(); private boolean outChanged; private boolean callbacks; @@ -85,11 +86,12 @@ return classOperation; } - String accessClassFalse(String classOperation) { + final String accessClassFalse(String classOperation) { if (jc.getClassName().replace('/', '_').equals(classOperation)) { return "c"; } - return accessClass(classOperation) + "(false)"; + classRefs.addIfMissing(classOperation); + return "(refs_" + classOperation + " || (refs_" + classOperation + " = " + accessClass(classOperation) + "(false)))"; } protected String accessField(String object, String mangledName, @@ -323,6 +325,10 @@ for (String init : toInitilize.toArray()) { append("\n ").append(init).append("();"); } + for (String ref : classRefs.toArray()) { + append("\n var refs_").append(ref).append(";"); + } + classRefs.clear(); if (jsResource != null) { requireResource(jsResource);