# HG changeset patch # User Jaroslav Tulach # Date 1346037428 -7200 # Node ID 48b1dce93691ce4ad0f5f12e0f41fbbc17faa3ba # Parent 71aab30ab2b784581c116e5a6ca24ddc986c377a Handle float multiplication diff -r 71aab30ab2b7 -r 48b1dce93691 src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 05:08:30 2012 +0200 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 05:17:08 2012 +0200 @@ -55,7 +55,7 @@ } } private void generateStaticMethod(Method m) throws IOException { - out.append("function ").append( + out.append("\nfunction ").append( jc.getName().getExternalName().replace('.', '_') ).append('_').append( m.getName() @@ -85,7 +85,6 @@ out.append(Integer.toString(code.getMaxStack())); out.append(");\n"); produceCode(code.getByteCodes()); - out.append(";\nreturn 1;"); out.append("}"); } @@ -97,17 +96,36 @@ switch (c) { case ByteCodes.bc_aload_0: case ByteCodes.bc_iload_0: + case ByteCodes.bc_lload_0: + case ByteCodes.bc_fload_0: + case ByteCodes.bc_dload_0: out.append("stack.push(arg0);"); break; case ByteCodes.bc_aload_1: case ByteCodes.bc_iload_1: + case ByteCodes.bc_lload_1: + case ByteCodes.bc_fload_1: + case ByteCodes.bc_dload_1: out.append("stack.push(arg1);"); break; case ByteCodes.bc_iadd: + case ByteCodes.bc_ladd: + case ByteCodes.bc_fadd: + case ByteCodes.bc_dadd: out.append("stack.push(stack.pop() + stack.pop());"); break; + case ByteCodes.bc_imul: + case ByteCodes.bc_lmul: + case ByteCodes.bc_fmul: + case ByteCodes.bc_dmul: + out.append("stack.push(stack.pop() * stack.pop());"); + break; case ByteCodes.bc_ireturn: + case ByteCodes.bc_lreturn: + case ByteCodes.bc_freturn: + case ByteCodes.bc_dreturn: out.append("return stack.pop();"); + break; } out.append("/*"); for (int j = prev; j <= i; j++) { diff -r 71aab30ab2b7 -r 48b1dce93691 src/test/java/org/apidesign/java4browser/StaticMethod.java --- a/src/test/java/org/apidesign/java4browser/StaticMethod.java Mon Aug 27 05:08:30 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethod.java Mon Aug 27 05:17:08 2012 +0200 @@ -25,4 +25,7 @@ public static int sum(int x, int y) { return x + y; } + public static float power(float x) { + return x * x; + } } diff -r 71aab30ab2b7 -r 48b1dce93691 src/test/java/org/apidesign/java4browser/StaticMethodTest.java --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Mon Aug 27 05:08:30 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Mon Aug 27 05:17:08 2012 +0200 @@ -38,6 +38,13 @@ assertEquals(ret, Double.valueOf(7), "Should be seven"); } + @Test public void powerOfThree() throws Exception { + Invocable i = compileClass("StaticMethod.class"); + + Object ret = i.invokeFunction("org_apidesign_java4browser_StaticMethod_powerFF", 3.0f); + assertEquals(ret, Double.valueOf(9), "Should be nine"); + } + static Invocable compileClass(String name) throws ScriptException, IOException { InputStream is = StaticMethodTest.class.getResourceAsStream(name); assertNotNull(is, "Class file found");