Handle float multiplication
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Mon, 27 Aug 2012 05:17:08 +0200
changeset 148b1dce93691
parent 0 71aab30ab2b7
child 2 4679bf342a1f
Handle float multiplication
src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java
src/test/java/org/apidesign/java4browser/StaticMethod.java
src/test/java/org/apidesign/java4browser/StaticMethodTest.java
     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");