From 2e7233f1aa50c72000e867f580fb4f754f885a24 Mon Sep 17 00:00:00 2001 From: Sam Cao Date: Thu, 12 Dec 2024 11:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A6=84=20refactor:=20Redesign=20ast=2047?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ast/expr/Ts2JavaAstBinExprLogical.java | 6 ++++++ .../expr/Ts2JavaAstBinExprLogicalCompare.java | 14 +------------- .../Ts2JavaAstBinExprLogicalCondition.java | 18 ------------------ .../TestTs2JavaAstBinExprLogicalCondition.java | 2 +- 4 files changed, 8 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogical.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogical.java index 61699ce..674c740 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogical.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogical.java @@ -48,6 +48,12 @@ protected Ts2JavaAstBinExprLogical( @Override public void flipBang() { bangFlipped = !bangFlipped; + if (left instanceof ITs2JavaBangFlippable) { + left.as(ITs2JavaBangFlippable.class).flipBang(); + } + if (right instanceof ITs2JavaBangFlippable) { + right.as(ITs2JavaBangFlippable.class).flipBang(); + } } public Label getLabelFalse() { diff --git a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCompare.java b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCompare.java index 0e55f3e..91849c4 100644 --- a/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCompare.java +++ b/src/main/java/com/caoccao/javet/buddy/ts2java/ast/expr/Ts2JavaAstBinExprLogicalCompare.java @@ -18,7 +18,6 @@ import com.caoccao.javet.buddy.ts2java.ast.enums.Ts2JavaAstBinaryOp; import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst; -import com.caoccao.javet.buddy.ts2java.ast.interfaces.abilities.ITs2JavaBangFlippable; import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction; import com.caoccao.javet.buddy.ts2java.compiler.JavaClassCast; import com.caoccao.javet.swc4j.ast.enums.Swc4jAstBinaryOp; @@ -59,7 +58,7 @@ public Size apply(MethodVisitor methodVisitor, Implementation.Context context) { sizes.add(JavaClassCast.getUpCastStackManipulation(right.getType(), upCastType) .map(s -> s.apply(methodVisitor, context)) .orElse(Size.ZERO)); - final Swc4jAstBinaryOp finalOp = bangFlipped ? op.getOppositeOperator() : op; + final Swc4jAstBinaryOp finalOp = bangFlipped != labelSwitched ? op.getOppositeOperator() : op; final Label label = labelSwitched ? labelTrue : labelFalse; sizes.add(Ts2JavaAstBinaryOp.getLogicalCompareStackManipulation(ast, finalOp, upCastType, label) .apply(methodVisitor, context)); @@ -67,17 +66,6 @@ public Size apply(MethodVisitor methodVisitor, Implementation.Context context) { return aggregateSize(sizes); } - @Override - public void flipBang() { - super.flipBang(); - if (left instanceof ITs2JavaBangFlippable) { - left.as(ITs2JavaBangFlippable.class).flipBang(); - } - if (right instanceof ITs2JavaBangFlippable) { - right.as(ITs2JavaBangFlippable.class).flipBang(); - } - } - @Override public boolean isLabelTrueRequired() { return false; 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 2c9fbe7..c9e5d93 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 @@ -69,13 +69,6 @@ public Size apply(MethodVisitor methodVisitor, Implementation.Context context) { if (!isLeftLogical) { methodVisitor.visitJumpInsn(opcodeCompareTrue, labelSwitched ? labelFalse : labelTrue); } - if (isLeftLogical && isRightLogical) { - Ts2JavaAstBinExprLogical leftLogical = left.as(Ts2JavaAstBinExprLogical.class); - methodVisitor.visitLabel(leftLogical.isLabelSwitched() - ? leftLogical.getLabelTrue() - : leftLogical.getLabelFalse()); - methodVisitor.visitFrame(Opcodes.F_SAME, 0, null, 0, null); - } sizes.add(right.apply(methodVisitor, context)); if (!isRightLogical) { methodVisitor.visitJumpInsn(opcodeCompareFalse, labelFalse); @@ -131,17 +124,6 @@ public void compile() { labelTrue = rightLogical.getLabelTrue(); labelFalse = rightLogical.getLabelFalse(); } - if (op == Swc4jAstBinaryOp.LogicalOr && isLeftLogical) { - left.as(Ts2JavaAstBinExprLogical.class).flipBang(); - } - } - - @Override - public void flipBang() { - super.flipBang(); - if (right instanceof ITs2JavaBangFlippable) { - right.as(ITs2JavaBangFlippable.class).flipBang(); - } } @Override 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 aaf1985..1300a39 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 @@ -338,7 +338,7 @@ public boolean not_LogicalAnd_ZZ_Z(boolean a, boolean b) { return !(a || b); } -// @Test + // @Test public void testLogicalAndOrAnd_II_Z() throws Exception { enableLogging(); assertTrue(logicalAndOrAnd_II_Z(2, 2));