Skip to content

Commit

Permalink
✨ feat: Support (&&) || (&&)
Browse files Browse the repository at this point in the history
  • Loading branch information
caoccao committed Dec 16, 2024
1 parent d86db2e commit ad3a282
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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));
Expand Down

0 comments on commit ad3a282

Please sign in to comment.