# HG changeset patch # User Jaroslav Tulach # Date 1411681721 -7200 # Node ID 2e69145b9feb3b35b8656548babba36567e05451 # Parent 3340ef531830b9614cf5fb22cb9341a326379fe8 Store just defined member in variable m and use it to assign access, cls and export the member diff -r 3340ef531830 -r 2e69145b9feb rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Sep 25 19:54:16 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu Sep 25 23:48:41 2014 +0200 @@ -189,6 +189,7 @@ final String className = className(jc); append("\n\n").append(assignClass(className)); append("function ").append(className).append("() {"); + append("\n var m;"); append("\n var CLS = ").append(className).append(';'); append("\n if (!CLS.$class) {"); if (proto == null) { @@ -214,12 +215,12 @@ } } append("\n CLS.fld_").append(v.getName()).append(initField(v)); - append("\n c._").append(v.getName()).append(" = function (v) {") + append("\n m = c._").append(v.getName()).append(" = function (v) {") .append(" if (arguments.length == 1) CLS.fld_").append(v.getName()) .append(" = v; return CLS.fld_"). append(v.getName()).append("; };"); } else { - append("\n c._").append(v.getName()).append(" = function (v) {") + append("\n m = c._").append(v.getName()).append(" = function (v) {") .append(" if (arguments.length == 1) this.fld_"). append(className).append('_').append(v.getName()) .append(" = v; return this.fld_"). @@ -250,12 +251,12 @@ declaredMethod(m, destObject, mn); byte[] runAnno = m.findAnnotationData(false); if (runAnno != null) { - append("\n ").append(destObject).append(".").append(mn).append(".anno = {"); + append("\n m.anno = {"); generateAnno(jc, runAnno); append("\n };"); } - append("\n ").append(destObject).append(".").append(mn).append(".access = " + m.getAccess()).append(";"); - append("\n ").append(destObject).append(".").append(mn).append(".cls = CLS;"); + append("\n m.access = " + m.getAccess()).append(";"); + append("\n m.cls = CLS;"); } append("\n c.constructor = CLS;"); append("\n function ").append(className).append("fillInstOf(x) {"); @@ -384,9 +385,9 @@ if (defineProp) { append("Object.defineProperty(").append(destObject). - append(", '").append(name).append("', { configurable: true, writable: true, value: function("); + append(", '").append(name).append("', { configurable: true, writable: true, value: m = function("); } else { - append(destObject).append(".").append(name).append(" = function("); + append("m = ").append(destObject).append(".").append(name).append(" = function("); } lmapper.outputArguments(this, m.isStatic()); append(") {").append("\n"); @@ -1837,7 +1838,7 @@ } StringBuilder cnt = new StringBuilder(); final String mn = findMethodName(m, cnt); - append(destObject).append(".").append(mn); + append("m = ").append(destObject).append(".").append(mn); append(" = function("); String space = ""; int index = 0; diff -r 3340ef531830 -r 2e69145b9feb rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Sep 25 19:54:16 2014 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Thu Sep 25 23:48:41 2014 +0200 @@ -192,10 +192,8 @@ private void exportMember(String destObject, String memberName) throws IOException { append("\n").append(destObject).append("['") - .append(memberName) - .append("'] = ") - .append(destObject).append(".").append(memberName) - .append(";\n"); + .append(memberName) + .append("'] = m;\n"); } private void generateBody(StringArray names) throws IOException { diff -r 3340ef531830 -r 2e69145b9feb rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java Thu Sep 25 19:54:16 2014 +0200 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/SizeOfAMethodTest.java Thu Sep 25 23:48:41 2014 +0200 @@ -40,7 +40,7 @@ @Test public void sumXYShouldBeSmall() { String s = code; int beg = s.indexOf("c.sum__III"); - int end = s.indexOf("c.sum__III.access"); + int end = s.indexOf(".access", beg); assertTrue(beg > 0, "Found sum method in " + code); assertTrue(beg < end, "Found end of sum method in " + code); @@ -54,7 +54,7 @@ @Test public void betterConstructor() { String s = code; int beg = s.indexOf("c.initInflater__IIZ"); - int end = s.indexOf("c.initInflater__IIZ.access"); + int end = s.indexOf(".access", beg); assertTrue(beg > 0, "Found initInflater method in " + code); assertTrue(beg < end, "Found end of initInflater method in " + code); @@ -67,7 +67,7 @@ @Test public void deepConstructor() { String s = code; int beg = s.indexOf("c.intHolder__I"); - int end = s.indexOf("c.intHolder__I.access"); + int end = s.indexOf(".access", beg); assertTrue(beg > 0, "Found intHolder method in " + code); assertTrue(beg < end, "Found end of intHolder method in " + code); @@ -80,7 +80,7 @@ @Test public void emptyConstructorRequiresNoStack() { String s = code; int beg = s.indexOf("CLS.cons__V"); - int end = s.indexOf("CLS.cons__V.access"); + int end = s.indexOf(".access", beg); assertTrue(beg > 0, "Found constructor in " + code); assertTrue(beg < end, "Found end of constructor in " + code);