Skip to content

Commit

Permalink
🦄 refactor: Redesign ast 47
Browse files Browse the repository at this point in the history
  • Loading branch information
caoccao committed Dec 12, 2024
1 parent 6b2ead3 commit 2e7233f
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -59,25 +58,14 @@ 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));
sizes.add(logicalClose(methodVisitor));
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down

0 comments on commit 2e7233f

Please sign in to comment.