From b82d68ad1dcf8d3012b4f9d01029d53b59bca18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 27 Dec 2022 19:10:47 +0100 Subject: [PATCH] Fixed #1920 Slower decompilation (returnType method optimization) --- CHANGELOG.md | 2 ++ .../abc/avm2/model/operations/AddAVM2Item.java | 18 +++++++++--------- .../model/operations/MultiplyAVM2Item.java | 8 +++++--- .../model/operations/SubtractAVM2Item.java | 14 ++++++++------ 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1547f267a..b25fdd18d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java index 172998fc9..90755f3af 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java @@ -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; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java index 673422b3c..13d744c45 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java @@ -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; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java index 111418998..b8e01ec87 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java @@ -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; }