From 9e8d00edba8a350a874cb4018f7808b88ac4bc0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 26 Nov 2022 14:18:08 +0100 Subject: [PATCH] Fixed #1888 Casts in binary operations, not casting any type --- .../flash/abc/avm2/model/CoerceAVM2Item.java | 4 ++ .../flash/abc/avm2/model/ConvertAVM2Item.java | 11 +++-- .../avm2/model/operations/AddAVM2Item.java | 4 +- .../avm2/model/operations/BitAndAVM2Item.java | 4 +- .../avm2/model/operations/BitNotAVM2Item.java | 4 +- .../avm2/model/operations/BitOrAVM2Item.java | 4 +- .../avm2/model/operations/BitXorAVM2Item.java | 4 +- .../avm2/model/operations/DivideAVM2Item.java | 4 +- .../avm2/model/operations/LShiftAVM2Item.java | 4 +- .../avm2/model/operations/ModuloAVM2Item.java | 4 +- .../model/operations/MultiplyAVM2Item.java | 4 +- .../avm2/model/operations/NegAVM2Item.java | 5 +- .../avm2/model/operations/RShiftAVM2Item.java | 4 +- .../model/operations/SubtractAVM2Item.java | 4 +- .../avm2/model/operations/TypeOfAVM2Item.java | 4 +- .../model/operations/URShiftAVM2Item.java | 4 +- .../parser/script/AVM2SourceGenerator.java | 4 +- .../parser/script/ActionScript3Parser.java | 10 ++-- .../abc/avm2/parser/script/ClassAVM2Item.java | 5 +- .../avm2/parser/script/InterfaceAVM2Item.java | 5 +- .../abc/avm2/parser/script/NameAVM2Item.java | 46 ++++++++---------- .../avm2/parser/script/PackageAVM2Item.java | 5 +- .../flash/action/model/ActionItem.java | 4 +- .../model/operations/AndActionItem.java | 4 +- .../model/operations/BitAndActionItem.java | 4 +- .../model/operations/BitOrActionItem.java | 4 +- .../model/operations/BitXorActionItem.java | 4 +- .../model/operations/DivideActionItem.java | 4 +- .../jpexs/decompiler/graph/DottedChain.java | 2 + .../decompiler/graph/GraphTargetItem.java | 4 +- .../decompiler/graph/TypeFunctionItem.java | 2 +- .../com/jpexs/decompiler/graph/TypeItem.java | 4 ++ .../decompiler/graph/model/TernarOpItem.java | 2 +- .../graph/model/UnboundedTypeItem.java | 2 +- .../ActionScript3AssembledDecompileTest.java | 2 +- .../ActionScript3ClassicAirDecompileTest.java | 14 ++++-- .../ActionScript3ClassicDecompileTest.java | 10 ++-- .../testdata/as3_new/bin/as3_new.air.swf | Bin 21487 -> 21513 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 27659 -> 27699 bytes .../testdata/as3_new/src/tests/TestConvert.as | 7 ++- 40 files changed, 124 insertions(+), 96 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index 62efc562a..751135abe 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java @@ -30,6 +30,7 @@ import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; import java.util.Objects; import java.util.Set; @@ -101,6 +102,9 @@ public class CoerceAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { + if (typeObj instanceof UnboundedTypeItem) { + return typeObj; + } return new TypeItem(typeObj.toString()); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java index 5db3889c4..652ce7ad6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java @@ -59,15 +59,20 @@ public class ConvertAVM2Item extends AVM2Item { }*/ switch (type.toString()) { case "Boolean": - displayConvert = !valueReturnType.equals(TypeItem.BOOLEAN); + displayConvert = !valueReturnType.equals(TypeItem.BOOLEAN) && + !valueReturnType.equals(TypeItem.UNBOUNDED); break; case "Number": case "int": case "uint": - displayConvert = !valueReturnType.equals(TypeItem.INT) && !valueReturnType.equals(TypeItem.NUMBER) && !valueReturnType.equals(TypeItem.UINT); + displayConvert = !valueReturnType.equals(TypeItem.INT) && + !valueReturnType.equals(TypeItem.NUMBER) && + !valueReturnType.equals(TypeItem.UINT) && + !valueReturnType.equals(TypeItem.UNBOUNDED); break; case "String": - displayConvert = !valueReturnType.equals(TypeItem.STRING); + displayConvert = !valueReturnType.equals(TypeItem.STRING) && + !valueReturnType.equals(TypeItem.UNBOUNDED); break; } if (displayConvert) { 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 dc506d6c7..94574f55b 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 @@ -31,7 +31,7 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -118,7 +118,7 @@ public class AddAVM2Item extends BinaryOpItem implements CompoundableBinaryOp { } - return new UnboundedTypeItem(); + return TypeItem.NUMBER; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java index 7a8523730..e766ef3b7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java @@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class BitAndAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java index 687c5a9c9..b17e76d25 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java @@ -25,7 +25,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.UnaryOpItem; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.List; /** @@ -53,6 +53,6 @@ public class BitNotAVM2Item extends UnaryOpItem { @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java index b021a0f3a..032ebf094 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java @@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class BitOrAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java index f82eef542..5ab190203 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java @@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class BitXorAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java index c42a5ef1e..88b219a6e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java @@ -28,7 +28,7 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -85,7 +85,7 @@ public class DivideAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.NUMBER; - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java index ac86ba878..ec268074b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java @@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class LShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java index 4f7291db5..b16be1a31 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java @@ -28,7 +28,7 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -83,7 +83,7 @@ public class ModuloAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override 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 63864d7b1..1f444ab2a 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 @@ -28,7 +28,7 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -88,7 +88,7 @@ public class MultiplyAVM2Item extends BinaryOpItem implements CompoundableBinary return TypeItem.NUMBER; } - return new UnboundedTypeItem(); + return TypeItem.NUMBER; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java index 94635398f..cdf49d90b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java @@ -23,8 +23,9 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.UnaryOpItem; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.List; /** @@ -51,6 +52,6 @@ public class NegAVM2Item extends UnaryOpItem { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java index dbc6e0cd9..6379333b4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java @@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class RShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override 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 b394f489a..ee9dd9da8 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 @@ -29,7 +29,7 @@ import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -105,7 +105,7 @@ public class SubtractAVM2Item extends BinaryOpItem implements CompoundableBinary return TypeItem.NUMBER; } - return new UnboundedTypeItem(); + return TypeItem.NUMBER; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java index 335bc6c3b..f77a73bd2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java @@ -27,7 +27,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.UnaryOpItem; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.List; import java.util.Set; @@ -83,6 +83,6 @@ public class TypeOfAVM2Item extends UnaryOpItem { @Override public GraphTargetItem returnType() { return TypeItem.STRING; - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java index 56f4190e8..c48b215b7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java @@ -26,7 +26,7 @@ import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class URShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryO @Override public GraphTargetItem returnType() { return TypeItem.INT; //? - //return new UnboundedTypeItem(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index fd18f2419..2dd1b8fa7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -101,7 +101,7 @@ import com.jpexs.decompiler.graph.model.PushItem; import com.jpexs.decompiler.graph.model.SwitchItem; import com.jpexs.decompiler.graph.model.TernarOpItem; import com.jpexs.decompiler.graph.model.TrueItem; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import com.jpexs.decompiler.graph.model.WhileItem; import com.jpexs.helpers.Reference; import java.io.ByteArrayOutputStream; @@ -1523,7 +1523,7 @@ public class AVM2SourceGenerator implements SourceGenerator { } public int typeName(SourceGeneratorLocalData localData, GraphTargetItem type) throws CompilationException { - if (type instanceof UnboundedTypeItem) { + if (type.equals(TypeItem.UNBOUNDED)) { return 0; } if (("" + type).equals("*")) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java index af60a48a7..b0c7d7c70 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScript3Parser.java @@ -113,7 +113,7 @@ import com.jpexs.decompiler.graph.model.PushItem; import com.jpexs.decompiler.graph.model.SwitchItem; import com.jpexs.decompiler.graph.model.TernarOpItem; import com.jpexs.decompiler.graph.model.TrueItem; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import com.jpexs.decompiler.graph.model.WhileItem; import com.jpexs.helpers.Helper; import com.jpexs.helpers.Reference; @@ -174,7 +174,7 @@ public class ActionScript3Parser { private GraphTargetItem type(List> allOpenedNamespaces, TypeItem thisType, NamespaceItem pkg, Reference needsActivation, List importedClasses, List openedNamespaces, List variables) throws IOException, AVM2ParseException, InterruptedException { ParsedSymbol s = lex(); if (s.type == SymbolType.MULTIPLY) { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } else if (s.type == SymbolType.VOID) { return new TypeItem(DottedChain.VOID); } else { @@ -531,7 +531,7 @@ public class ActionScript3Parser { paramTypes.add(currentType = type(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, variables)); s = lex(); } else { - paramTypes.add(currentType = new UnboundedTypeItem()); + paramTypes.add(currentType = TypeItem.UNBOUNDED); } if (s.type == SymbolType.ASSIGN) { GraphTargetItem currentValue = expression(allOpenedNamespaces, thisType, pkg, new Reference<>(false), importedClasses, openedNamespaces, null, isMethod, isMethod, isMethod, variables, false); @@ -554,7 +554,7 @@ public class ActionScript3Parser { if (s.type == SymbolType.COLON) { retType = type(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, variables); } else { - retType = new UnboundedTypeItem(); + retType = TypeItem.UNBOUNDED; lexer.pushback(s); } List body = null; @@ -1492,7 +1492,7 @@ public class ActionScript3Parser { type = type(allOpenedNamespaces, thisType, pkg, needsActivation, importedClasses, openedNamespaces, variables); s = lex(); } else { - type = new UnboundedTypeItem(); + type = TypeItem.UNBOUNDED; } if (s.type == SymbolType.ASSIGN) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java index 07c91383c..fb1f9923b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java @@ -22,9 +22,10 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -125,6 +126,6 @@ public class ClassAVM2Item extends AVM2Item implements Block { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); //FIXME + return TypeItem.UNBOUNDED; //FIXME } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java index 9618936d4..669b7ae67 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java @@ -20,8 +20,9 @@ import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.List; import java.util.Map; @@ -76,6 +77,6 @@ public class InterfaceAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); //FIXME + return TypeItem.UNBOUNDED; //FIXME } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java index 71cfa402e..aafadbd8f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java @@ -36,7 +36,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import com.jpexs.helpers.Reference; import java.util.ArrayList; import java.util.Arrays; @@ -199,30 +199,26 @@ public class NameAVM2Item extends AssignableAVM2Item { ttype = ((UnresolvedAVM2Item) ttype).resolved; } AVM2Instruction ins; - if (ttype instanceof UnboundedTypeItem) { - ins = ins(AVM2Instructions.CoerceA); - } else { - switch (ttype.toString()) { - case "int": - ins = ins(AVM2Instructions.ConvertI); - break; - case "*": - ins = ins(AVM2Instructions.CoerceA); - break; - case "String": - ins = ins(AVM2Instructions.CoerceS); - break; - case "Boolean": - ins = ins(AVM2Instructions.ConvertB); - break; - case "uint": - ins = ins(AVM2Instructions.ConvertU); - break; - default: - int type_index = AVM2SourceGenerator.resolveType(localData, ttype, ((AVM2SourceGenerator) generator).abcIndex); - ins = ins(AVM2Instructions.Coerce, type_index); - break; - } + switch (ttype.toString()) { + case "int": + ins = ins(AVM2Instructions.ConvertI); + break; + case "*": + ins = ins(AVM2Instructions.CoerceA); + break; + case "String": + ins = ins(AVM2Instructions.CoerceS); + break; + case "Boolean": + ins = ins(AVM2Instructions.ConvertB); + break; + case "uint": + ins = ins(AVM2Instructions.ConvertU); + break; + default: + int type_index = AVM2SourceGenerator.resolveType(localData, ttype, ((AVM2SourceGenerator) generator).abcIndex); + ins = ins(AVM2Instructions.Coerce, type_index); + break; } return ins; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java index 741b3c2ac..450a8a29a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PackageAVM2Item.java @@ -20,8 +20,9 @@ import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; + import java.util.ArrayList; import java.util.List; @@ -51,7 +52,7 @@ public class PackageAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); //FIXME + return TypeItem.UNBOUNDED; //FIXME } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ActionItem.java index 0e11dfa3f..96a070606 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/ActionItem.java @@ -25,8 +25,8 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -97,6 +97,6 @@ public abstract class ActionItem extends GraphTargetItem implements Serializable @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java index 29721c15c..4cb11db58 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java @@ -23,8 +23,8 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.ArrayList; import java.util.List; @@ -54,7 +54,7 @@ public class AndActionItem extends BinaryOpItem { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java index 450203bfc..0264c09cc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java @@ -23,9 +23,9 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class BitAndActionItem extends BinaryOpItem implements CompoundableBinary @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java index 84a240154..d29ee6808 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java @@ -23,9 +23,9 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.ArrayList; import java.util.List; @@ -55,7 +55,7 @@ public class BitOrActionItem extends BinaryOpItem implements CompoundableBinaryO @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java index d5b7d36d8..cff34171a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java @@ -25,10 +25,10 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.LocalData; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.ArrayList; import java.util.List; @@ -75,7 +75,7 @@ public class BitXorActionItem extends BinaryOpItem implements CompoundableBinary @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java index 356c67550..c59b057e2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java @@ -22,9 +22,9 @@ import com.jpexs.decompiler.graph.CompilationException; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; -import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.ArrayList; import java.util.List; @@ -59,7 +59,7 @@ public class DivideActionItem extends BinaryOpItem implements CompoundableBinary @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java index fadcaed60..9f53be65d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/DottedChain.java @@ -31,6 +31,8 @@ import java.util.List; public class DottedChain implements Serializable, Comparable { public static final DottedChain EMPTY = new DottedChain(true); + + public static final DottedChain UNBOUNDED = new DottedChain(new String[]{"*"}); public static final DottedChain TOPLEVEL = new DottedChain(new String[]{}); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java index 2cf4a4116..133ac8fbc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -332,13 +332,13 @@ public abstract class GraphTargetItem implements Serializable, Cloneable { public GraphTextWriter appendTry(GraphTextWriter writer, LocalData localData, String implicitCoerce) throws InterruptedException { GraphTargetItem t = this; - if (!implicitCoerce.isEmpty()) { //if implicit coerce equals explicit + /*if (!implicitCoerce.isEmpty()) { //if implicit coerce equals explicit if (t instanceof ConvertAVM2Item) { if (implicitCoerce.equals((((ConvertAVM2Item) t).type.toString()))) { t = t.value; } } - } + }*/ if (!implicitCoerce.isEmpty() && Configuration.simplifyExpressions.get()) { t = t.simplify(implicitCoerce); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeFunctionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeFunctionItem.java index 7f6c625b7..7a17285f0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeFunctionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeFunctionItem.java @@ -33,7 +33,7 @@ public class TypeFunctionItem extends GraphTargetItem { public static TypeFunctionItem ARRAY = new TypeFunctionItem("Array"); - public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem(); + public static UnboundedTypeItem UNBOUNDED = TypeItem.UNBOUNDED; public String fullTypeName; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java index 8663c2787..f8d923edb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java @@ -47,8 +47,12 @@ public class TypeItem extends GraphTargetItem { public static TypeItem ARRAY = new TypeItem(DottedChain.ARRAY); public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem(); + + public static TypeItem UNKNOWN = new TypeItem("--UNKNOWN--"); public final DottedChain fullTypeName; + + public boolean printRaw = false; public TypeItem(String s) { this(s == null ? new DottedChain(new String[]{}, new String[]{""}) : DottedChain.parseWithSuffix(s)); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java index 06f1c9e4b..3057de619 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/TernarOpItem.java @@ -102,7 +102,7 @@ public class TernarOpItem extends GraphTargetItem { && (onFalse.returnType().equals(TypeItem.NUMBER) || onFalse.returnType().equals(TypeItem.INT) || onFalse.returnType().equals(TypeItem.UINT))) { return TypeItem.NUMBER; } - return TypeItem.UNBOUNDED; + return TypeItem.UNKNOWN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java index 657c52fac..4bc2b08a5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java @@ -50,4 +50,4 @@ public class UnboundedTypeItem extends AVM2Item { public boolean hasReturnValue() { return true; } -} +} \ No newline at end of file diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java index 172ea0c2b..c9f795375 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3AssembledDecompileTest.java @@ -172,7 +172,7 @@ public class ActionScript3AssembledDecompileTest extends ActionScript3DecompileT @Test public void testSwitch() { - decompileMethod("assembled", "testSwitch", "switch(int(somevar))\r\n" + decompileMethod("assembled", "testSwitch", "switch(somevar)\r\n" + "{\r\n" + "case 0:\r\n" + "var _loc2_:String = \"X\";\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java index e017ad1be..7ed508edd 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicAirDecompileTest.java @@ -45,7 +45,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testCallLocal() { decompileMethod("classic_air", "testCallLocal", "var f:Function = getF();\r\n" - + "var b:int = int(f(1,3));\r\n", + + "var b:int = f(1,3);\r\n", false); } @@ -222,15 +222,19 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testConvert() { - decompileMethod("classic_air", "testConvert", "var s:String = \"a\";\r\n" + decompileMethod("classic_air", "testConvert", "var a:* = undefined;\r\n" + + "var s:String = \"a\";\r\n" + "var i:int = int(s);\r\n" - + "var j:int = n;\r\n" - + "s = String(j);\r\n" + + "var j:int;\r\n" + + "s = String(j = n);\r\n" + "s = ns;\r\n" + "s = String(i == 4 ? \"\" : i);\r\n" + "s = i == 4 ? \"\" : String(i);\r\n" + "s = TestConvert.TEST;\r\n" - + "i = this.TEST;\r\n", + + "i = this.TEST;\r\n" + + "i = 4 * 5;\r\n" + + "i = a * 6;\r\n" + + "i = a;\r\n", false); } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java index 2f143d7df..79183c850 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3ClassicDecompileTest.java @@ -45,7 +45,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testCallLocal() { decompileMethod("classic", "testCallLocal", "var f:Function = this.getF();\r\n" - + "var b:int = int(f(1,3));\r\n", + + "var b:int = f(1,3);\r\n", false); } @@ -221,7 +221,8 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testConvert() { - decompileMethod("classic", "testConvert", "var s:String = \"a\";\r\n" + decompileMethod("classic", "testConvert", "var a:* = undefined;\r\n" + + "var s:String = \"a\";\r\n" + "var i:int = int(s);\r\n" + "var j:int = this.n;\r\n" + "s = String(j);\r\n" @@ -229,7 +230,10 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "s = String(i == 4 ? \"\" : i);\r\n" + "s = i == 4 ? \"\" : String(i);\r\n" + "s = TestConvert.TEST;\r\n" - + "i = this.TEST;\r\n", + + "i = this.TEST;\r\n" + + "i = Number(\"4\") * 5;\r\n" + + "i = a * 6;\r\n" + + "i = a;\r\n", false); } diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.air.swf index a7f3f7775b2bdfff71eabf0e73793082dd24d2d4..e51de1116703928046efdeddfe75b13ab0f9780e 100644 GIT binary patch delta 4329 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

l?K0Ncy`bz5WgZj&WCq9 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 diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as index 315d32a21..acfc95774 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as @@ -12,9 +12,10 @@ package tests public function run():void { - var s:String = "a"; + var s:String = "a"; var i:int = int(s); var j:int = n; + var a:*; s = String(j); s = ns; @@ -23,6 +24,10 @@ package tests s = TestConvert.TEST; i = this.TEST; + + i = Number("4") * 5; + i = a * 6; + i = a; } } }