Fixed #1920 Slower decompilation (returnType method optimization)

This commit is contained in:
Jindra Petřík
2022-12-27 19:10:47 +01:00
parent 0272175e00
commit b82d68ad1d
4 changed files with 24 additions and 18 deletions

View File

@@ -95,28 +95,28 @@ public class AddAVM2Item extends BinaryOpItem implements CompoundableBinaryOp {
@Override
public GraphTargetItem returnType() {
if (leftSide.returnType().equals(TypeItem.STRING) || rightSide.returnType().equals(TypeItem.STRING)) {
GraphTargetItem leftType = leftSide.returnType();
GraphTargetItem rightType = rightSide.returnType();
if (leftType.equals(TypeItem.STRING) || rightType.equals(TypeItem.STRING)) {
return TypeItem.STRING;
}
if (leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().equals(TypeItem.INT)) {
if (leftType.equals(TypeItem.INT) && rightType.equals(TypeItem.INT)) {
return TypeItem.INT;
}
if ((leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().equals(TypeItem.UINT))||
(leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.INT))
if ((leftType.equals(TypeItem.INT) && rightType.equals(TypeItem.UINT))||
(leftType.equals(TypeItem.UINT) && rightType.equals(TypeItem.INT))
) {
return TypeItem.INT;
}
if (leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.UINT)) {
if (leftType.equals(TypeItem.UINT) && rightType.equals(TypeItem.UINT)) {
return TypeItem.UINT;
}
if (leftSide.returnType().equals(TypeItem.NUMBER) || rightSide.returnType().equals(TypeItem.NUMBER)) {
if (leftType.equals(TypeItem.NUMBER) || rightType.equals(TypeItem.NUMBER)) {
return TypeItem.NUMBER;
}
}
return TypeItem.NUMBER;
}

View File

@@ -77,13 +77,15 @@ public class MultiplyAVM2Item extends BinaryOpItem implements CompoundableBinary
@Override
public GraphTargetItem returnType() {
if (leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().equals(TypeItem.INT)) {
GraphTargetItem leftType = leftSide.returnType();
GraphTargetItem rightType = rightSide.returnType();
if (leftType.equals(TypeItem.INT) && rightType.equals(TypeItem.INT)) {
return TypeItem.INT;
}
if (leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.UINT)) {
if (leftType.equals(TypeItem.UINT) && rightType.equals(TypeItem.UINT)) {
return TypeItem.UINT;
}
if (leftSide.returnType().equals(TypeItem.NUMBER) || rightSide.returnType().equals(TypeItem.NUMBER)) {
if (leftType.equals(TypeItem.NUMBER) || rightType.equals(TypeItem.NUMBER)) {
return TypeItem.NUMBER;
}

View File

@@ -86,21 +86,23 @@ public class SubtractAVM2Item extends BinaryOpItem implements CompoundableBinary
@Override
public GraphTargetItem returnType() {
if (leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().equals(TypeItem.INT)) {
GraphTargetItem leftType = leftSide.returnType();
GraphTargetItem rightType = rightSide.returnType();
if (leftType.equals(TypeItem.INT) && rightType.equals(TypeItem.INT)) {
return TypeItem.INT;
}
if ((leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().equals(TypeItem.UINT))||
(leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.INT))
) {
if ((leftType.equals(TypeItem.INT) && rightType.equals(TypeItem.UINT))||
(leftType.equals(TypeItem.UINT) && rightType.equals(TypeItem.INT))) {
return TypeItem.INT;
}
if (leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.UINT)) {
if (leftType.equals(TypeItem.UINT) && rightType.equals(TypeItem.UINT)) {
return TypeItem.INT;
}
if (leftSide.returnType().equals(TypeItem.NUMBER) || rightSide.returnType().equals(TypeItem.NUMBER)) {
if (leftType.equals(TypeItem.NUMBER) || rightType.equals(TypeItem.NUMBER)) {
return TypeItem.NUMBER;
}