Skip to content

Commit

Permalink
🦄 refactor: Remove unary expr as much as possible
Browse files Browse the repository at this point in the history
  • Loading branch information
caoccao committed Dec 23, 2024
1 parent 4f3ce6e commit 25c9bb9
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ public Memo getMemo() {
return memo;
}

@Override
public ITs2JavaAst<?, ?> getParent() {
return parent;
}
Expand All @@ -73,6 +74,11 @@ public TypeDescription getType() {
return type;
}

@Override
public void setParent(ITs2JavaAst<?, ?> parent) {
this.parent = parent;
}

protected void visitLineNumber(MethodVisitor methodVisitor) {
if (memo instanceof Ts2JavaMemoFunction) {
Ts2JavaMemoFunction memoFunction = (Ts2JavaMemoFunction) memo;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* Copyright (c) 2024. caoccao.com Sam Cao
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.caoccao.javet.buddy.ts2java.ast.enums;

public enum Ts2JavaLogicalMode {
AndLeft,
AndRight,
Default,
OrLeft,
OrRight,
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package com.caoccao.javet.buddy.ts2java.ast.expr;

import com.caoccao.javet.buddy.ts2java.ast.enums.Ts2JavaLogicalMode;
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;
Expand All @@ -24,13 +25,16 @@
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.jar.asm.Label;

import java.util.Objects;

public abstract class Ts2JavaAstBinExprLogical extends Ts2JavaAstBinExpr
implements ITs2JavaBangFlippable {
protected boolean bangFlipped;
protected Label labelFalse;
protected boolean labelOverridden;
protected boolean labelSwitched;
protected Label labelTrue;
protected Ts2JavaLogicalMode logicalMode;

protected Ts2JavaAstBinExprLogical(
ITs2JavaAst<?, ?> parent,
Expand All @@ -42,6 +46,7 @@ protected Ts2JavaAstBinExprLogical(
labelTrue = new Label();
labelOverridden = false;
labelSwitched = false;
logicalMode = Ts2JavaLogicalMode.Default;
type = TypeDescription.ForLoadedType.of(boolean.class);
}

Expand All @@ -64,6 +69,10 @@ public Label getLabelTrue() {
return labelTrue;
}

public Ts2JavaLogicalMode getLogicalMode() {
return logicalMode;
}

public abstract Swc4jAstBinaryOp getResolvedOp();

@Override
Expand Down Expand Up @@ -99,4 +108,8 @@ public Ts2JavaAstBinExprLogical setLabelTrue(Label labelTrue) {
labelOverridden = true;
return this;
}

public void setLogicalMode(Ts2JavaLogicalMode logicalMode) {
this.logicalMode = Objects.requireNonNull(logicalMode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,15 @@ protected Ts2JavaAstUnaryExpr(
op = ast.getOp();
}

public static Ts2JavaAstUnaryExpr create(
public static ITs2JavaAstExpr<?, ?> create(
ITs2JavaAst<?, ?> parent,
Swc4jAstUnaryExpr ast,
Ts2JavaMemoFunction memo) {
switch (ast.getOp()) {
case Bang:
return new Ts2JavaAstUnaryExprBang(parent, ast, memo);
return Ts2JavaAstUnaryExprBang.create(parent, ast, memo);
case Minus:
return new Ts2JavaAstUnaryExprMinus(parent, ast, memo);
return Ts2JavaAstUnaryExprMinus.create(parent, ast, memo);
default:
return new Ts2JavaAstUnaryExpr(parent, ast, memo);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.caoccao.javet.buddy.ts2java.ast.expr;

import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstExpr;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.abilities.ITs2JavaBangFlippable;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.abilities.ITs2JavaBoolEval;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
Expand All @@ -38,6 +39,20 @@ protected Ts2JavaAstUnaryExprBang(
op = Swc4jAstUnaryOp.Bang;
}

public static ITs2JavaAstExpr<?, ?> create(
ITs2JavaAst<?, ?> parent,
Swc4jAstUnaryExpr ast,
Ts2JavaMemoFunction memo) {
Ts2JavaAstUnaryExprBang unaryExpr = new Ts2JavaAstUnaryExprBang(parent, ast, memo);
if (unaryExpr.isBangFlippable()) {
ITs2JavaAstExpr<?, ?> arg = unaryExpr.getArg();
arg.setParent(parent);
arg.as(ITs2JavaBangFlippable.class).flipBang();
return arg;
}
return unaryExpr;
}

@Override
public Size apply(MethodVisitor methodVisitor, Implementation.Context context) {
Size size = super.apply(methodVisitor, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.caoccao.javet.buddy.ts2java.ast.expr;

import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAst;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.ITs2JavaAstExpr;
import com.caoccao.javet.buddy.ts2java.ast.interfaces.abilities.ITs2JavaMinusFlippable;
import com.caoccao.javet.buddy.ts2java.ast.memo.Ts2JavaMemoFunction;
import com.caoccao.javet.swc4j.ast.enums.Swc4jAstUnaryOp;
Expand All @@ -35,6 +36,20 @@ protected Ts2JavaAstUnaryExprMinus(
op = Swc4jAstUnaryOp.Minus;
}

public static ITs2JavaAstExpr<?, ?> create(
ITs2JavaAst<?, ?> parent,
Swc4jAstUnaryExpr ast,
Ts2JavaMemoFunction memo) {
Ts2JavaAstUnaryExprMinus unaryExpr = new Ts2JavaAstUnaryExprMinus(parent, ast, memo);
if (unaryExpr.isMinusFlippable()) {
ITs2JavaAstExpr<?, ?> arg = unaryExpr.getArg();
arg.setParent(parent);
arg.as(ITs2JavaMinusFlippable.class).flipMinus();
return arg;
}
return unaryExpr;
}

@Override
public Size apply(MethodVisitor methodVisitor, Implementation.Context context) {
Size size = super.apply(methodVisitor, context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,16 @@ default <T> T as(Class<T> clazz) {

Memo getMemo();

ITs2JavaAst<?, ?> getParent();

TypeDescription getType();

@Override
default boolean isValid() {
return true;
}

void setParent(ITs2JavaAst<?, ?> parent);

void syncLabels();
}

0 comments on commit 25c9bb9

Please sign in to comment.