1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jan 11 16:36:28 2013 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Jan 14 10:57:51 2013 +0100
1.3 @@ -249,7 +249,7 @@
1.4 new LocalsMapper(stackMapIterator.getArguments());
1.5
1.6 out.append(prefix).append(name).append(" = function(");
1.7 - lmapper.outputArguments(out);
1.8 + lmapper.outputArguments(out, m.isStatic());
1.9 out.append(") {").append("\n");
1.10
1.11 final byte[] byteCodes = m.getCode();
1.12 @@ -275,6 +275,9 @@
1.13 out.append(';');
1.14 }
1.15 }
1.16 + if (!m.isStatic()) {
1.17 + out.append(" var ").append(" lcA0 = this;\n");
1.18 + }
1.19
1.20 // maxStack includes two stack positions for every pushed long / double
1.21 // so this might generate more stack variables than we need
1.22 @@ -1330,7 +1333,11 @@
1.23 out.append("constructor.");
1.24 }
1.25 out.append(mn);
1.26 - out.append('(');
1.27 + if (isStatic) {
1.28 + out.append('(');
1.29 + } else {
1.30 + out.append(".call(");
1.31 + }
1.32 if (numArguments > 0) {
1.33 out.append(vars[0]);
1.34 for (int j = 1; j < numArguments; ++j) {
1.35 @@ -1366,10 +1373,11 @@
1.36 out.append(vars[0]).append('.');
1.37 out.append(mn);
1.38 out.append('(');
1.39 - out.append(vars[0]);
1.40 + String sep = "";
1.41 for (int j = 1; j < numArguments; ++j) {
1.42 - out.append(", ");
1.43 + out.append(sep);
1.44 out.append(vars[j]);
1.45 + sep = ", ";
1.46 }
1.47 out.append(");");
1.48 i += 2;
1.49 @@ -1443,13 +1451,11 @@
1.50 final String mn = findMethodName(m, cnt);
1.51 out.append(prefix).append(mn);
1.52 out.append(" = function(");
1.53 - String space;
1.54 + String space = "";
1.55 int index;
1.56 if (!isStatic) {
1.57 - space = outputArg(out, p.args, 0);
1.58 index = 1;
1.59 } else {
1.60 - space = "";
1.61 index = 0;
1.62 }
1.63 for (int i = 0; i < cnt.length(); i++) {
1.64 @@ -1458,6 +1464,9 @@
1.65 index++;
1.66 }
1.67 out.append(") {").append("\n");
1.68 + if (!isStatic) {
1.69 + out.append(" var ").append(p.args[0]).append(" = this;\n");
1.70 + }
1.71 out.append(p.body);
1.72 out.append("\n}\n");
1.73 return mn;
1.74 @@ -1600,7 +1609,7 @@
1.75 out.append(" stA0 = e;");
1.76 out.append("} else {");
1.77 out.append(" stA0 = vm.java_lang_Throwable(true);");
1.78 - out.append(" vm.java_lang_Throwable.cons__VLjava_lang_String_2(stA0, e.toString());");
1.79 + out.append(" vm.java_lang_Throwable.cons__VLjava_lang_String_2.call(stA0, e.toString());");
1.80 out.append("}");
1.81 out.append("gt=" + e.handler_pc + "; continue;");
1.82 } else {