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

@@ -13,6 +13,7 @@ All notable changes to this project will be documented in this file.
- [#1914] DropShadow filter
- [#1916] Translation tool did not load up
- PlaceObject preview not cleared causing sound to repeat
- [#1920] Slower decompilation (returnType method optimization)
## [18.1.0] - 2022-12-23
### Added
@@ -2805,6 +2806,7 @@ All notable changes to this project will be documented in this file.
[#1852]: https://www.free-decompiler.com/flash/issues/1852
[#1914]: https://www.free-decompiler.com/flash/issues/1914
[#1916]: https://www.free-decompiler.com/flash/issues/1916
[#1920]: https://www.free-decompiler.com/flash/issues/1920
[#1231]: https://www.free-decompiler.com/flash/issues/1231
[#1690]: https://www.free-decompiler.com/flash/issues/1690
[#1460]: https://www.free-decompiler.com/flash/issues/1460

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;
}