# HG changeset patch # User Jaroslav Tulach # Date 1346073399 -7200 # Node ID 5b135a2f2de36bbdf31deeed85e6b3e1b8323bff # Parent 6e4682985907c72437bd479582abb42299b5a0e1 Conditional statement and and or diff -r 6e4682985907 -r 5b135a2f2de3 src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java --- a/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 14:36:48 2012 +0200 +++ b/src/main/java/org/apidesign/java4browser/ByteCodeToJavaScript.java Mon Aug 27 15:16:39 2012 +0200 @@ -187,6 +187,14 @@ case bc_ddiv: out.append("{ var tmp = stack.pop(); stack.push(stack.pop() / tmp); }"); break; + case bc_iand: + case bc_land: + out.append("stack.push(stack.pop() & stack.pop());"); + break; + case bc_ior: + case bc_lor: + out.append("stack.push(stack.pop() | stack.pop());"); + break; case bc_ixor: case bc_lxor: out.append("stack.push(stack.pop() ^ stack.pop());"); @@ -258,6 +266,13 @@ i = generateIf(byteCodes, i, "=="); break; } + case bc_ifeq: { + int indx = i + readIntArg(byteCodes, i); + out.append("if (stack.pop() == 0) { gt = " + indx); + out.append("; continue; }"); + i += 2; + break; + } case bc_if_icmpne: i = generateIf(byteCodes, i, "!="); break; diff -r 6e4682985907 -r 5b135a2f2de3 src/test/java/org/apidesign/java4browser/StaticMethod.java --- a/src/test/java/org/apidesign/java4browser/StaticMethod.java Mon Aug 27 14:36:48 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethod.java Mon Aug 27 15:16:39 2012 +0200 @@ -40,6 +40,9 @@ public static long xor(int a, long b) { return a ^ b; } + public static long orOrAnd(boolean doOr, int a, int b) { + return doOr ? a | b : a & b; + } public static long factRec(int n) { if (n <= 1) { return 1; diff -r 6e4682985907 -r 5b135a2f2de3 src/test/java/org/apidesign/java4browser/StaticMethodTest.java --- a/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Mon Aug 27 14:36:48 2012 +0200 +++ b/src/test/java/org/apidesign/java4browser/StaticMethodTest.java Mon Aug 27 15:16:39 2012 +0200 @@ -101,6 +101,27 @@ ); } + @Test public void or() throws Exception { + assertExec( + "Or will be 7", + "org_apidesign_java4browser_StaticMethod_orOrAndJZII", + Double.valueOf(7), + true, + 4, + 3 + ); + } + @Test public void and() throws Exception { + assertExec( + "And will be 3", + "org_apidesign_java4browser_StaticMethod_orOrAndJZII", + Double.valueOf(3), + false, + 7, + 3 + ); + } + private static void assertExec(String msg, String methodName, Object expRes, Object... args) throws Exception { StringBuilder sb = new StringBuilder(); Invocable i = compileClass("StaticMethod.class", sb);