1.1 --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 05:08:30 2012 +0200
1.2 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 05:17:08 2012 +0200
1.3 @@ -55,7 +55,7 @@
1.4 }
1.5 }
1.6 private void generateStaticMethod(Method m) throws IOException {
1.7 - out.append("function ").append(
1.8 + out.append("\nfunction ").append(
1.9 jc.getName().getExternalName().replace('.', '_')
1.10 ).append('_').append(
1.11 m.getName()
1.12 @@ -85,7 +85,6 @@
1.13 out.append(Integer.toString(code.getMaxStack()));
1.14 out.append(");\n");
1.15 produceCode(code.getByteCodes());
1.16 - out.append(";\nreturn 1;");
1.17 out.append("}");
1.18 }
1.19
1.20 @@ -97,17 +96,36 @@
1.21 switch (c) {
1.22 case ByteCodes.bc_aload_0:
1.23 case ByteCodes.bc_iload_0:
1.24 + case ByteCodes.bc_lload_0:
1.25 + case ByteCodes.bc_fload_0:
1.26 + case ByteCodes.bc_dload_0:
1.27 out.append("stack.push(arg0);");
1.28 break;
1.29 case ByteCodes.bc_aload_1:
1.30 case ByteCodes.bc_iload_1:
1.31 + case ByteCodes.bc_lload_1:
1.32 + case ByteCodes.bc_fload_1:
1.33 + case ByteCodes.bc_dload_1:
1.34 out.append("stack.push(arg1);");
1.35 break;
1.36 case ByteCodes.bc_iadd:
1.37 + case ByteCodes.bc_ladd:
1.38 + case ByteCodes.bc_fadd:
1.39 + case ByteCodes.bc_dadd:
1.40 out.append("stack.push(stack.pop() + stack.pop());");
1.41 break;
1.42 + case ByteCodes.bc_imul:
1.43 + case ByteCodes.bc_lmul:
1.44 + case ByteCodes.bc_fmul:
1.45 + case ByteCodes.bc_dmul:
1.46 + out.append("stack.push(stack.pop() * stack.pop());");
1.47 + break;
1.48 case ByteCodes.bc_ireturn:
1.49 + case ByteCodes.bc_lreturn:
1.50 + case ByteCodes.bc_freturn:
1.51 + case ByteCodes.bc_dreturn:
1.52 out.append("return stack.pop();");
1.53 + break;
1.54 }
1.55 out.append("/*");
1.56 for (int j = prev; j <= i; j++) {
2.1 --- a/src/test/java/org/apidesign/java4browser/StaticMethod.java Mon Aug 27 05:08:30 2012 +0200
2.2 +++ b/src/test/java/org/apidesign/java4browser/StaticMethod.java Mon Aug 27 05:17:08 2012 +0200
2.3 @@ -25,4 +25,7 @@
2.4 public static int sum(int x, int y) {
2.5 return x + y;
2.6 }
2.7 + public static float power(float x) {
2.8 + return x * x;
2.9 + }
2.10 }
3.1 --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Mon Aug 27 05:08:30 2012 +0200
3.2 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Mon Aug 27 05:17:08 2012 +0200
3.3 @@ -38,6 +38,13 @@
3.4 assertEquals(ret, Double.valueOf(7), "Should be seven");
3.5 }
3.6
3.7 + @Test public void powerOfThree() throws Exception {
3.8 + Invocable i = compileClass("StaticMethod.class");
3.9 +
3.10 + Object ret = i.invokeFunction("org_apidesign_java4browser_StaticMethod_powerFF", 3.0f);
3.11 + assertEquals(ret, Double.valueOf(9), "Should be nine");
3.12 + }
3.13 +
3.14 static Invocable compileClass(String name) throws ScriptException, IOException {
3.15 InputStream is = StaticMethodTest.class.getResourceAsStream(name);
3.16 assertNotNull(is, "Class file found");