diff -r 227bafe6ef52 -r c6a0b5b64133 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 25 21:23:06 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Nov 25 23:14:58 2012 +0100 @@ -19,7 +19,6 @@ import java.io.IOException; import java.io.InputStream; -import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.javap.AnnotationParser; import org.apidesign.javap.ClassData; import org.apidesign.javap.FieldData; @@ -74,13 +73,6 @@ } } StringArray toInitilize = new StringArray(); - for (MethodData m : jc.getMethods()) { - if (m.isStatic()) { - generateStaticMethod(m, toInitilize); - } else { - generateInstanceMethod(m); - } - } final String className = className(jc); out.append("\nfunction ").append(className); out.append("() {"); @@ -90,7 +82,8 @@ append(v.getName()).append(initField(v)); } } - out.append("\n}\n\nfunction ").append(className).append("_proto() {"); + out.append("\n}"); + out.append("\n\nfunction ").append(className).append("_proto() {"); out.append("\n if (").append(className). append(".prototype.$instOf_").append(className).append(") {"); out.append("\n return new ").append(className).append(";"); @@ -110,8 +103,10 @@ out.append("\n var p = ").append(className).append(".prototype;"); } for (MethodData m : jc.getMethods()) { - if (!m.getName().contains("")) { - generateMethodReference("\n p.", m); + if (m.isStatic()) { + generateStaticMethod("\n p.", m, toInitilize); + } else { + generateInstanceMethod("\n p.", m); } } out.append("\n p.$instOf_").append(className).append(" = true;"); @@ -127,17 +122,15 @@ } return sb.toString(); } - private void generateStaticMethod(MethodData m, StringArray toInitilize) throws IOException { - if (javaScriptBody(m, true)) { + private void generateStaticMethod(String prefix, MethodData m, StringArray toInitilize) throws IOException { + if (javaScriptBody(prefix, m, true)) { return; } StringBuilder argsCnt = new StringBuilder(); final String mn = findMethodName(m, argsCnt); - out.append("\nfunction ").append( - className(jc) - ).append('_').append(mn); + out.append(prefix).append(mn).append(" = function"); if (mn.equals("classV")) { - toInitilize.add(className(jc) + '_' + mn); + toInitilize.add(className(jc) + "_proto()." + mn); } out.append('('); String space = ""; @@ -165,24 +158,16 @@ } else { out.append(" /* no code found for ").append(m.getInternalSig()).append(" */\n"); } - out.append("}"); + out.append("};"); } - private void generateMethodReference(String prefix, MethodData m) throws IOException { - final String name = findMethodName(m, new StringBuilder()); - out.append(prefix).append(name).append(" = ") - .append(className(jc)) - .append('_').append(name).append(";"); - } - - private void generateInstanceMethod(MethodData m) throws IOException { - if (javaScriptBody(m, false)) { + private void generateInstanceMethod(String prefix, MethodData m) throws IOException { + if (javaScriptBody(prefix, m, false)) { return; } StringBuilder argsCnt = new StringBuilder(); - out.append("\nfunction ").append( - className(jc) - ).append('_').append(findMethodName(m, argsCnt)); + final String mn = findMethodName(m, argsCnt); + out.append(prefix).append(mn).append(" = function"); out.append("(arg0"); String space = ","; for (int index = 1, i = 0; i < argsCnt.length(); i++) { @@ -207,7 +192,7 @@ } else { out.append(" /* no code found for ").append(m.getInternalSig()).append(" */\n"); } - out.append("}"); + out.append("};"); } private void produceCode(byte[] byteCodes) throws IOException { @@ -980,7 +965,7 @@ return d.replace('[', 'A'); } - private boolean javaScriptBody(MethodData m, boolean isStatic) throws IOException { + private boolean javaScriptBody(String prefix, MethodData m, boolean isStatic) throws IOException { byte[] arr = m.findAnnotationData(true); if (arr == null) { return false; @@ -1010,9 +995,8 @@ return false; } StringBuilder cnt = new StringBuilder(); - out.append("\nfunction ").append(className(jc)).append('_'). - append(findMethodName(m, cnt)); - out.append("("); + out.append(prefix).append(findMethodName(m, cnt)); + out.append(" = function("); String space; int index; if (!isStatic) {