diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCondition.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCondition.java index d3fd23e..7c7630b 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCondition.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCondition.java @@ -193,17 +193,26 @@ public Swc4jAstBinaryOp getResolvedOp() { @Override public void syncLabels() { - final Swc4jAstBinaryOp resolvedOp = getResolvedOp(); - if (left instanceof Ts2JavaAstBinExprLogical) { - Ts2JavaAstBinExprLogical leftLogical = left.as(Ts2JavaAstBinExprLogical.class); - if (resolvedOp == Swc4jAstBinaryOp.LogicalOr) { - leftLogical.setLabelTrue(labelTrue); - } + if (left instanceof Ts2JavaAstBinExprLogicalCompare) { + Ts2JavaAstBinExprLogicalCompare leftLogical = left.as(Ts2JavaAstBinExprLogicalCompare.class); + leftLogical.setLabelTrue(labelTrue); leftLogical.setLabelFalse(labelFalse); + } else if (left instanceof Ts2JavaAstBinExprLogicalCondition) { + Ts2JavaAstBinExprLogicalCondition leftLogical = left.as(Ts2JavaAstBinExprLogicalCondition.class); + if ((leftLogical.getResolvedOp() == Swc4jAstBinaryOp.LogicalOr) + || (!(right instanceof Ts2JavaAstBinExprLogical))) { + leftLogical.setLabelFalse(labelFalse); + } + leftLogical.setLabelTrue(labelTrue); } - if (right instanceof Ts2JavaAstBinExprLogical) { - Ts2JavaAstBinExprLogical rightLogical = right.as(Ts2JavaAstBinExprLogical.class); - if (resolvedOp == Swc4jAstBinaryOp.LogicalAnd) { + if (right instanceof Ts2JavaAstBinExprLogicalCompare) { + Ts2JavaAstBinExprLogicalCompare rightLogical = right.as(Ts2JavaAstBinExprLogicalCompare.class); + rightLogical.setLabelTrue(labelTrue); + rightLogical.setLabelFalse(labelFalse); + } else if (right instanceof Ts2JavaAstBinExprLogicalCondition) { + Ts2JavaAstBinExprLogicalCondition rightLogical = right.as(Ts2JavaAstBinExprLogicalCondition.class); + if ((rightLogical.getResolvedOp() == Swc4jAstBinaryOp.LogicalAnd) + || (!(left instanceof Ts2JavaAstBinExprLogical))) { rightLogical.setLabelTrue(labelTrue); } rightLogical.setLabelFalse(labelFalse); diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/compiler/visitors/JavaLoggingMethodVisitor.java b/src/main/java/com/caoccao/javet/buddy/ts2java/compiler/visitors/JavaLoggingMethodVisitor.java index 32ac1cc..d36fe10 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/compiler/visitors/JavaLoggingMethodVisitor.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/compiler/visitors/JavaLoggingMethodVisitor.java @@ -27,7 +27,7 @@ public JavaLoggingMethodVisitor(int api) { @Override public void visitFrame(int type, int numLocal, Object[] local, int numStack, Object[] stack) { - System.out.println(" FRAME " + JavaOpcodeUtils.getFrameTypeName(type) + " " + numLocal + " " + local + " " + numStack + " " + stack); + System.out.println(" " + JavaOpcodeUtils.getFrameTypeName(type) + " " + numLocal + " " + local + " " + numStack + " " + stack); super.visitFrame(type, numLocal, local, numStack, stack); } diff --git a/src/test/java/com/caoccao/javet/buddy/ts2java/ast/expr/TestTs2JavaAstBinExprLogicalCondition.java b/src/test/java/com/caoccao/javet/buddy/ts2java/ast/expr/TestTs2JavaAstBinExprLogicalCondition.java index e47b695..ab35213 100644 --- a/src/test/java/com/caoccao/javet/buddy/ts2java/ast/expr/TestTs2JavaAstBinExprLogicalCondition.java +++ b/src/test/java/com/caoccao/javet/buddy/ts2java/ast/expr/TestTs2JavaAstBinExprLogicalCondition.java @@ -59,7 +59,7 @@ public boolean andAndAnd_ZZZ_Z(boolean a, boolean b, boolean c) { /* public andOrAnd_II_Z(II)Z L0 - LINENUMBER 91 L0 + LINENUMBER 95 L0 ILOAD 1 ILOAD 2 IF_ICMPNE L1 @@ -85,7 +85,7 @@ public andOrAnd_II_Z(II)Z FRAME SAME1 I IRETURN L5 - LOCALVARIABLE this Lcom/caoccao/javet/buddy/ts2java/ast/TestLogicalOperations; L0 L5 0 + LOCALVARIABLE this Lcom/caoccao/javet/buddy/ts2java/ast/expr/TestTs2JavaAstBinExprLogicalCondition; L0 L5 0 LOCALVARIABLE a I L0 L5 1 LOCALVARIABLE b I L0 L5 2 MAXSTACK = 2 @@ -469,7 +469,7 @@ public void testAndBool_Z_Z() throws Exception { assertFalse((boolean) tsClass.invoke(false)); } -// @Test + @Test public void testAndOrAnd_II_Z() throws Exception { assertTrue(andOrAnd_II_Z(2, 2)); assertFalse(andOrAnd_II_Z(1, 1));