From e22669d377e475da962d6ed38cd16e1dabf2bcb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 24 Nov 2022 22:38:31 +0100 Subject: [PATCH] Show convert instruction when needed - int(xx), String(xx), etc.... --- .../decompiler/flash/abc/avm2/AVM2Code.java | 2 +- .../executing/CallPropLexIns.java | 21 ++++++++++- .../executing/CallPropVoidIns.java | 19 +++++++++- .../executing/CallPropertyIns.java | 19 +++++++++- .../instructions/other/GetGlobalSlotIns.java | 19 +++++++++- .../avm2/instructions/other/GetLexIns.java | 24 ++++++++++++- .../instructions/other/GetPropertyIns.java | 24 ++++++++++++- .../avm2/instructions/other/GetSlotIns.java | 19 +++++++++- .../instructions/other/InitPropertyIns.java | 24 ++++++++++++- .../instructions/other/SetPropertyIns.java | 22 +++++++++++- .../avm2/instructions/other/SetSlotIns.java | 19 +++++++++- .../abc/avm2/model/CallPropertyAVM2Item.java | 7 ++-- .../flash/abc/avm2/model/ConvertAVM2Item.java | 30 ++++++++++++++-- .../abc/avm2/model/DecrementAVM2Item.java | 13 ++++++- .../abc/avm2/model/FloatValueAVM2Item.java | 2 +- .../flash/abc/avm2/model/GetLexAVM2Item.java | 7 ++-- .../abc/avm2/model/GetPropertyAVM2Item.java | 22 ++++++++++-- .../flash/abc/avm2/model/GetSlotAVM2Item.java | 7 ++-- .../abc/avm2/model/IncrementAVM2Item.java | 13 ++++++- .../abc/avm2/model/InitPropertyAVM2Item.java | 7 ++-- .../abc/avm2/model/IntegerValueAVM2Item.java | 2 +- .../abc/avm2/model/LocalRegAVM2Item.java | 3 ++ .../abc/avm2/model/SetLocalAVM2Item.java | 8 ++--- .../abc/avm2/model/SetPropertyAVM2Item.java | 16 +++++---- .../flash/abc/avm2/model/SetSlotAVM2Item.java | 11 +++--- .../abc/avm2/model/SetSuperAVM2Item.java | 3 +- .../model/clauses/DeclarationAVM2Item.java | 2 +- .../avm2/model/operations/AddAVM2Item.java | 23 ++++++++++++ .../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 ++- .../abc/avm2/model/operations/EqAVM2Item.java | 2 +- .../abc/avm2/model/operations/GeAVM2Item.java | 2 +- .../abc/avm2/model/operations/GtAVM2Item.java | 2 +- .../abc/avm2/model/operations/InAVM2Item.java | 2 +- .../model/operations/InstanceOfAVM2Item.java | 2 +- .../avm2/model/operations/IsTypeAVM2Item.java | 2 +- .../avm2/model/operations/LShiftAVM2Item.java | 4 ++- .../abc/avm2/model/operations/LtAVM2Item.java | 2 +- .../avm2/model/operations/ModuloAVM2Item.java | 4 ++- .../model/operations/MultiplyAVM2Item.java | 11 ++++++ .../avm2/model/operations/NeqAVM2Item.java | 2 +- .../avm2/model/operations/RShiftAVM2Item.java | 4 ++- .../model/operations/StrictEqAVM2Item.java | 2 +- .../model/operations/StrictNeqAVM2Item.java | 2 +- .../model/operations/SubtractAVM2Item.java | 19 ++++++++++ .../avm2/model/operations/TypeOfAVM2Item.java | 4 ++- .../model/operations/URShiftAVM2Item.java | 4 ++- .../com/jpexs/decompiler/graph/TypeItem.java | 8 +++++ .../ActionScript3ClassicAirDecompileTest.java | 34 +++++++++++------- .../ActionScript3ClassicDecompileTest.java | 18 +++++++--- ...ctionScript3CrossCompileDecompileTest.java | 10 +++--- ...ipt3CrossCompileSwfToolsDecompileTest.java | 10 +++--- .../bin/as3_cross_compile.air.swf | Bin 5472 -> 5466 bytes .../bin/as3_cross_compile.flex.swf | Bin 7374 -> 7348 bytes .../bin/as3_cross_compile.flex_apache.swf | Bin 7356 -> 7366 bytes .../bin/as3_cross_compile.swftools.swf | Bin 3112 -> 3121 bytes .../src/tests/TestTryCatchInIf2.as | 2 +- .../src/tests/TestTryFinallyReturnNested.as | 2 +- .../src/tests/TestTryFinallyReturnNested2.as | 2 +- .../src/tests/TestTryFinallyReturnVoid.as | 2 +- .../testdata/as3_new/bin/as3_new.air.swf | Bin 21226 -> 21348 bytes .../testdata/as3_new/bin/as3_new.flex.swf | Bin 27208 -> 27419 bytes libsrc/ffdec_lib/testdata/as3_new/src/Main.as | 1 + .../testdata/as3_new/src/tests/TestConvert.as | 18 ++++++++++ 67 files changed, 492 insertions(+), 93 deletions(-) create mode 100644 libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 398a9319b..ec6bcf749 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -1976,7 +1976,7 @@ public class AVM2Code implements Cloneable { Slot sl = new Slot(new NewActivationAVM2Item(null, null), abc.constants.getMultiname(traits.get(traitName).name_index)); TraitSlotConst tsc = (TraitSlotConst) traits.get(traitName); GraphTargetItem type = PropertyAVM2Item.multinameToType(tsc.type_index, abc.constants); - DeclarationAVM2Item d = new DeclarationAVM2Item(new GetLexAVM2Item(null, null, sl.multiname, abc.constants), type); + DeclarationAVM2Item d = new DeclarationAVM2Item(new GetLexAVM2Item(null, null, sl.multiname, abc.constants, type), type); declaredSlotsDec.add(d); declaredSlots.add(sl); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropLexIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropLexIns.java index 2106b1070..7974dac8d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropLexIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropLexIns.java @@ -22,10 +22,12 @@ import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.flash.ecma.NotCompileTime; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -79,7 +81,24 @@ public class CallPropLexIns extends CallPropertyIns { FullMultinameAVM2Item multiname = resolveMultiname(localData, true, stack, localData.getConstants(), multinameIndex, ins); GraphTargetItem receiver = stack.pop(); - stack.push(new CallPropertyAVM2Item(ins, localData.lineStartInstruction, false, receiver, multiname, args)); + GraphTargetItem type = TypeItem.UNBOUNDED; + + if (receiver instanceof FindPropertyAVM2Item) { + FindPropertyAVM2Item fprop = (FindPropertyAVM2Item) receiver; + if (fprop.propertyName.equals(multiname)) { + switch (multiname.resolvedMultinameName) { + case "Boolean": + case "int": + case "uint": + case "Number": + case "String": + type = new TypeItem(multiname.resolvedMultinameName); + break; + } + } + } + + stack.push(new CallPropertyAVM2Item(ins, localData.lineStartInstruction, false, receiver, multiname, args, type)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropVoidIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropVoidIns.java index 0ca538a70..6f882341e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropVoidIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropVoidIns.java @@ -24,9 +24,11 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -79,8 +81,23 @@ public class CallPropVoidIns extends InstructionDefinition { FullMultinameAVM2Item multiname = resolveMultiname(localData, true, stack, localData.getConstants(), multinameIndex, ins); GraphTargetItem receiver = stack.pop(); + GraphTargetItem type = TypeItem.UNBOUNDED; - output.add(new CallPropertyAVM2Item(ins, localData.lineStartInstruction, true, receiver, multiname, args)); + if (receiver instanceof FindPropertyAVM2Item) { + FindPropertyAVM2Item fprop = (FindPropertyAVM2Item) receiver; + if (fprop.propertyName.equals(multiname)) { + switch (multiname.resolvedMultinameName) { + case "Boolean": + case "int": + case "uint": + case "Number": + case "String": + type = new TypeItem(multiname.resolvedMultinameName); + break; + } + } + } + output.add(new CallPropertyAVM2Item(ins, localData.lineStartInstruction, true, receiver, multiname, args, type)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropertyIns.java index 76e388539..83ff2e13a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/executing/CallPropertyIns.java @@ -24,10 +24,12 @@ import com.jpexs.decompiler.flash.abc.avm2.LocalDataArea; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.flash.ecma.NotCompileTime; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -79,8 +81,23 @@ public class CallPropertyIns extends InstructionDefinition { FullMultinameAVM2Item multiname = resolveMultiname(localData, true, stack, localData.getConstants(), multinameIndex, ins); GraphTargetItem receiver = stack.pop(); + GraphTargetItem type = TypeItem.UNBOUNDED; - stack.push(new CallPropertyAVM2Item(ins, localData.lineStartInstruction, false, receiver, multiname, args)); + if (receiver instanceof FindPropertyAVM2Item) { + FindPropertyAVM2Item fprop = (FindPropertyAVM2Item) receiver; + if (fprop.propertyName.equals(multiname)) { + switch (multiname.resolvedMultinameName) { + case "Boolean": + case "int": + case "uint": + case "Number": + case "String": + type = new TypeItem(multiname.resolvedMultinameName); + break; + } + } + } + stack.push(new CallPropertyAVM2Item(ins, localData.lineStartInstruction, false, receiver, multiname, args, type)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java index 4ebf46ee4..c4b76bb1c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetGlobalSlotIns.java @@ -23,9 +23,14 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.GetSlotAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.GlobalAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.helpers.Reference; import java.util.List; @@ -45,7 +50,19 @@ public class GetGlobalSlotIns extends InstructionDefinition { GraphTargetItem obj = new GlobalAVM2Item(ins, localData.lineStartInstruction); Reference realObj = new Reference<>(null); Multiname slotname = InstructionDefinition.searchSlotName(slotIndex, localData, obj, realObj); - stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, obj, slotIndex, slotname)); + GraphTargetItem slotType = TypeItem.UNBOUNDED; + if (obj instanceof NewActivationAVM2Item) { + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst)t; + if (tsc.slot_id == slotIndex) { + slotType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + } + stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, obj, slotIndex, slotname, slotType)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetLexIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetLexIns.java index d27965ddb..921cd96f9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetLexIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetLexIns.java @@ -22,10 +22,18 @@ import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.GetLexAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; +import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @@ -41,7 +49,21 @@ public class GetLexIns extends InstructionDefinition { public void translate(AVM2LocalData localData, TranslateStack stack, AVM2Instruction ins, List output, String path) { int multinameIndex = ins.operands[0]; Multiname multiname = localData.getConstants().getMultiname(multinameIndex); - stack.push(new GetLexAVM2Item(ins, localData.lineStartInstruction, multiname, localData.getConstants())); + String multinameStr = multiname.getName(localData.abc.constants, new ArrayList<>(), true, true); + GraphTargetItem slotType = TypeItem.UNBOUNDED; + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; + if (Objects.equals( + tsc.getName(localData.abc).getName(localData.abc.constants, new ArrayList<>(), true, true), + multinameStr + )) { + slotType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + stack.push(new GetLexAVM2Item(ins, localData.lineStartInstruction, multiname, localData.getConstants(), slotType)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java index cc7499581..9cceb4423 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetPropertyIns.java @@ -29,15 +29,21 @@ import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.LocalRegAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.ecma.ArrayType; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.ObjectType; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.DuplicateItem; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Set; /** @@ -121,7 +127,23 @@ public class GetPropertyIns extends InstructionDefinition { } } } - stack.push(new GetPropertyAVM2Item(ins, localData.lineStartInstruction, obj, multiname)); + + GraphTargetItem propertyType = TypeItem.UNBOUNDED; + String multinameStr = localData.abc.constants.getMultiname(multiname.multinameIndex).getName(localData.abc.constants, new ArrayList<>(), true, true); + + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; + if (Objects.equals( + tsc.getName(localData.abc).getName(localData.abc.constants, new ArrayList<>(), true, true), + multinameStr + )) { + propertyType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + stack.push(new GetPropertyAVM2Item(ins, localData.lineStartInstruction, obj, multiname, propertyType)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java index ff86a57a4..dcf8a7ddb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/GetSlotIns.java @@ -22,9 +22,14 @@ import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.GetSlotAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.model.NewActivationAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.helpers.Reference; import java.util.List; @@ -48,7 +53,19 @@ public class GetSlotIns extends InstructionDefinition { if (realObj.getVal() != null) { obj = realObj.getVal(); } - stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objinreg, slotIndex, slotname)); + GraphTargetItem slotType = TypeItem.UNBOUNDED; + if (obj instanceof NewActivationAVM2Item) { + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst)t; + if (tsc.slot_id == slotIndex) { + slotType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + } + stack.push(new GetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objinreg, slotIndex, slotname, slotType)); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/InitPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/InitPropertyIns.java index 657798974..0d8a6ea1d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/InitPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/InitPropertyIns.java @@ -23,9 +23,15 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.model.FullMultinameAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.InitPropertyAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; +import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @@ -44,7 +50,23 @@ public class InitPropertyIns extends InstructionDefinition { GraphTargetItem val = stack.pop(); FullMultinameAVM2Item multiname = resolveMultiname(localData, true, stack, localData.getConstants(), multinameIndex, ins); GraphTargetItem obj = stack.pop(); - InitPropertyAVM2Item result = new InitPropertyAVM2Item(ins, localData.lineStartInstruction, obj, multiname, val); + + GraphTargetItem propertyType = TypeItem.UNBOUNDED; + String multinameStr = localData.abc.constants.getMultiname(multiname.multinameIndex).getName(localData.abc.constants, new ArrayList<>(), true, true); + + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; + if (Objects.equals( + tsc.getName(localData.abc).getName(localData.abc.constants, new ArrayList<>(), true, true), + multinameStr + )) { + propertyType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + InitPropertyAVM2Item result = new InitPropertyAVM2Item(ins, localData.lineStartInstruction, obj, multiname, val, propertyType); SetPropertyIns.handleCompound(localData, obj, multiname, val, output, result); output.add(result); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java index 39f2a40ee..09ab614bb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetPropertyIns.java @@ -40,8 +40,12 @@ import com.jpexs.decompiler.flash.abc.avm2.model.SetPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetTypeAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.PreDecrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.PreIncrementAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.decompiler.graph.model.DuplicateItem; import java.util.ArrayList; @@ -338,7 +342,23 @@ public class SetPropertyIns extends InstructionDefinition implements SetTypeIns } } - SetPropertyAVM2Item result = new SetPropertyAVM2Item(ins, localData.lineStartInstruction, obj, multiname, value); + GraphTargetItem propertyType = TypeItem.UNBOUNDED; + String multinameStr = localData.abc.constants.getMultiname(multiname.multinameIndex).getName(localData.abc.constants, new ArrayList<>(), true, true); + + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst) t; + if (Objects.equals( + tsc.getName(localData.abc).getName(localData.abc.constants, new ArrayList<>(), true, true), + multinameStr + )) { + propertyType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + + SetPropertyAVM2Item result = new SetPropertyAVM2Item(ins, localData.lineStartInstruction, obj, multiname, value, propertyType); handleCompound(localData, obj, multiname, value, output, result); SetTypeIns.handleResult(value, stack, output, localData, result, -1); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java index ab3af662e..646884851 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/other/SetSlotIns.java @@ -32,9 +32,13 @@ import com.jpexs.decompiler.flash.abc.avm2.model.PostIncrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetSlotAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.PreDecrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.PreIncrementAVM2Item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.PropertyAVM2Item; import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.CompoundableBinaryOp; import com.jpexs.helpers.Reference; import java.util.List; @@ -136,7 +140,20 @@ public class SetSlotIns extends InstructionDefinition implements SetTypeIns { } } - SetSlotAVM2Item result = new SetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objnoreg, slotIndex, slotname, value); + GraphTargetItem slotType = TypeItem.UNBOUNDED; + if (obj instanceof NewActivationAVM2Item) { + for (Trait t : localData.methodBody.traits.traits) { + if (t instanceof TraitSlotConst) { + TraitSlotConst tsc = (TraitSlotConst)t; + if (tsc.slot_id == slotIndex) { + slotType = PropertyAVM2Item.multinameToType(tsc.type_index, localData.abc.constants); + break; + } + } + } + } + + SetSlotAVM2Item result = new SetSlotAVM2Item(ins, localData.lineStartInstruction, obj, objnoreg, slotIndex, slotname, value, slotType); if (value.getNotCoerced() instanceof CompoundableBinaryOp) { if (!obj.hasSideEffect()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java index cd45768e6..eca6ce6bb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java @@ -44,13 +44,16 @@ public class CallPropertyAVM2Item extends AVM2Item { public List arguments; public boolean isVoid; + + public GraphTargetItem type; - public CallPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, boolean isVoid, GraphTargetItem receiver, GraphTargetItem propertyName, List arguments) { + public CallPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, boolean isVoid, GraphTargetItem receiver, GraphTargetItem propertyName, List arguments, GraphTargetItem type) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.receiver = receiver; this.propertyName = propertyName; this.arguments = arguments; this.isVoid = isVoid; + this.type = type; } @Override @@ -83,7 +86,7 @@ public class CallPropertyAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return type; } @Override 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 a58d7340d..5db3889c4 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 @@ -21,7 +21,10 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.GraphTargetVisitorInterface; +import com.jpexs.decompiler.graph.TypeItem; +import com.jpexs.decompiler.graph.model.FalseItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.TrueItem; import java.util.Objects; import java.util.Set; @@ -48,9 +51,32 @@ public class ConvertAVM2Item extends AVM2Item { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - type.toString(writer, localData).append("("); + boolean displayConvert = true; + GraphTargetItem valueReturnType = value.returnType(); + /*if (valueReturnType instanceof TypeItem) { + TypeItem ti = (TypeItem)valueReturnType; + ti.fullTypeName.toRawString() + }*/ + switch (type.toString()) { + case "Boolean": + displayConvert = !valueReturnType.equals(TypeItem.BOOLEAN); + break; + case "Number": + case "int": + case "uint": + displayConvert = !valueReturnType.equals(TypeItem.INT) && !valueReturnType.equals(TypeItem.NUMBER) && !valueReturnType.equals(TypeItem.UINT); + break; + case "String": + displayConvert = !valueReturnType.equals(TypeItem.STRING); + break; + } + if (displayConvert) { + type.toString(writer, localData).append("("); + } value.toString(writer, localData); - writer.append(")"); + if (displayConvert) { + writer.append(")"); + } return writer; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java index 04f2f60b6..9918c9404 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java @@ -62,7 +62,18 @@ public class DecrementAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + if (value.returnType().equals(TypeItem.INT)) { + return TypeItem.INT; + } + if (value.returnType().equals(TypeItem.UINT)) { + return TypeItem.UINT; + } + + if (value.returnType().equals(TypeItem.NUMBER)) { + return TypeItem.NUMBER; + } + + return TypeItem.NUMBER; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java index 403417648..b93a3f51a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java @@ -69,7 +69,7 @@ public class FloatValueAVM2Item extends NumberValueAVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return TypeItem.NUMBER; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java index e102fac76..eb8cce02d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java @@ -34,12 +34,15 @@ import java.util.Objects; public class GetLexAVM2Item extends AVM2Item implements SimpleValue { public Multiname propertyName; + + public GraphTargetItem type; private final DottedChain fullPropertyName; - public GetLexAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Multiname propertyName, AVM2ConstantPool constants) { + public GetLexAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, Multiname propertyName, AVM2ConstantPool constants, GraphTargetItem type) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.propertyName = propertyName; + this.type = type; this.fullPropertyName = propertyName.getNameWithNamespace(constants, true); } @@ -56,7 +59,7 @@ public class GetLexAVM2Item extends AVM2Item implements SimpleValue { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return type; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java index 0c2c81dc2..75d9075f4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java @@ -46,6 +46,8 @@ public class GetPropertyAVM2Item extends AVM2Item { public GraphTargetItem object; public GraphTargetItem propertyName; + + public GraphTargetItem type; @Override public void visit(GraphTargetVisitorInterface visitor) { @@ -127,10 +129,11 @@ public class GetPropertyAVM2Item extends AVM2Item { return null; } - public GetPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName) { + public GetPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName, GraphTargetItem type) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.object = object; this.propertyName = propertyName; + this.type = type; } @Override @@ -147,7 +150,22 @@ public class GetPropertyAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + if (object instanceof FindPropertyAVM2Item) { + FindPropertyAVM2Item fprop = (FindPropertyAVM2Item)object; + if (fprop.propertyName instanceof FullMultinameAVM2Item) { + FullMultinameAVM2Item fmul = (FullMultinameAVM2Item)fprop.propertyName; + if (this.propertyName.equals(fmul)) { + switch(fmul.resolvedMultinameName) { + case "NaN": + return TypeItem.NUMBER; + case "undefined": + return TypeItem.UNDEFINED; + } + } + } + } + return type; + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java index f21551242..7022fa54b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java @@ -38,13 +38,16 @@ public class GetSlotAVM2Item extends AVM2Item { public GraphTargetItem slotObject; public int slotIndex; + + public GraphTargetItem slotType; - public GetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, GraphTargetItem slotObject, int slotIndex, Multiname slotName) { + public GetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, GraphTargetItem slotObject, int slotIndex, Multiname slotName, GraphTargetItem slotType) { super(instruction, lineStartIns, PRECEDENCE_PRIMARY); this.slotName = slotName; this.scope = scope; this.slotObject = slotObject; this.slotIndex = slotIndex; + this.slotType = slotType; } @Override @@ -73,7 +76,7 @@ public class GetSlotAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return slotType; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java index 96bf0e8f3..6f1ad23b5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java @@ -62,7 +62,18 @@ public class IncrementAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + if (value.returnType().equals(TypeItem.INT)) { + return TypeItem.INT; + } + if (value.returnType().equals(TypeItem.UINT)) { + return TypeItem.UINT; + } + + if (value.returnType().equals(TypeItem.NUMBER)) { + return TypeItem.NUMBER; + } + + return TypeItem.NUMBER; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java index 4d2210b74..83ed58987 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java @@ -41,6 +41,8 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A public GraphTargetItem compoundValue; public String compoundOperator; + + public GraphTargetItem type; @Override public void visit(GraphTargetVisitorInterface visitor) { @@ -59,10 +61,11 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A this.declaration = declaration; } - public InitPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, FullMultinameAVM2Item propertyName, GraphTargetItem value) { + public InitPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, FullMultinameAVM2Item propertyName, GraphTargetItem value, GraphTargetItem type) { super(instruction, lineStartIns, PRECEDENCE_ASSIGMENT, value); this.object = object; this.propertyName = propertyName; + this.type = type; } @Override @@ -81,7 +84,7 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A @Override public GraphTargetItem getObject() { - return new GetPropertyAVM2Item(getInstruction(), getLineStartIns(), object, propertyName); + return new GetPropertyAVM2Item(getInstruction(), getLineStartIns(), object, propertyName, type); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java index de2f284cb..1dc41d108 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java @@ -148,7 +148,7 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item implements Integer @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.INT); + return TypeItem.INT; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java index 5fddc89fc..e13074690 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java @@ -131,6 +131,9 @@ public class LocalRegAVM2Item extends AVM2Item { @Override public GraphTargetItem returnType() { + if (computedValue != null) { + return computedValue.returnType(); + } return TypeItem.UNBOUNDED; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java index 1bbbbc3d3..868ba1b28 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java @@ -72,9 +72,9 @@ public class SetLocalAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assig return compoundValue.toString(writer, localData); } writer.append(" = "); - if (declaration != null && !declaration.type.equals(TypeItem.UNBOUNDED) && (value instanceof ConvertAVM2Item)) { + /*if (declaration != null && !declaration.type.equals(TypeItem.UNBOUNDED) && (value instanceof ConvertAVM2Item)) { return value.value.toString(writer, localData); - } + }*/ return value.toString(writer, localData); } @@ -141,8 +141,8 @@ public class SetLocalAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assig } @Override - public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + public GraphTargetItem returnType() { + return value.returnType(); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java index 7aef53534..e8a32f971 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java @@ -48,6 +48,8 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As public GraphTargetItem compoundValue; public String compoundOperator; + + public GraphTargetItem type; @Override public DeclarationAVM2Item getDeclaration() { @@ -73,11 +75,12 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As } } - public SetPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName, GraphTargetItem value) { + public SetPropertyAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem object, GraphTargetItem propertyName, GraphTargetItem value, GraphTargetItem type) { super(instruction, lineStartIns, PRECEDENCE_ASSIGMENT); this.object = object; - this.propertyName = propertyName; + this.propertyName = propertyName; this.value = value; + this.type = type; } @Override @@ -92,15 +95,15 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As } writer.append(" = "); - if (declaration != null && !declaration.type.equals(TypeItem.UNBOUNDED) && (value instanceof ConvertAVM2Item)) { + /*if (declaration != null && !declaration.type.equals(TypeItem.UNBOUNDED) && (value instanceof ConvertAVM2Item)) { return value.value.toString(writer, localData); - } + }*/ return value.toString(writer, localData); } @Override public GraphTargetItem getObject() { - return new GetPropertyAVM2Item(getInstruction(), getLineStartIns(), object, propertyName); + return new GetPropertyAVM2Item(getInstruction(), getLineStartIns(), object, propertyName, type); } @Override @@ -122,7 +125,8 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return value.returnType(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java index d17040182..88f1a90a2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java @@ -47,6 +47,8 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign public GraphTargetItem compoundValue; public String compoundOperator; + + public GraphTargetItem type; @Override public void visit(GraphTargetVisitorInterface visitor) { @@ -67,12 +69,13 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign this.declaration = declaration; } - public SetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, GraphTargetItem slotObject, int slotIndex, Multiname slotName, GraphTargetItem value) { + public SetSlotAVM2Item(GraphSourceItem instruction, GraphSourceItem lineStartIns, GraphTargetItem scope, GraphTargetItem slotObject, int slotIndex, Multiname slotName, GraphTargetItem value, GraphTargetItem type) { super(instruction, lineStartIns, PRECEDENCE_ASSIGMENT, value); this.slotName = slotName; this.scope = scope; this.slotObject = slotObject; this.slotIndex = slotIndex; + this.type = type; } @Override @@ -96,9 +99,9 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign return compoundValue.toString(writer, localData); } writer.append(" = "); - if (declaration != null && !declaration.type.equals(TypeItem.UNBOUNDED) && (value instanceof ConvertAVM2Item)) { + /*if (declaration != null && !declaration.type.equals(TypeItem.UNBOUNDED) && (value instanceof ConvertAVM2Item)) { return value.value.toString(writer, localData); - } + }*/ return value.toString(writer, localData); } @@ -115,7 +118,7 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign @Override public GraphTargetItem getObject() { - return new GetSlotAVM2Item(getInstruction(), getLineStartIns(), scope, slotObject, slotIndex, slotName); + return new GetSlotAVM2Item(getInstruction(), getLineStartIns(), scope, slotObject, slotIndex, slotName, type); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java index 639f1e3b8..c1adfd180 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java @@ -99,7 +99,8 @@ public class SetSuperAVM2Item extends AVM2Item implements SetTypeAVM2Item { @Override public GraphTargetItem returnType() { - return TypeItem.UNBOUNDED; + return value.returnType(); + //return TypeItem.UNBOUNDED; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java index b575b3821..539a5afa6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java @@ -106,7 +106,7 @@ public class DeclarationAVM2Item extends AVM2Item { coerType = ((ConvertAVM2Item) lti.value).type; } //strip coerce if its declared as this type - if (coerType.equals(type) && !coerType.equals(TypeItem.UNBOUNDED)) { + if ((lti.value instanceof CoerceAVM2Item) && coerType.equals(type) && !coerType.equals(TypeItem.UNBOUNDED)) { val = val.value; } srcData.declaredType = (coerType instanceof TypeItem) ? ((TypeItem) coerType).fullTypeName : DottedChain.ALL; 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 f966e2ee2..dc506d6c7 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 @@ -27,6 +27,7 @@ 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; @@ -95,6 +96,28 @@ public class AddAVM2Item extends BinaryOpItem implements CompoundableBinaryOp { @Override public GraphTargetItem returnType() { + if (leftSide.returnType().equals(TypeItem.STRING) || rightSide.returnType().equals(TypeItem.STRING)) { + return TypeItem.STRING; + } + if (leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().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)) + ) { + return TypeItem.INT; + } + + if (leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.UINT)) { + return TypeItem.UINT; + } + + if (leftSide.returnType().equals(TypeItem.NUMBER) || rightSide.returnType().equals(TypeItem.NUMBER)) { + return TypeItem.NUMBER; + } + + return new UnboundedTypeItem(); } 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 95b235750..7a8523730 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 @@ -23,6 +23,7 @@ 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; @@ -53,7 +54,8 @@ public class BitAndAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @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 0e8066438..687c5a9c9 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 @@ -23,6 +23,7 @@ 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,7 @@ public class BitNotAVM2Item extends UnaryOpItem { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } } 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 4e85982d3..b021a0f3a 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 @@ -23,6 +23,7 @@ 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; @@ -53,7 +54,8 @@ public class BitOrAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @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 3077043a7..f82eef542 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 @@ -23,6 +23,7 @@ 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; @@ -53,7 +54,8 @@ public class BitXorAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @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 5d04008f1..c42a5ef1e 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 @@ -24,6 +24,7 @@ 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; @@ -83,7 +84,8 @@ public class DivideAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.NUMBER; + //return new UnboundedTypeItem(); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java index 7a2855c6d..6212c96f8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java @@ -71,7 +71,7 @@ public class EqAVM2Item extends BinaryOpItem implements LogicalOpItem, IfConditi @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java index 4d5d63835..4d8859b4f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java @@ -77,7 +77,7 @@ public class GeAVM2Item extends BinaryOpItem implements LogicalOpItem, IfConditi @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java index 7e9ed28a0..9aa3d78a2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java @@ -77,7 +77,7 @@ public class GtAVM2Item extends BinaryOpItem implements LogicalOpItem, IfConditi @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java index 47cf38606..5f2d04315 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java @@ -48,7 +48,7 @@ public class InAVM2Item extends BinaryOpItem { @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java index 4de9196e7..43efc8720 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java @@ -48,7 +48,7 @@ public class InstanceOfAVM2Item extends BinaryOpItem { @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java index c57f99eee..96c368fa4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java @@ -48,7 +48,7 @@ public class IsTypeAVM2Item extends BinaryOpItem { @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @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 6c30b31e5..ac86ba878 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 @@ -23,6 +23,7 @@ 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; @@ -53,7 +54,8 @@ public class LShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java index 7bac0e72f..c9b3ad8cc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java @@ -77,7 +77,7 @@ public class LtAVM2Item extends BinaryOpItem implements LogicalOpItem, IfConditi @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @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 b029ad44c..4f7291db5 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 @@ -24,6 +24,7 @@ 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; @@ -81,7 +82,8 @@ public class ModuloAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @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 d0182865b..63864d7b1 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 @@ -24,6 +24,7 @@ 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; @@ -77,6 +78,16 @@ public class MultiplyAVM2Item extends BinaryOpItem implements CompoundableBinary @Override public GraphTargetItem returnType() { + if (leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().equals(TypeItem.INT)) { + return TypeItem.INT; + } + if (leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.UINT)) { + return TypeItem.UINT; + } + if (leftSide.returnType().equals(TypeItem.NUMBER) || rightSide.returnType().equals(TypeItem.NUMBER)) { + return TypeItem.NUMBER; + } + return new UnboundedTypeItem(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java index 0397ce6b6..0bcb11524 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java @@ -71,7 +71,7 @@ public class NeqAVM2Item extends BinaryOpItem implements LogicalOpItem, IfCondit @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override 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 623f2a87b..dbc6e0cd9 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 @@ -23,6 +23,7 @@ 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; @@ -53,7 +54,8 @@ public class RShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryOp @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java index 79815f532..43045b790 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java @@ -74,7 +74,7 @@ public class StrictEqAVM2Item extends BinaryOpItem implements LogicalOpItem, IfC @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java index a8b25e332..7f8540f9d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java @@ -74,7 +74,7 @@ public class StrictNeqAVM2Item extends BinaryOpItem implements LogicalOpItem, If @Override public GraphTargetItem returnType() { - return new TypeItem(DottedChain.BOOLEAN); + return TypeItem.BOOLEAN; } @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 3c309ae7d..b394f489a 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 @@ -25,6 +25,7 @@ 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; @@ -86,6 +87,24 @@ public class SubtractAVM2Item extends BinaryOpItem implements CompoundableBinary @Override public GraphTargetItem returnType() { + if (leftSide.returnType().equals(TypeItem.INT) && rightSide.returnType().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)) + ) { + return TypeItem.INT; + } + + if (leftSide.returnType().equals(TypeItem.UINT) && rightSide.returnType().equals(TypeItem.UINT)) { + return TypeItem.INT; + } + + if (leftSide.returnType().equals(TypeItem.NUMBER) || rightSide.returnType().equals(TypeItem.NUMBER)) { + return TypeItem.NUMBER; + } + return new UnboundedTypeItem(); } 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 f0b8ce024..335bc6c3b 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 @@ -25,6 +25,7 @@ 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; @@ -81,6 +82,7 @@ public class TypeOfAVM2Item extends UnaryOpItem { @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.STRING; + //return new UnboundedTypeItem(); } } 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 29bae97d5..56f4190e8 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 @@ -23,6 +23,7 @@ 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; @@ -53,7 +54,8 @@ public class URShiftAVM2Item extends BinaryOpItem implements CompoundableBinaryO @Override public GraphTargetItem returnType() { - return new UnboundedTypeItem(); + return TypeItem.INT; //? + //return new UnboundedTypeItem(); } @Override 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 8b6d44833..8663c2787 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/TypeItem.java @@ -35,6 +35,14 @@ public class TypeItem extends GraphTargetItem { public static TypeItem BOOLEAN = new TypeItem(DottedChain.BOOLEAN); public static TypeItem STRING = new TypeItem(DottedChain.STRING); + + public static TypeItem NUMBER = new TypeItem(DottedChain.NUMBER); + + public static TypeItem INT = new TypeItem(DottedChain.INT); + + public static TypeItem UINT = new TypeItem(DottedChain.UINT); + + public static TypeItem UNDEFINED = new TypeItem(DottedChain.UNDEFINED); public static TypeItem ARRAY = new TypeItem(DottedChain.ARRAY); 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 eb5128c90..e6a8fdc2a 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 = f(1,3);\r\n", + + "var b:int = int(f(1,3));\r\n", false); } @@ -76,7 +76,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var extraLine:Boolean = false;\r\n" + "var r:int = 7;\r\n" + "var t:int = 0;\r\n" - + "t = this.getInt();\r\n" + + "t = int(this.getInt());\r\n" + "if(t + 1 < g.length)\r\n" + "{\r\n" + "t++;\r\n" @@ -214,6 +214,16 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile false); } + @Test + public void testConvert() { + decompileMethod("classic_air", "testConvert", "var s:String = \"a\";\r\n" + + "var i:int = int(s);\r\n" + + "var j:int = int(n);\r\n" + + "s = String(j);\r\n" + + "s = ns;\r\n", + false); + } + @Test public void testDecl2() { decompileMethod("classic_air", "testDecl2", "var k:int = 0;\r\n" @@ -237,7 +247,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var vint:int = 0;\r\n" + "var vuint:uint = 0;\r\n" + "var vclass:TestClass1 = null;\r\n" - + "var vnumber:* = NaN;\r\n" + + "var vnumber:Number = NaN;\r\n" + "var vobject:Object = null;\r\n" + "vall = 6;\r\n" + "vstr = \"hello\";\r\n" @@ -270,7 +280,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testDeobfuscation() { - decompileMethod("classic_air", "testDeobfuscation", "var r:int = Math.random();\r\n" + decompileMethod("classic_air", "testDeobfuscation", "var r:int = int(Math.random());\r\n" + "if(r > 5)\r\n" + "{\r\n" + "trace(\"A\");\r\n" @@ -428,7 +438,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile + "var a:int = 4;\r\n" + "var b:int = 7;\r\n" + "var c:int = 9;\r\n" - + "for(i = uint(0); i < len; x = a > 4 && b < 2 || c > 10)\r\n" + + "for(i = 0; i < len; x = a > 4 && b < 2 || c > 10)\r\n" + "{\r\n" + "c = 1;\r\n" + "if(c == 2)\r\n" @@ -559,7 +569,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile decompileMethod("classic_air", "testForGoto", "var i:* = 0;\r\n" + "var c:int = 0;\r\n" + "var len:int = 5;\r\n" - + "for(i = uint(0); i < len; i++)\r\n" + + "for(i = 0; i < len; i++)\r\n" + "{\r\n" + "c = 1;\r\n" + "if(c == 2)\r\n" @@ -842,7 +852,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile decompileMethod("classic_air", "testGotos7", "var i:int = 0;\r\n" + "for(i = 0; i < 10; i++)\r\n" + "{\r\n" - + "switch(int(i))\r\n" + + "switch(i)\r\n" + "{\r\n" + "case 0:\r\n" + "trace(\"zero\");\r\n" @@ -899,7 +909,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testIfFinally() { - decompileMethod("classic_air", "testIfFinally", "var a:int = Math.random();\r\n" + decompileMethod("classic_air", "testIfFinally", "var a:int = int(Math.random());\r\n" + "if(a == 5)\r\n" + "{\r\n" + "try\r\n" @@ -969,7 +979,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testIgnoreAndOr() { - decompileMethod("classic_air", "testIgnoreAndOr", "var k:int = Math.random();\r\n" + decompileMethod("classic_air", "testIgnoreAndOr", "var k:int = int(Math.random());\r\n" + "if(k > 5)\r\n" + "{\r\n" + "trace(\"A\");\r\n" @@ -1184,7 +1194,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testMissingDefault() { decompileMethod("classic_air", "testMissingDefault", "var jj:int = 1;\r\n" - + "switch(int(jj) - 1)\r\n" + + "switch(jj - 1)\r\n" + "{\r\n" + "case 0:\r\n" + "jj = 1;\r\n" @@ -1462,7 +1472,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testTryIf() { - decompileMethod("classic_air", "testTryIf", "var a:int = Math.random();\r\n" + decompileMethod("classic_air", "testTryIf", "var a:int = int(Math.random());\r\n" + "try\r\n" + "{\r\n" + "if(a > 5 && a < 50)\r\n" @@ -1572,7 +1582,7 @@ public class ActionScript3ClassicAirDecompileTest extends ActionScript3Decompile @Test public void testUsagesTry() { decompileMethod("classic_air", "testUsagesTry", "var k:int = 5;\r\n" - + "switch(int(k))\r\n" + + "switch(k)\r\n" + "{\r\n" + "case 0:\r\n" + "trace(\"1\");\r\n" 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 e5df84a7f..d3602caac 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 = f(1,3);\r\n", + + "var b:int = int(f(1,3));\r\n", false); } @@ -76,7 +76,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes + "var extraLine:Boolean = false;\r\n" + "var r:int = 7;\r\n" + "var t:int = 0;\r\n" - + "t = this.getInt();\r\n" + + "t = int(this.getInt());\r\n" + "if(t + 1 < g.length)\r\n" + "{\r\n" + "t++;\r\n" @@ -213,6 +213,16 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes false); } + @Test + public void testConvert() { + decompileMethod("classic", "testConvert", "var s:String = \"a\";\r\n" + + "var i:int = int(s);\r\n" + + "var j:int = int(this.n);\r\n" + + "s = String(j);\r\n" + + "s = this.ns;\r\n", + false); + } + @Test public void testDecl2() { decompileMethod("classic", "testDecl2", "var k:int = 0;\r\n" @@ -269,7 +279,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testDeobfuscation() { - decompileMethod("classic", "testDeobfuscation", "var r:int = Math.random();\r\n" + decompileMethod("classic", "testDeobfuscation", "var r:int = int(Math.random());\r\n" + "if(r > 5)\r\n" + "{\r\n" + "trace(\"A\");\r\n" @@ -964,7 +974,7 @@ public class ActionScript3ClassicDecompileTest extends ActionScript3DecompileTes @Test public void testIgnoreAndOr() { - decompileMethod("classic", "testIgnoreAndOr", "var k:int = Math.random();\r\n" + decompileMethod("classic", "testIgnoreAndOr", "var k:int = int(Math.random());\r\n" + "if(k > 5)\r\n" + "{\r\n" + "trace(\"A\");\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java index 9c30f4d83..3839c4c2d 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileDecompileTest.java @@ -79,7 +79,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi @Test(dataProvider = "swfNamesProvider") public void testTryCatchInIf(String swfUsed) { - decompileMethod(swfUsed, "testTryCatchInIf", "var a:int = Math.random();\r\n" + decompileMethod(swfUsed, "testTryCatchInIf", "var a:int = int(Math.random());\r\n" + "if(a > 10)\r\n" + "{\r\n" + "try\r\n" @@ -96,7 +96,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi @Test(dataProvider = "swfNamesProvider") public void testTryCatchInIf2(String swfUsed) { - decompileMethod(swfUsed, "testTryCatchInIf2", "var a:int = Math.random();\r\n" + decompileMethod(swfUsed, "testTryCatchInIf2", "var a:int = int(Math.random());\r\n" + "if(a > 10)\r\n" + "{\r\n" + "try\r\n" @@ -744,7 +744,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi @Test(dataProvider = "swfNamesProvider") public void testTryFinallyReturnNested(String swfUsed) { - decompileMethod(swfUsed, "testTryFinallyReturnNested", "var a:int = Math.random() * 5;\r\n" + decompileMethod(swfUsed, "testTryFinallyReturnNested", "var a:int = int(Math.random() * 5);\r\n" + "try\r\n" + "{\r\n" + "trace(\"before try2\");\r\n" @@ -776,7 +776,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi @Test(dataProvider = "swfNamesProvider") public void testTryFinallyReturnNested2(String swfUsed) { - decompileMethod(swfUsed, "testTryFinallyReturnNested2", "var a:int = Math.random() * 5;\r\n" + decompileMethod(swfUsed, "testTryFinallyReturnNested2", "var a:int = int(Math.random() * 5);\r\n" + "try\r\n" + "{\r\n" + "try\r\n" @@ -828,7 +828,7 @@ public class ActionScript3CrossCompileDecompileTest extends ActionScript3Decompi @Test(dataProvider = "swfNamesProvider") public void testTryFinallyReturnVoid(String swfUsed) { - decompileMethod(swfUsed, "testTryFinallyReturnVoid", "var a:int = Math.random() * 5;\r\n" + decompileMethod(swfUsed, "testTryFinallyReturnVoid", "var a:int = int(Math.random() * 5);\r\n" + "trace(\"before try\");\r\n" + "try\r\n" + "{\r\n" diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java index 8da71e1d2..04b345181 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/as3decompile/ActionScript3CrossCompileSwfToolsDecompileTest.java @@ -70,7 +70,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript @Test public void testTryCatchInIf() { - decompileMethod("swftools", "testTryCatchInIf", "var _loc1_:int = Math.random();\r\n" + decompileMethod("swftools", "testTryCatchInIf", "var _loc1_:int = int(Math.random());\r\n" + "if(_loc1_ > 10)\r\n" + "{\r\n" + "try\r\n" @@ -87,7 +87,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript @Test public void testTryCatchInIf2() { - decompileMethod("swftools", "testTryCatchInIf2", "var _loc1_:int = Math.random();\r\n" + decompileMethod("swftools", "testTryCatchInIf2", "var _loc1_:* = int(Math.random());\r\n" + "if(_loc1_ > 10)\r\n" + "{\r\n" + "try\r\n" @@ -762,7 +762,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript @Test public void testTryFinallyReturnNested() { - decompileMethod("swftools", "testTryFinallyReturnNested", "var _loc1_:int = Math.random() * 5;\r\n" + decompileMethod("swftools", "testTryFinallyReturnNested", "var _loc1_:* = int(Math.random() * 5);\r\n" + "try\r\n" + "{\r\n" + "trace(\"before try2\");\r\n" @@ -803,7 +803,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript @Test public void testTryFinallyReturnNested2() { - decompileMethod("swftools", "testTryFinallyReturnNested2", "var _loc1_:int = Math.random() * 5;\r\n" + decompileMethod("swftools", "testTryFinallyReturnNested2", "var _loc1_:* = int(Math.random() * 5);\r\n" + "try\r\n" + "{\r\n" + "try\r\n" @@ -870,7 +870,7 @@ public class ActionScript3CrossCompileSwfToolsDecompileTest extends ActionScript @Test public void testTryFinallyReturnVoid() { - decompileMethod("swftools", "testTryFinallyReturnVoid", "var _loc1_:int = Math.random() * 5;\r\n" + decompileMethod("swftools", "testTryFinallyReturnVoid", "var _loc1_:* = int(Math.random() * 5);\r\n" + "trace(\"before try\");\r\n" + "try\r\n" + "{\r\n" diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.air.swf index 24bf677b936b3ae4c3bc0d4230bb176bc7da2490..cdf76a132ea931609e79c5c7254074568d9301c7 100644 GIT binary patch literal 5466 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 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex.swf index 14e59fb6c9f4beb73eec7e58536ea906fcd242c4..faca62b3b5d86a3c88074302f294a8f4b8fd47ff 100644 GIT binary patch literal 7348 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 literal 7374 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 A2mk;8 diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex_apache.swf b/libsrc/ffdec_lib/testdata/as3_cross_compile/bin/as3_cross_compile.flex_apache.swf index d5b97bbb328db6e3453cdcf2b12a9c3e4f2fa477..c0cc273f0424e43dbf5f30a6bbc1061cc0ee7089 100644 GIT binary patch literal 7366 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 literal 7356 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 L*e3r2Ti*eee(eb9 literal 3112 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 10) { diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested.as index baf378ca0..eb35a6f4d 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested.as @@ -9,7 +9,7 @@ package tests public function run() : String { - var a:int = Math.random() * 5; + var a:int = int(Math.random() * 5); try { trace("before try2"); diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested2.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested2.as index 27c44ea9c..24805ba00 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested2.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnNested2.as @@ -10,7 +10,7 @@ package tests public function run() : String { - var a:int = Math.random() * 5; + var a:int = int(Math.random() * 5); try { try diff --git a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnVoid.as b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnVoid.as index b5f57ccb9..1fc103c61 100644 --- a/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnVoid.as +++ b/libsrc/ffdec_lib/testdata/as3_cross_compile/src/tests/TestTryFinallyReturnVoid.as @@ -9,7 +9,7 @@ package tests public function run() : void { - var a:int = Math.random() * 5; + var a:int = int(Math.random() * 5); trace("before try"); try { 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 f60c1c9df46797b3c70d101d8df725547101ae9c..f7d28ee03fc08745404de0c9f233edecfaa1dcc3 100644 GIT binary patch literal 21348 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 ZM^TMp_CaVVEyjPfRho&&{|Dj^*wElW;+y~g diff --git a/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf b/libsrc/ffdec_lib/testdata/as3_new/bin/as3_new.flex.swf index 9b25bd7558d7389ee4bfe6335bc90159afbcdd6d..98a94258cdce86bc827f55dd3219b8b5a44e9f12 100644 GIT binary patch delta 26714 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

-RRn?w4*?ic>ccN3r?Fz0cYE4p-81szLmw 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 BMJxaS delta 26589 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 diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as index d4840aeda..e301b87ab 100644 --- a/libsrc/ffdec_lib/testdata/as3_new/src/Main.as +++ b/libsrc/ffdec_lib/testdata/as3_new/src/Main.as @@ -22,6 +22,7 @@ package TestCatchFinally; TestChain2; TestChainedAssignments; + TestConvert; TestComplexExpressions; TestContinueLevels; TestComma; diff --git a/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as new file mode 100644 index 000000000..5db7b50b6 --- /dev/null +++ b/libsrc/ffdec_lib/testdata/as3_new/src/tests/TestConvert.as @@ -0,0 +1,18 @@ +package tests +{ + + public class TestConvert + { + private var n:int = 1; + private var ns:String = "b"; + + public function run():void + { + var s:String = "a"; + var i:int = int(s); + var j:int = n; + s = String(j); + s = ns; + } + } +}