Merging use of function.call into default branch. It seems to be the way to go.
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 14 Jan 2013 11:52:38 +0100
changeset 444d49769e4f783
parent 437 d7ec46950980
parent 443 9359b006782b
child 448 ac05de5a8786
Merging use of function.call into default branch. It seems to be the way to go.
     1.1 --- a/core/src/main/java/org/apidesign/bck2brwsr/core/impl/JavaScriptProcesor.java	Sun Jan 13 06:59:05 2013 +0100
     1.2 +++ b/core/src/main/java/org/apidesign/bck2brwsr/core/impl/JavaScriptProcesor.java	Mon Jan 14 11:52:38 2013 +0100
     1.3 @@ -53,7 +53,7 @@
     1.4      @Override
     1.5      public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
     1.6          for (Element e : roundEnv.getElementsAnnotatedWith(JavaScriptBody.class)) {
     1.7 -            if (e.getKind() != ElementKind.METHOD) {
     1.8 +            if (e.getKind() != ElementKind.METHOD && e.getKind() != ElementKind.CONSTRUCTOR) {
     1.9                  continue;
    1.10              }
    1.11              ExecutableElement ee = (ExecutableElement)e;
    1.12 @@ -61,13 +61,7 @@
    1.13              
    1.14              JavaScriptBody jsb = e.getAnnotation(JavaScriptBody.class);
    1.15              String[] arr = jsb.args();
    1.16 -            int indx;
    1.17 -            if (!ee.getModifiers().contains(Modifier.STATIC)) {
    1.18 -                indx = 1;
    1.19 -            } else {
    1.20 -                indx = 0;
    1.21 -            }
    1.22 -            if (indx + params.size() != arr.length) {
    1.23 +            if (params.size() != arr.length) {
    1.24                  processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Number of args arguments does not match real arguments!", e);
    1.25              }
    1.26          }
    1.27 @@ -81,14 +75,8 @@
    1.28          StringBuilder sb = new StringBuilder();
    1.29          if (e.getKind() == ElementKind.METHOD && member.getSimpleName().contentEquals("args")) {
    1.30              ExecutableElement ee = (ExecutableElement) e;
    1.31 -            String sep;
    1.32 -            if (!ee.getModifiers().contains(Modifier.STATIC)) {
    1.33 -                sb.append("{ \"self\"");
    1.34 -                sep = ", ";
    1.35 -            } else {
    1.36 -                sb.append("{ ");
    1.37 -                sep = "";
    1.38 -            }
    1.39 +            String sep = "";
    1.40 +            sb.append("{ ");
    1.41              for (VariableElement ve : ee.getParameters()) {
    1.42                  sb.append(sep).append('"').append(ve.getSimpleName())
    1.43                      .append('"');
     2.1 --- a/emul/src/main/java/java/lang/Class.java	Sun Jan 13 06:59:05 2013 +0100
     2.2 +++ b/emul/src/main/java/java/lang/Class.java	Mon Jan 14 11:52:38 2013 +0100
     2.3 @@ -216,7 +216,7 @@
     2.4          + "\nif (c['cons__V']) {"
     2.5          + "\n  if ((c.cons__V.access & 0x1) != 0) {"
     2.6          + "\n    var inst = c();"
     2.7 -        + "\n    c.cons__V(inst);"
     2.8 +        + "\n    c.cons__V.call(inst);"
     2.9          + "\n    return inst;"
    2.10          + "\n  }"
    2.11          + "\n  return illegal;"
    2.12 @@ -318,7 +318,7 @@
    2.13          return (getAccess() & 0x200) != 0;
    2.14      }
    2.15      
    2.16 -    @JavaScriptBody(args = "self", body = "return self.access;")
    2.17 +    @JavaScriptBody(args = {}, body = "return this.access;")
    2.18      private native int getAccess();
    2.19  
    2.20  
    2.21 @@ -362,8 +362,8 @@
    2.22       * @see     java.lang.Void#TYPE
    2.23       * @since JDK1.1
    2.24       */
    2.25 -    @JavaScriptBody(args = "self", body = 
    2.26 -           "if (self.primitive) return true;"
    2.27 +    @JavaScriptBody(args = {}, body = 
    2.28 +           "if (this.primitive) return true;"
    2.29          + "else return false;"
    2.30      )
    2.31      public native boolean isPrimitive();
    2.32 @@ -447,7 +447,7 @@
    2.33          return jvmName().replace('/', '.');
    2.34      }
    2.35  
    2.36 -    @JavaScriptBody(args = "self", body = "return self.jvmName;")
    2.37 +    @JavaScriptBody(args = {}, body = "return this.jvmName;")
    2.38      private native String jvmName();
    2.39  
    2.40      
    2.41 @@ -481,7 +481,7 @@
    2.42       *
    2.43       * @return the superclass of the class represented by this object.
    2.44       */
    2.45 -    @JavaScriptBody(args = "self", body = "return self.superclass;")
    2.46 +    @JavaScriptBody(args = {}, body = "return this.superclass;")
    2.47      public native Class<? super T> getSuperclass();
    2.48  
    2.49      /**
    2.50 @@ -1078,10 +1078,10 @@
    2.51              throw new ClassCastException(this.toString());
    2.52      }
    2.53  
    2.54 -    @JavaScriptBody(args = { "self", "ac" }, 
    2.55 +    @JavaScriptBody(args = { "ac" }, 
    2.56          body = 
    2.57 -          "if (self.anno) {"
    2.58 -        + "  return self.anno['L' + ac.jvmName + ';'];"
    2.59 +          "if (this.anno) {"
    2.60 +        + "  return this.anno['L' + ac.jvmName + ';'];"
    2.61          + "} else return null;"
    2.62      )
    2.63      private Object getAnnotationData(Class<?> annotationClass) {
    2.64 @@ -1100,8 +1100,8 @@
    2.65       * @throws NullPointerException {@inheritDoc}
    2.66       * @since 1.5
    2.67       */
    2.68 -    @JavaScriptBody(args = { "self", "ac" }, 
    2.69 -        body = "if (self.anno && self.anno['L' + ac.jvmName + ';']) { return true; }"
    2.70 +    @JavaScriptBody(args = { "ac" }, 
    2.71 +        body = "if (this.anno && this.anno['L' + ac.jvmName + ';']) { return true; }"
    2.72          + "else return false;"
    2.73      )
    2.74      public boolean isAnnotationPresent(
    2.75 @@ -1112,7 +1112,7 @@
    2.76          return getAnnotation(annotationClass) != null;
    2.77      }
    2.78  
    2.79 -    @JavaScriptBody(args = "self", body = "return self.anno;")
    2.80 +    @JavaScriptBody(args = {}, body = "return this.anno;")
    2.81      private Object getAnnotationData() {
    2.82          throw new UnsupportedOperationException();
    2.83      }
     3.1 --- a/emul/src/main/java/java/lang/Object.java	Sun Jan 13 06:59:05 2013 +0100
     3.2 +++ b/emul/src/main/java/java/lang/Object.java	Mon Jan 14 11:52:38 2013 +0100
     3.3 @@ -66,7 +66,7 @@
     3.4       * @see    Class Literals, section 15.8.2 of
     3.5       *         <cite>The Java&trade; Language Specification</cite>.
     3.6       */
     3.7 -    @JavaScriptBody(args="self", body="return self.constructor.$class;")
     3.8 +    @JavaScriptBody(args={}, body="return this.constructor.$class;")
     3.9      public final native Class<?> getClass();
    3.10  
    3.11      /**
    3.12 @@ -104,14 +104,14 @@
    3.13       * @see     java.lang.Object#equals(java.lang.Object)
    3.14       * @see     java.lang.System#identityHashCode
    3.15       */
    3.16 -    @JavaScriptBody(args = "self", body = 
    3.17 -        "if (self.$hashCode) return self.$hashCode;\n"
    3.18 -        + "var h = self.computeHashCode__I(self);\n"
    3.19 -        + "return self.$hashCode = h & h;"
    3.20 +    @JavaScriptBody(args = {}, body = 
    3.21 +        "if (this.$hashCode) return this.$hashCode;\n"
    3.22 +        + "var h = this.computeHashCode__I();\n"
    3.23 +        + "return this.$hashCode = h & h;"
    3.24      )
    3.25      public native int hashCode();
    3.26  
    3.27 -    @JavaScriptBody(args = "self", body = "Math.random() * Math.pow(2, 32);")
    3.28 +    @JavaScriptBody(args = {}, body = "Math.random() * Math.pow(2, 32);")
    3.29      native int computeHashCode();
    3.30      
    3.31      /**
     4.1 --- a/emul/src/main/java/java/lang/String.java	Sun Jan 13 06:59:05 2013 +0100
     4.2 +++ b/emul/src/main/java/java/lang/String.java	Mon Jan 14 11:52:38 2013 +0100
     4.3 @@ -169,11 +169,11 @@
     4.4       * @param  value
     4.5       *         The initial value of the string
     4.6       */
     4.7 -    @JavaScriptBody(args = { "self", "charArr" }, body=
     4.8 +    @JavaScriptBody(args = { "charArr" }, body=
     4.9          "for (var i = 0; i < charArr.length; i++) {\n"
    4.10        + "  if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n"
    4.11        + "}\n"
    4.12 -      + "self.fld_r = charArr.join('');\n"
    4.13 +      + "this.fld_r = charArr.join('');\n"
    4.14      )
    4.15      public String(char value[]) {
    4.16      }
    4.17 @@ -199,12 +199,12 @@
    4.18       *          If the {@code offset} and {@code count} arguments index
    4.19       *          characters outside the bounds of the {@code value} array
    4.20       */
    4.21 -    @JavaScriptBody(args = { "self", "charArr", "off", "cnt" }, body =
    4.22 +    @JavaScriptBody(args = { "charArr", "off", "cnt" }, body =
    4.23          "var up = off + cnt;\n" +
    4.24          "for (var i = off; i < up; i++) {\n" +
    4.25          "  if (typeof charArr[i] === 'number') charArr[i] = String.fromCharCode(charArr[i]);\n" +
    4.26          "}\n" +
    4.27 -        "self.fld_r = charArr.slice(off, up).join(\"\");\n"
    4.28 +        "this.fld_r = charArr.slice(off, up).join(\"\");\n"
    4.29      )
    4.30      public String(char value[], int offset, int count) {
    4.31      }
    4.32 @@ -618,7 +618,7 @@
    4.33       * @return  the length of the sequence of characters represented by this
    4.34       *          object.
    4.35       */
    4.36 -    @JavaScriptBody(args = "self", body = "return self.toString().length;")
    4.37 +    @JavaScriptBody(args = {}, body = "return this.toString().length;")
    4.38      public int length() {
    4.39          throw new UnsupportedOperationException();
    4.40      }
    4.41 @@ -631,7 +631,7 @@
    4.42       *
    4.43       * @since 1.6
    4.44       */
    4.45 -    @JavaScriptBody(args = "self", body="return self.toString().length === 0;")
    4.46 +    @JavaScriptBody(args = {}, body="return this.toString().length === 0;")
    4.47      public boolean isEmpty() {
    4.48          return length() == 0;
    4.49      }
    4.50 @@ -654,8 +654,8 @@
    4.51       *             argument is negative or not less than the length of this
    4.52       *             string.
    4.53       */
    4.54 -    @JavaScriptBody(args = { "self", "index" }, 
    4.55 -        body = "return self.toString().charCodeAt(index);"
    4.56 +    @JavaScriptBody(args = { "index" }, 
    4.57 +        body = "return this.toString().charCodeAt(index);"
    4.58      )
    4.59      public char charAt(int index) {
    4.60          throw new UnsupportedOperationException();
    4.61 @@ -780,8 +780,8 @@
    4.62       * Copy characters from this string into dst starting at dstBegin.
    4.63       * This method doesn't perform any range checking.
    4.64       */
    4.65 -    @JavaScriptBody(args = { "self", "arr", "to" }, body = 
    4.66 -        "var s = self.toString();\n" +
    4.67 +    @JavaScriptBody(args = { "arr", "to" }, body = 
    4.68 +        "var s = this.toString();\n" +
    4.69          "for (var i = 0; i < s.length; i++) {\n" +
    4.70          "   arr[to++] = s[i];\n" +
    4.71          "}"
    4.72 @@ -820,8 +820,8 @@
    4.73       *            <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than
    4.74       *                <code>dst.length</code></ul>
    4.75       */
    4.76 -    @JavaScriptBody(args = { "self", "beg", "end", "arr", "dst" }, body=
    4.77 -        "var s = self.toString();\n" +
    4.78 +    @JavaScriptBody(args = { "beg", "end", "arr", "dst" }, body=
    4.79 +        "var s = this.toString();\n" +
    4.80          "while (beg < end) {\n" +
    4.81          "  arr[dst++] = s[beg++];\n" +
    4.82          "}\n"
    4.83 @@ -993,9 +993,9 @@
    4.84       * @see  #compareTo(String)
    4.85       * @see  #equalsIgnoreCase(String)
    4.86       */
    4.87 -    @JavaScriptBody(args = { "self", "obj" }, body = 
    4.88 +    @JavaScriptBody(args = { "obj" }, body = 
    4.89          "return obj.$instOf_java_lang_String && "
    4.90 -        + "self.toString() === obj.toString();"
    4.91 +        + "this.toString() === obj.toString();"
    4.92      )
    4.93      public boolean equals(Object anObject) {
    4.94          if (this == anObject) {
    4.95 @@ -1420,9 +1420,9 @@
    4.96       *          this.substring(toffset).startsWith(prefix)
    4.97       *          </pre>
    4.98       */
    4.99 -    @JavaScriptBody(args = { "self", "find", "from" }, body=
   4.100 +    @JavaScriptBody(args = { "find", "from" }, body=
   4.101          "find = find.toString();\n" +
   4.102 -        "return self.toString().substring(from, from + find.length) === find;\n"
   4.103 +        "return this.toString().substring(from, from + find.length) === find;\n"
   4.104      )
   4.105      public boolean startsWith(String prefix, int toffset) {
   4.106          char ta[] = toCharArray();
   4.107 @@ -1570,9 +1570,9 @@
   4.108       *          than or equal to <code>fromIndex</code>, or <code>-1</code>
   4.109       *          if the character does not occur.
   4.110       */
   4.111 -    @JavaScriptBody(args = { "self", "ch", "from" }, body = 
   4.112 +    @JavaScriptBody(args = { "ch", "from" }, body = 
   4.113          "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" +
   4.114 -        "return self.toString().indexOf(ch, from);\n"
   4.115 +        "return this.toString().indexOf(ch, from);\n"
   4.116      )
   4.117      public int indexOf(int ch, int fromIndex) {
   4.118          if (fromIndex < 0) {
   4.119 @@ -1679,9 +1679,9 @@
   4.120       *          than or equal to <code>fromIndex</code>, or <code>-1</code>
   4.121       *          if the character does not occur before that point.
   4.122       */
   4.123 -    @JavaScriptBody(args = { "self", "ch", "from" }, body = 
   4.124 +    @JavaScriptBody(args = { "ch", "from" }, body = 
   4.125          "if (typeof ch === 'number') ch = String.fromCharCode(ch);\n" +
   4.126 -        "return self.toString().lastIndexOf(ch, from);"
   4.127 +        "return this.toString().lastIndexOf(ch, from);"
   4.128      )
   4.129      public int lastIndexOf(int ch, int fromIndex) {
   4.130          if (ch < Character.MIN_SUPPLEMENTARY_CODE_POINT) {
   4.131 @@ -1754,8 +1754,8 @@
   4.132       *          starting at the specified index,
   4.133       *          or {@code -1} if there is no such occurrence.
   4.134       */
   4.135 -    @JavaScriptBody(args = { "self", "str", "fromIndex" }, body =
   4.136 -        "return self.toString().indexOf(str.toString(), fromIndex);"
   4.137 +    @JavaScriptBody(args = { "str", "fromIndex" }, body =
   4.138 +        "return this.toString().indexOf(str.toString(), fromIndex);"
   4.139      )
   4.140      public native int indexOf(String str, int fromIndex);
   4.141  
   4.142 @@ -1794,8 +1794,8 @@
   4.143       *          searching backward from the specified index,
   4.144       *          or {@code -1} if there is no such occurrence.
   4.145       */
   4.146 -    @JavaScriptBody(args = { "self", "s", "from" }, body = 
   4.147 -        "return self.toString().lastIndexOf(s.toString(), from);"
   4.148 +    @JavaScriptBody(args = { "s", "from" }, body = 
   4.149 +        "return this.toString().lastIndexOf(s.toString(), from);"
   4.150      )
   4.151      public int lastIndexOf(String str, int fromIndex) {
   4.152          return lastIndexOf(toCharArray(), offset(), length(), str.toCharArray(), str.offset(), str.length(), fromIndex);
   4.153 @@ -1903,8 +1903,8 @@
   4.154       *             <code>beginIndex</code> is larger than
   4.155       *             <code>endIndex</code>.
   4.156       */
   4.157 -    @JavaScriptBody(args = { "self", "beginIndex", "endIndex" }, body = 
   4.158 -        "return self.toString().substring(beginIndex, endIndex);"
   4.159 +    @JavaScriptBody(args = { "beginIndex", "endIndex" }, body = 
   4.160 +        "return this.toString().substring(beginIndex, endIndex);"
   4.161      )
   4.162      public String substring(int beginIndex, int endIndex) {
   4.163          if (beginIndex < 0) {
   4.164 @@ -2012,10 +2012,10 @@
   4.165       * @return  a string derived from this string by replacing every
   4.166       *          occurrence of <code>oldChar</code> with <code>newChar</code>.
   4.167       */
   4.168 -    @JavaScriptBody(args = { "self", "arg1", "arg2" }, body =
   4.169 +    @JavaScriptBody(args = { "arg1", "arg2" }, body =
   4.170          "if (typeof arg1 === 'number') arg1 = String.fromCharCode(arg1);\n" +
   4.171          "if (typeof arg2 === 'number') arg2 = String.fromCharCode(arg2);\n" +
   4.172 -        "var s = self.toString();\n" +
   4.173 +        "var s = this.toString();\n" +
   4.174          "for (;;) {\n" +
   4.175          "  var ret = s.replace(arg1, arg2);\n" +
   4.176          "  if (ret === s) {\n" +
   4.177 @@ -2078,8 +2078,8 @@
   4.178       * @since 1.4
   4.179       * @spec JSR-51
   4.180       */
   4.181 -    @JavaScriptBody(args = { "self", "regex" }, body = 
   4.182 -          "self = self.toString();\n"
   4.183 +    @JavaScriptBody(args = { "regex" }, body = 
   4.184 +          "var self = this.toString();\n"
   4.185          + "var re = new RegExp(regex.toString());\n"
   4.186          + "var r = re.exec(self);\n"
   4.187          + "return r != null && r.length > 0 && self.length == r[0].length;"
   4.188 @@ -2496,7 +2496,7 @@
   4.189       * @return  the <code>String</code>, converted to lowercase.
   4.190       * @see     java.lang.String#toLowerCase(Locale)
   4.191       */
   4.192 -    @JavaScriptBody(args = "self", body = "return self.toLowerCase();")
   4.193 +    @JavaScriptBody(args = {}, body = "return this.toLowerCase();")
   4.194      public String toLowerCase() {
   4.195          throw new UnsupportedOperationException("Should be supported but without connection to locale");
   4.196      }
   4.197 @@ -2662,7 +2662,7 @@
   4.198       * @return  the <code>String</code>, converted to uppercase.
   4.199       * @see     java.lang.String#toUpperCase(Locale)
   4.200       */
   4.201 -    @JavaScriptBody(args = "self", body = "return self.toUpperCase();")
   4.202 +    @JavaScriptBody(args = {}, body = "return this.toUpperCase();")
   4.203      public String toUpperCase() {
   4.204          throw new UnsupportedOperationException();
   4.205      }
   4.206 @@ -2718,7 +2718,7 @@
   4.207       *
   4.208       * @return  the string itself.
   4.209       */
   4.210 -    @JavaScriptBody(args = "self", body = "return self.toString();")
   4.211 +    @JavaScriptBody(args = {}, body = "return this.toString();")
   4.212      public String toString() {
   4.213          return this;
   4.214      }
     5.1 --- a/emul/src/main/java/java/lang/Throwable.java	Sun Jan 13 06:59:05 2013 +0100
     5.2 +++ b/emul/src/main/java/java/lang/Throwable.java	Mon Jan 14 11:52:38 2013 +0100
     5.3 @@ -783,7 +783,7 @@
     5.4          return this;
     5.5      }
     5.6  
     5.7 -    @JavaScriptBody(args = { "self", "dummy" }, body = "")
     5.8 +    @JavaScriptBody(args = { "dummy" }, body = "")
     5.9      private native Throwable fillInStackTrace(int dummy);
    5.10  
    5.11      /**
     6.1 --- a/emul/src/main/java/java/lang/reflect/Method.java	Sun Jan 13 06:59:05 2013 +0100
     6.2 +++ b/emul/src/main/java/java/lang/reflect/Method.java	Mon Jan 14 11:52:38 2013 +0100
     6.3 @@ -646,10 +646,10 @@
     6.4          return Modifier.isSynthetic(getModifiers());
     6.5      }
     6.6  
     6.7 -    @JavaScriptBody(args = { "self", "ac" }, 
     6.8 +    @JavaScriptBody(args = { "ac" }, 
     6.9          body = 
    6.10 -          "if (self.fld_data.anno) {"
    6.11 -        + "  return self.fld_data.anno['L' + ac.jvmName + ';'];"
    6.12 +          "if (this.fld_data.anno) {"
    6.13 +        + "  return this.fld_data.anno['L' + ac.jvmName + ';'];"
    6.14          + "} else return null;"
    6.15      )
    6.16      private Object getAnnotationData(Class<?> annotationClass) {
     7.1 --- a/javap/src/main/java/org/apidesign/javap/Vector.java	Sun Jan 13 06:59:05 2013 +0100
     7.2 +++ b/javap/src/main/java/org/apidesign/javap/Vector.java	Mon Jan 14 11:52:38 2013 +0100
     7.3 @@ -37,8 +37,8 @@
     7.4      void add(Object objectType) {
     7.5          addElement(objectType);
     7.6      }
     7.7 -    @JavaScriptBody(args = { "self", "obj" }, body = 
     7.8 -        "self.push(obj);"
     7.9 +    @JavaScriptBody(args = { "obj" }, body = 
    7.10 +        "this.push(obj);"
    7.11      )
    7.12      void addElement(Object obj) {
    7.13          final int s = size();
    7.14 @@ -46,16 +46,16 @@
    7.15          setElementAt(obj, s);
    7.16      }
    7.17  
    7.18 -    @JavaScriptBody(args = { "self" }, body = 
    7.19 -        "return self.length;"
    7.20 +    @JavaScriptBody(args = { }, body = 
    7.21 +        "return this.length;"
    7.22      )
    7.23      int size() {
    7.24          return arr == null ? 0 : arr.length;
    7.25      }
    7.26  
    7.27 -    @JavaScriptBody(args = { "self", "newArr" }, body =
    7.28 -        "for (var i = 0; i < self.length; i++) {\n"
    7.29 -      + "  newArr[i] = self[i];\n"
    7.30 +    @JavaScriptBody(args = { "newArr" }, body =
    7.31 +        "for (var i = 0; i < this.length; i++) {\n"
    7.32 +      + "  newArr[i] = this[i];\n"
    7.33        + "}\n")
    7.34      void copyInto(Object[] newArr) {
    7.35          if (arr == null) {
    7.36 @@ -67,8 +67,8 @@
    7.37          }
    7.38      }
    7.39  
    7.40 -    @JavaScriptBody(args = { "self", "index" }, body =
    7.41 -        "return self[index];"
    7.42 +    @JavaScriptBody(args = { "index" }, body =
    7.43 +        "return this[index];"
    7.44      )
    7.45      Object elementAt(int index) {
    7.46          return arr[index];
    7.47 @@ -80,8 +80,8 @@
    7.48          arr = newArr;
    7.49      }
    7.50  
    7.51 -    @JavaScriptBody(args = { "self", "val", "index" }, body = 
    7.52 -        "self[index] = val;"
    7.53 +    @JavaScriptBody(args = { "val", "index" }, body = 
    7.54 +        "this[index] = val;"
    7.55      )
    7.56      void setElementAt(Object val, int index) {
    7.57          arr[index] = val;
     8.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java	Sun Jan 13 06:59:05 2013 +0100
     8.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Element.java	Mon Jan 14 11:52:38 2013 +0100
     8.3 @@ -51,9 +51,9 @@
     8.4       * @param r the runnable to execute, never null
     8.5       */
     8.6      @JavaScriptBody(
     8.7 -        args={ "self", "ev", "r" },
     8.8 -        body="var e = window.document.getElementById(self.fld_id);\n"
     8.9 -           + "e[ev.fld_id] = function() { r.run__V(r); };\n"
    8.10 +        args={ "ev", "r" },
    8.11 +        body="var e = window.document.getElementById(this.fld_id);\n"
    8.12 +           + "e[ev.fld_id] = function() { r.run__V(); };\n"
    8.13      )
    8.14      final native void on(OnEvent ev, Runnable r);
    8.15  
     9.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Jan 13 06:59:05 2013 +0100
     9.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Jan 14 11:52:38 2013 +0100
     9.3 @@ -249,7 +249,7 @@
     9.4                  new LocalsMapper(stackMapIterator.getArguments());
     9.5  
     9.6          out.append(prefix).append(name).append(" = function(");
     9.7 -        lmapper.outputArguments(out);
     9.8 +        lmapper.outputArguments(out, m.isStatic());
     9.9          out.append(") {").append("\n");
    9.10  
    9.11          final byte[] byteCodes = m.getCode();
    9.12 @@ -275,6 +275,9 @@
    9.13                  out.append(';');
    9.14              }
    9.15          }
    9.16 +        if (!m.isStatic()) {
    9.17 +            out.append("  var ").append(" lcA0 = this;\n");
    9.18 +        }
    9.19  
    9.20          // maxStack includes two stack positions for every pushed long / double
    9.21          // so this might generate more stack variables than we need
    9.22 @@ -1330,7 +1333,11 @@
    9.23              out.append("constructor.");
    9.24          }
    9.25          out.append(mn);
    9.26 -        out.append('(');
    9.27 +        if (isStatic) {
    9.28 +            out.append('(');
    9.29 +        } else {
    9.30 +            out.append(".call(");
    9.31 +        }
    9.32          if (numArguments > 0) {
    9.33              out.append(vars[0]);
    9.34              for (int j = 1; j < numArguments; ++j) {
    9.35 @@ -1366,10 +1373,11 @@
    9.36          out.append(vars[0]).append('.');
    9.37          out.append(mn);
    9.38          out.append('(');
    9.39 -        out.append(vars[0]);
    9.40 +        String sep = "";
    9.41          for (int j = 1; j < numArguments; ++j) {
    9.42 -            out.append(", ");
    9.43 +            out.append(sep);
    9.44              out.append(vars[j]);
    9.45 +            sep = ", ";
    9.46          }
    9.47          out.append(");");
    9.48          i += 2;
    9.49 @@ -1443,15 +1451,8 @@
    9.50          final String mn = findMethodName(m, cnt);
    9.51          out.append(prefix).append(mn);
    9.52          out.append(" = function(");
    9.53 -        String space;
    9.54 -        int index;
    9.55 -        if (!isStatic) {                
    9.56 -            space = outputArg(out, p.args, 0);
    9.57 -            index = 1;
    9.58 -        } else {
    9.59 -            space = "";
    9.60 -            index = 0;
    9.61 -        }
    9.62 +        String space = "";
    9.63 +        int index = 0;
    9.64          for (int i = 0; i < cnt.length(); i++) {
    9.65              out.append(space);
    9.66              space = outputArg(out, p.args, index);
    9.67 @@ -1600,7 +1601,7 @@
    9.68                      out.append("  stA0 = e;");
    9.69                      out.append("} else {");
    9.70                      out.append("  stA0 = vm.java_lang_Throwable(true);");
    9.71 -                    out.append("  vm.java_lang_Throwable.cons__VLjava_lang_String_2(stA0, e.toString());");
    9.72 +                    out.append("  vm.java_lang_Throwable.cons__VLjava_lang_String_2.call(stA0, e.toString());");
    9.73                      out.append("}");
    9.74                      out.append("gt=" + e.handler_pc + "; continue;");
    9.75                  } else {
    10.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/LocalsMapper.java	Sun Jan 13 06:59:05 2013 +0100
    10.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/LocalsMapper.java	Mon Jan 14 11:52:38 2013 +0100
    10.3 @@ -33,13 +33,14 @@
    10.4          localTypeRecords = new TypeArray(initTypeRecords);
    10.5      }
    10.6  
    10.7 -    public void outputArguments(final Appendable out) throws IOException {
    10.8 +    public void outputArguments(final Appendable out, boolean isStatic) throws IOException {
    10.9          final int argRecordCount = argTypeRecords.getSize();
   10.10 -        if (argRecordCount > 0) {
   10.11 -            Variable variable = getVariable(argTypeRecords, 0);
   10.12 +        int first = isStatic ? 0 : 1;
   10.13 +        if (argRecordCount > first) {
   10.14 +            Variable variable = getVariable(argTypeRecords, first);
   10.15              out.append(variable);
   10.16  
   10.17 -            int i = variable.isCategory2() ? 2 : 1;
   10.18 +            int i = first + (variable.isCategory2() ? 2 : 1);
   10.19              while (i < argRecordCount) {
   10.20                  variable = getVariable(argTypeRecords, i);
   10.21                  out.append(", ");
    11.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun Jan 13 06:59:05 2013 +0100
    11.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Mon Jan 14 11:52:38 2013 +0100
    11.3 @@ -117,7 +117,7 @@
    11.4              + "    var loader = {};\n"
    11.5              + "    loader.vm = vm;\n"
    11.6              + "    loader.loadClass = function(name) {\n"
    11.7 -            + "      var attr = name.replace__Ljava_lang_String_2CC(name, '.','_');\n"
    11.8 +            + "      var attr = name.replace__Ljava_lang_String_2CC('.','_');\n"
    11.9              + "      var fn = vm[attr];\n"
   11.10              + "      if (fn) return fn(false);\n"
   11.11              + "      if (!args[0]) throw 'bck2brwsr initialized without loader function, cannot load ' + name;\n"
    12.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java	Sun Jan 13 06:59:05 2013 +0100
    12.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/VMLazy.java	Mon Jan 14 11:52:38 2013 +0100
    12.3 @@ -112,17 +112,17 @@
    12.4              this.lazy = vm;
    12.5          }
    12.6          
    12.7 -        @JavaScriptBody(args = {"self", "n"},
    12.8 +        @JavaScriptBody(args = {"n"},
    12.9          body =
   12.10 -        "var cls = n.replace__Ljava_lang_String_2CC(n, '/','_').toString();"
   12.11 -        + "\nvar dot = n.replace__Ljava_lang_String_2CC(n,'/','.').toString();"
   12.12 -        + "\nvar lazy = self.fld_lazy;"
   12.13 +        "var cls = n.replace__Ljava_lang_String_2CC('/','_').toString();"
   12.14 +        + "\nvar dot = n.replace__Ljava_lang_String_2CC('/','.').toString();"
   12.15 +        + "\nvar lazy = this.fld_lazy;"
   12.16          + "\nvar loader = lazy.fld_loader;"
   12.17          + "\nvar vm = loader.vm;"
   12.18          + "\nif (vm[cls]) return false;"
   12.19          + "\nvm[cls] = function() {"
   12.20          + "\n  var instance = arguments.length == 0 || arguments[0] === true;"
   12.21 -        + "\n  return lazy.load__Ljava_lang_Object_2Ljava_lang_String_2Z(lazy, dot, instance);"
   12.22 +        + "\n  return lazy.load__Ljava_lang_Object_2Ljava_lang_String_2Z(dot, instance);"
   12.23          + "\n};"
   12.24          + "\nreturn true;")
   12.25          @Override
    13.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Sun Jan 13 06:59:05 2013 +0100
    13.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Instance.java	Mon Jan 14 11:52:38 2013 +0100
    13.3 @@ -125,4 +125,11 @@
    13.4      public static boolean iofObject() {
    13.5          return jsObj() instanceof Object;
    13.6      }
    13.7 +    
    13.8 +    public static int jscall() {
    13.9 +        return jsgetbytes(new Instance());
   13.10 +    }
   13.11 +    
   13.12 +    @JavaScriptBody(args = { "instance" }, body = "return instance.getByte__B();")
   13.13 +    private static native int jsgetbytes(Instance instance);
   13.14  }
    14.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java	Sun Jan 13 06:59:05 2013 +0100
    14.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/InstanceTest.java	Mon Jan 14 11:52:38 2013 +0100
    14.3 @@ -131,6 +131,14 @@
    14.4              Double.valueOf(1)
    14.5          );
    14.6      }
    14.7 +
    14.8 +    @Test public void jsCallingConvention() throws Exception {
    14.9 +        assertExec(
   14.10 +            "Pointer to 'this' is passed automatically (and not as a first argument)",
   14.11 +            Instance.class, "jscall__I",
   14.12 +            Double.valueOf(31)
   14.13 +        );
   14.14 +    }
   14.15      
   14.16      protected String startCompilationWith() {
   14.17          return "org/apidesign/vm4brwsr/Instance";