diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java index 074314bb3..d9e51d3d0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyLoadAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -42,4 +43,9 @@ public class AlchemyLoadAVM2Item extends AVM2Item { ofs.toString(writer, localData); return writer.append(") /*Alchemy*/"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java index 9641ba811..118dd5f72 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemySignExtendAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -41,4 +42,9 @@ public class AlchemySignExtendAVM2Item extends AVM2Item { value.toString(writer, localData); return writer.append(") /*Alchemy*/"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java index b9531901d..660b27c4f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/AlchemyStoreAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -45,4 +46,9 @@ public class AlchemyStoreAVM2Item extends AVM2Item { value.toString(writer, localData); return writer.append(") /*Alchemy*/"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java index 06d4d8fb8..623b44921 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ApplyTypeAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -53,4 +54,9 @@ public class ApplyTypeAVM2Item extends AVM2Item { } return writer; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java index c3bd4427b..dc3ebe6f2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/BooleanAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnValueIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushFalseIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushTrueIns; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; import java.util.Set; @@ -59,4 +59,9 @@ public class BooleanAVM2Item extends AVM2Item { new AVM2Instruction(0, value?new PushTrueIns():new PushFalseIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java index f38fb95f1..407f0389c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -60,4 +61,9 @@ public class CallAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java index d945633ca..8dd368720 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallMethodAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -49,4 +50,9 @@ public class CallMethodAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; //FIXME + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java index 50705e911..06b5dafcb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallPropertyAVM2Item.java @@ -19,12 +19,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.executing.CallPropertyIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; @@ -63,4 +63,9 @@ public class CallPropertyAVM2Item extends AVM2Item { new AVM2Instruction(0, new CallPropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName),arguments.size()}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java index 0543209ad..9d74579b3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallStaticAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -49,4 +50,9 @@ public class CallStaticAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java index 2e76d830f..8e85b7acc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CallSuperAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -55,4 +56,9 @@ public class CallSuperAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java index b25ddf9eb..170e94d2e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ClassAVM2Item.java @@ -18,6 +18,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class ClassAVM2Item extends AVM2Item { @@ -33,4 +35,9 @@ public class ClassAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(className.getName(localData.constantsAvm2, localData.fullyQualifiedNames)); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java index 07e2c39f1..9d46b847d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/CoerceAVM2Item.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.Set; @@ -80,4 +81,9 @@ public class CoerceAVM2Item extends AVM2Item { return ret; } + + @Override + public GraphTargetItem returnType() { + return new TypeItem(type); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java index 6d0ab52eb..ec0cfaaf6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructAVM2Item.java @@ -50,4 +50,9 @@ public class ConstructAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return object.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java index 1987e0911..d873ca64c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructPropAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -53,4 +54,9 @@ public class ConstructPropAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java index eee91f616..598172bfe 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConstructSuperAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -48,4 +49,9 @@ public class ConstructSuperAVM2Item extends AVM2Item { } return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java index 07e319265..1f3b962f1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ConvertAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.Set; @@ -72,4 +73,9 @@ public class ConvertAVM2Item extends AVM2Item { dependencies.add(value); return value.isCompileTime(dependencies); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem(type); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java index 1b5ba25ea..31105eef1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecLocalAVM2Item.java @@ -18,6 +18,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class DecLocalAVM2Item extends AVM2Item { @@ -34,4 +36,9 @@ public class DecLocalAVM2Item extends AVM2Item { writer.append(localRegName(localData.localRegNames, regIndex)); return writer.append("--"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java index bd3b9de32..c58594348 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DecrementAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.Set; @@ -49,4 +50,9 @@ public class DecrementAVM2Item extends AVM2Item { public Object getResult() { return EcmaScript.toNumber(value.getResult()) - 1; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java index 90b2686af..27309d6ac 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/DefaultXMLNamespace.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -39,4 +40,9 @@ public class DefaultXMLNamespace extends AVM2Item { writer.append("default xml namespace = "); return ns.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java index 58d78e58b..451e4f514 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXAttrAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -38,4 +39,9 @@ public class EscapeXAttrAVM2Item extends AVM2Item { value.toString(writer, localData); return writer.append("}"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java index 0995ff555..00d9b193c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/EscapeXElemAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -40,4 +41,9 @@ public class EscapeXElemAVM2Item extends AVM2Item { expression.toString(writer, localData); return writer.append("}"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java index 714cc2262..a20e73a0e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FilteredCheckAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -38,4 +39,9 @@ public class FilteredCheckAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return object.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java index a66554b0c..f9ac99eef 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindDefAVM2Item.java @@ -19,6 +19,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class FindDefAVM2Item extends AVM2Item { @@ -34,4 +36,9 @@ public class FindDefAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(propertyName.getNamespace(localData.constantsAvm2).getName(localData.constantsAvm2)); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java index 06f761338..0483d0101 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FindPropertyAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class FindPropertyAVM2Item extends AVM2Item { @@ -34,4 +35,9 @@ public class FindPropertyAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java index dbbda09a5..275c45776 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FloatValueAVM2Item.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; import java.util.Set; @@ -58,4 +59,9 @@ public class FloatValueAVM2Item extends NumberValueAVM2Item { new AVM2Instruction(0, new PushDoubleIns(), new int[]{((AVM2SourceGenerator)generator).abc.constants.getDoubleId(value, true)}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java index f03445e35..f27c93534 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/FullMultinameAVM2Item.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.HashMap; import java.util.List; @@ -153,4 +154,9 @@ public class FullMultinameAVM2Item extends AVM2Item { } return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java index ad1e1a760..78680b228 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetDescendantsAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class GetDescendantsAVM2Item extends AVM2Item { @@ -38,4 +39,9 @@ public class GetDescendantsAVM2Item extends AVM2Item { writer.append(".."); return multiname.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java index 21423b25d..41f985103 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetLexAVM2Item.java @@ -19,6 +19,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class GetLexAVM2Item extends AVM2Item { @@ -34,4 +36,9 @@ public class GetLexAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(propertyName.getName(localData.constantsAvm2, localData.fullyQualifiedNames)); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java index 0a197b11d..d0961be9e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetPropertyAVM2Item.java @@ -19,12 +19,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushDoubleIns; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; @@ -50,4 +50,9 @@ public class GetPropertyAVM2Item extends AVM2Item { new AVM2Instruction(0, new GetPropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName)}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java index f803202d2..94404d0d7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSlotAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class GetSlotAVM2Item extends AVM2Item { @@ -40,4 +41,9 @@ public class GetSlotAVM2Item extends AVM2Item { } return writer.append(slotName.getName(localData.constantsAvm2, localData.fullyQualifiedNames)); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java index 05ec1b6af..cd3ba4452 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/GetSuperAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class GetSuperAVM2Item extends AVM2Item { @@ -44,4 +45,9 @@ public class GetSuperAVM2Item extends AVM2Item { writer.append("super."); return propertyName.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java index cad30c678..d23ff4991 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/HasNextAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -42,4 +43,9 @@ public class HasNextAVM2Item extends AVM2Item { writer.append(" hasNext "); return object.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java index 9d07c590d..594cb1c25 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class InAVM2Item extends AVM2Item { @@ -38,4 +39,9 @@ public class InAVM2Item extends AVM2Item { writer.append(" in "); return collection.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java index ac106b001..9bbdb0b85 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncLocalAVM2Item.java @@ -18,6 +18,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class IncLocalAVM2Item extends AVM2Item { @@ -34,4 +36,9 @@ public class IncLocalAVM2Item extends AVM2Item { writer.append(localRegName(localData.localRegNames, regIndex)); return writer.append("++"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java index 3740db10c..33325eed5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IncrementAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.Set; @@ -49,4 +50,9 @@ public class IncrementAVM2Item extends AVM2Item { public Object getResult() { return EcmaScript.toNumber(value.getResult()) + 1; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java index 8eb876413..39c22600a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/InitPropertyAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, AssignmentAVM2Item { @@ -51,4 +52,9 @@ public class InitPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, A public GraphTargetItem getValue() { return value; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java index 025d235c8..e93d0dc62 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java @@ -21,12 +21,12 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushIntIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushShortIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.TypeOfIns; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; import java.util.Set; @@ -68,4 +68,9 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item { return toSourceMerge(localData, generator, ins); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java index d22dbdbb6..b404341e3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/LocalRegAVM2Item.java @@ -23,17 +23,13 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal1Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal2Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal3Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocalIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal0Ins; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal1Ins; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal2Ins; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal3Ins; -import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalIns; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.FilterAVM2Item; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; import java.util.Set; @@ -113,4 +109,9 @@ public class LocalRegAVM2Item extends AVM2Item { } return toSourceMerge(localData, generator, ins); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java index b64f75cb8..5d90d78b5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameSpaceAVM2Item.java @@ -19,6 +19,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class NameSpaceAVM2Item extends AVM2Item { @@ -34,8 +36,13 @@ public class NameSpaceAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { if (namespaceIndex == 0) { return writer.append("*"); - } + } ConstantPool constants = localData.constantsAvm2; return writer.append(constants.getNamespace(namespaceIndex).toString(constants)); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java index c414cad8e..9e67ea445 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NameValuePair.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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.TernarOpItem; @@ -45,4 +46,9 @@ public class NameValuePair extends AVM2Item { } return writer; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java index 8e5e1c102..b9c828e0a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NanAVM2Item.java @@ -18,12 +18,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushFalseIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNanIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushTrueIns; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; @@ -44,4 +44,9 @@ public class NanAVM2Item extends AVM2Item { new AVM2Instruction(0, new PushNanIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java index 5b2d2fa6e..cfeffcc85 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewActivationAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.HashMap; @@ -34,4 +35,9 @@ public class NewActivationAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("newactivation()"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java index d6c5b7d5c..91f45bee7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewArrayAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -42,4 +43,9 @@ public class NewArrayAVM2Item extends AVM2Item { } return writer.append("]"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.ARRAY; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java index 19d9def7f..7ef081fcf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewFunctionAVM2Item.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; import java.util.Stack; @@ -78,4 +79,9 @@ public class NewFunctionAVM2Item extends AVM2Item { writer.append("}"); return writer; } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Function"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java index 3165818ac..2301b987e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NewObjectAVM2Item.java @@ -18,6 +18,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -58,4 +60,9 @@ public class NewObjectAVM2Item extends AVM2Item { } return writer; } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Object"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java index d6466f12f..0b1f73604 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextNameAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -44,4 +45,9 @@ public class NextNameAVM2Item extends AVM2Item { obj.toString(writer, localData); return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java index 8a54b04d6..881300071 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NextValueAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -44,4 +45,9 @@ public class NextValueAVM2Item extends AVM2Item { obj.toString(writer, localData); return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java index 955863e20..22646bc6b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/NullAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNanIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNullIns; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; import java.util.Set; @@ -56,4 +56,9 @@ public class NullAVM2Item extends AVM2Item { new AVM2Instruction(0, new PushNullIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("null"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java index 707e54405..7291e6acc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostDecrementAVM2Item.java @@ -41,4 +41,9 @@ public class PostDecrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite public boolean hasSideEffect() { return true; } + + @Override + public GraphTargetItem returnType() { + return object.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java index 7e7371eeb..175c38d40 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/PostIncrementAVM2Item.java @@ -41,4 +41,9 @@ public class PostIncrementAVM2Item extends AVM2Item implements AssignmentAVM2Ite public boolean hasSideEffect() { return true; } + + @Override + public GraphTargetItem returnType() { + return object.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java index 79de0494b..8c77a8806 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnValueAVM2Item.java @@ -19,11 +19,11 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnValueIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.TypeOfIns; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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.ExitItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -48,4 +48,9 @@ public class ReturnValueAVM2Item extends AVM2Item implements ExitItem { new AVM2Instruction(0, new ReturnValueIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java index 1dd7309db..fbee32db4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ReturnVoidAVM2Item.java @@ -19,10 +19,11 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnVoidIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.TypeOfIns; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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.ExitItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -43,4 +44,9 @@ public class ReturnVoidAVM2Item extends AVM2Item implements ExitItem { return toSourceMerge(localData, generator, new AVM2Instruction(0, new ReturnVoidIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java index a8f60a742..807fd957c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ScriptAVM2Item.java @@ -17,6 +17,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -36,4 +38,9 @@ public class ScriptAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append("script" + scriptIndex); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java index cebda09db..c7b1d0542 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetGlobalSlotAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class SetGlobalSlotAVM2Item extends AVM2Item { @@ -49,4 +50,9 @@ public class SetGlobalSlotAVM2Item extends AVM2Item { public boolean hasSideEffect() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java index 8649b7b77..084231013 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetLocalAVM2Item.java @@ -23,13 +23,12 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal1Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal2Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal3Ins; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; @@ -87,4 +86,9 @@ public class SetLocalAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assig } return toSourceMerge(localData, generator, value, ins); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java index c4dcec113..0e13e3e53 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetPropertyAVM2Item.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.SetPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.model.clauses.AssignmentAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; @@ -27,6 +26,7 @@ import com.jpexs.decompiler.graph.GraphPart; 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 java.util.List; @@ -76,4 +76,9 @@ public class SetPropertyAVM2Item extends AVM2Item implements SetTypeAVM2Item, As new AVM2Instruction(0, new SetPropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName)}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java index cac3e1085..28e86dd08 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSlotAVM2Item.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, AssignmentAVM2Item { @@ -81,4 +82,9 @@ public class SetSlotAVM2Item extends AVM2Item implements SetTypeAVM2Item, Assign public boolean hasSideEffect() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java index af2bfbbef..ce0271b52 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/SetSuperAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphPart; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class SetSuperAVM2Item extends AVM2Item { @@ -56,4 +57,9 @@ public class SetSuperAVM2Item extends AVM2Item { public boolean hasSideEffect() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java index 3e4555013..10dc3364e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/StringAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNanIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushStringIns; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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.helpers.Helper; import java.util.List; @@ -60,4 +60,9 @@ public class StringAVM2Item extends AVM2Item { ); } + @Override + public GraphTargetItem returnType() { + return TypeItem.STRING; + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java index 1e8f60d81..214c7b04c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThisAVM2Item.java @@ -19,11 +19,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal0Ins; -import com.jpexs.decompiler.flash.abc.avm2.instructions.other.ReturnVoidIns; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; @@ -51,4 +52,9 @@ public class ThisAVM2Item extends AVM2Item { return toSourceMerge(localData, generator, new AVM2Instruction(0, new GetLocal0Ins(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java index 0b2d7e9b6..bae90d2c3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/ThrowAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class ThrowAVM2Item extends AVM2Item { @@ -34,4 +35,9 @@ public class ThrowAVM2Item extends AVM2Item { writer.append("throw "); return value.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java index eb541ec43..37d05f7dc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UndefinedAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.Set; @@ -43,4 +44,9 @@ public class UndefinedAVM2Item extends AVM2Item { public Object getResult() { return new Undefined(); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Undefined"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java index 944fe827b..3679cc7bb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/UnparsedAVM2Item.java @@ -18,6 +18,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class UnparsedAVM2Item extends AVM2Item { @@ -33,4 +35,9 @@ public class UnparsedAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(value); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java index b430bdac2..c49c16726 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; import java.util.List; @@ -58,4 +59,9 @@ public class WithAVM2Item extends AVM2Item { public boolean needsSemicolon() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java index 312b55be7..9c4721ff2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithEndAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class WithEndAVM2Item extends AVM2Item { @@ -39,4 +40,9 @@ public class WithEndAVM2Item extends AVM2Item { public boolean needsSemicolon() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java index 656e076a1..939245ba2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/WithObjectAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class WithObjectAVM2Item extends AVM2Item { @@ -34,4 +35,9 @@ public class WithObjectAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java index d7ca2c21c..d671e561c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/XMLAVM2Item.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.abc.avm2.model; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.List; @@ -46,4 +47,9 @@ public class XMLAVM2Item extends AVM2Item { } return writer; } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("XML"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java index 04e42c8a1..8de212451 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/DeclarationAVM2Item.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.SetLocalAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.SetSlotAVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -71,4 +72,9 @@ public class DeclarationAVM2Item extends AVM2Item { writer.append("var "); return assignment.toString(writer, localData); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem(type); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java index f71ce1adb..7950107c8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ExceptionAVM2Item.java @@ -19,6 +19,8 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.types.ABCException; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; public class ExceptionAVM2Item extends AVM2Item { @@ -34,4 +36,9 @@ public class ExceptionAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) { return writer.append(exception.getVarName(localData.constantsAvm2, localData.fullyQualifiedNames)); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java index 185f73734..712a3eacb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/FilterAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; /** @@ -44,4 +45,9 @@ public class FilterAVM2Item extends AVM2Item { expression.toString(writer, localData); return writer.append(")"); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java index dda583455..ded67593f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForEachInAVM2Item.java @@ -26,6 +26,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; +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.LoopItem; @@ -118,4 +119,9 @@ public class ForEachInAVM2Item extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java index f18bc0095..911b78a4c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/ForInAVM2Item.java @@ -26,6 +26,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; +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.LoopItem; @@ -118,4 +119,9 @@ public class ForInAVM2Item extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java index 0576af444..73f0af4b3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/clauses/TryAVM2Item.java @@ -17,11 +17,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.clauses; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.parser.script.ExceptionSAVM2item; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.NameAVM2Item; import com.jpexs.decompiler.flash.abc.types.ABCException; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.ContinueItem; import com.jpexs.decompiler.graph.model.LocalData; import java.util.ArrayList; @@ -31,7 +32,7 @@ public class TryAVM2Item extends AVM2Item implements Block { public List tryCommands; public List catchExceptions; - public List catchExceptions2; + public List catchExceptions2; public List> catchCommands; public List finallyCommands; @@ -137,4 +138,9 @@ public class TryAVM2Item extends AVM2Item implements Block { public boolean needsSemicolon() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java index 17fc3cfdf..561d52281 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AddAVM2Item.java @@ -27,6 +27,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class AddAVM2Item extends BinaryOpItem { @@ -71,6 +72,11 @@ public class AddAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new AddIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java index 2de324bba..861bb59dc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/AsTypeAVM2Item.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitOrIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.AsTypeIns; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; @@ -38,4 +37,11 @@ public class AsTypeAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new AsTypeIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return rightSide; + } + + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java index d4a549f3b..f64fd1a25 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitAndAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitAndIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitAndAVM2Item extends BinaryOpItem { @@ -44,4 +44,8 @@ public class BitAndAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new BitAndIns(), new int[]{}, new byte[0]) ); } + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java index a5f24745e..ffa06ace0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitNotAVM2Item.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.UnaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitNotAVM2Item extends UnaryOpItem { @@ -43,4 +44,8 @@ public class BitNotAVM2Item extends UnaryOpItem { new AVM2Instruction(0, new BitNotIns(), new int[]{}, new byte[0]) ); } + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java index e88d5dc9e..2f74b72cc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitOrAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitOrIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitOrAVM2Item extends BinaryOpItem { @@ -44,4 +44,9 @@ public class BitOrAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new BitOrIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java index 42fa66b07..3f5c664a2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/BitXorAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.BitXorIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitXorAVM2Item extends BinaryOpItem { @@ -44,4 +44,10 @@ public class BitXorAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new BitXorIns(), new int[]{}, new byte[0]) ); } + + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index ca7ef552d..072981a82 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java @@ -19,13 +19,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.DeletePropertyIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.TypeOfIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; @@ -55,4 +55,10 @@ public class DeletePropertyAVM2Item extends AVM2Item { new AVM2Instruction(0, new DeletePropertyIns(), new int[]{((AVM2SourceGenerator)generator).propertyName(propertyName)}, new byte[0]) ); } + + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java index 12cd0c856..a300d66c7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DivideAVM2Item.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.DivideIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -27,6 +26,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class DivideAVM2Item extends BinaryOpItem { @@ -71,4 +71,9 @@ public class DivideAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new DivideIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java index 77e30f0c2..c0f58369e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/EqAVM2Item.java @@ -18,14 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.EqualsIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.ExitItem; import com.jpexs.decompiler.graph.model.LogicalOpItem; import java.util.List; @@ -51,4 +50,9 @@ public class EqAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new EqualsIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java index 265ff80d0..bc3a74c34 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GeAVM2Item.java @@ -18,12 +18,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.GreaterEqualsIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -57,4 +57,9 @@ public class GeAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new GreaterEqualsIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java index a00784398..f3ca3eca0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/GtAVM2Item.java @@ -18,12 +18,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.GreaterThanIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -50,4 +50,9 @@ public class GtAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new GreaterThanIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java index 8eb0ca608..5d19fbc5b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InAVM2Item.java @@ -19,10 +19,10 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.other.InIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.InstanceOfIns; 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 java.util.List; @@ -38,4 +38,9 @@ public class InAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new InIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java index 5aa059dd4..361a05b90 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/InstanceOfAVM2Item.java @@ -18,11 +18,11 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.InstanceOfIns; 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 java.util.List; @@ -38,4 +38,9 @@ public class InstanceOfAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new InstanceOfIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java index a9341d14c..7505b4868 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/IsTypeAVM2Item.java @@ -18,11 +18,11 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.IsTypeIns; 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 java.util.List; @@ -38,4 +38,9 @@ public class IsTypeAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new IsTypeIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java index 999431d9d..c2c3fcd2f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LShiftAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.LShiftIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class LShiftAVM2Item extends BinaryOpItem { @@ -44,4 +44,10 @@ public class LShiftAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new LShiftIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java index 7e58627e0..b12b550e1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LeAVM2Item.java @@ -18,12 +18,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.LessEqualsIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -57,4 +57,9 @@ public class LeAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new LessEqualsIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java index 41801d5be..1ace3fc9b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/LtAVM2Item.java @@ -18,12 +18,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.LessThanIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -50,4 +50,9 @@ public class LtAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new LessThanIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java index 76a45535b..9fae5818a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/ModuloAVM2Item.java @@ -18,7 +18,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.ModuloIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -27,6 +26,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class ModuloAVM2Item extends BinaryOpItem { @@ -71,4 +71,9 @@ public class ModuloAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new ModuloIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java index 5dc9c8361..8d0eaa625 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/MultiplyAVM2Item.java @@ -18,8 +18,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.MultiplyIIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.MultiplyIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -28,6 +26,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class MultiplyAVM2Item extends BinaryOpItem { @@ -69,4 +68,9 @@ public class MultiplyAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new MultiplyIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java index bca5a11ac..a3ca9f37b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NegAVM2Item.java @@ -19,12 +19,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.NegateIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.types.TypeOfIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.UnaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class NegAVM2Item extends UnaryOpItem { @@ -44,4 +44,9 @@ public class NegAVM2Item extends UnaryOpItem { new AVM2Instruction(0, new NegateIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java index f4ffdd8a1..699992a2b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/NeqAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.AddIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.NotIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.EqualsIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -52,4 +52,9 @@ public class NeqAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new NotIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java index e04c692e1..b51e9b952 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreDecrementAVM2Item.java @@ -41,4 +41,9 @@ public class PreDecrementAVM2Item extends UnaryOpItem implements AssignmentAVM2I return super.toSource(localData, generator); //TODO } + @Override + public GraphTargetItem returnType() { + return value.returnType(); + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java index bb7833170..d4cda305b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/PreIncrementAVM2Item.java @@ -39,4 +39,9 @@ public class PreIncrementAVM2Item extends UnaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return super.toSource(localData, generator); //TODO } + + @Override + public GraphTargetItem returnType() { + return value.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java index 7c1e52177..d2eeed0fd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/RShiftAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.ModuloIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.RShiftIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class RShiftAVM2Item extends BinaryOpItem { @@ -44,4 +44,9 @@ public class RShiftAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new RShiftIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java index 127a60815..76405cf0b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictEqAVM2Item.java @@ -18,12 +18,12 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.ModuloIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.StrictEqualsIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -53,4 +53,9 @@ public class StrictEqAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new StrictEqualsIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java index bc5f936e8..041d0ae82 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/StrictNeqAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.ModuloIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.NotIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.comparison.StrictEqualsIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -55,4 +55,9 @@ public class StrictNeqAVM2Item extends BinaryOpItem implements LogicalOpItem { new AVM2Instruction(0, new NotIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new TypeItem("Boolean"); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java index 629ebfe8c..bc93f2db5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/SubtractAVM2Item.java @@ -19,7 +19,6 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.arithmetic.SubtractIns; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.RShiftIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; @@ -27,6 +26,7 @@ import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class SubtractAVM2Item extends BinaryOpItem { @@ -68,4 +68,9 @@ public class SubtractAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new SubtractIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java index 343ba068c..43ffe7055 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/TypeOfAVM2Item.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.UnaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; import java.util.Set; @@ -72,4 +73,9 @@ public class TypeOfAVM2Item extends UnaryOpItem { new AVM2Instruction(0, new TypeOfIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java index aa1479ef4..a8e3847d2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/URShiftAVM2Item.java @@ -18,13 +18,13 @@ package com.jpexs.decompiler.flash.abc.avm2.model.operations; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; -import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.RShiftIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.bitwise.URShiftIns; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class URShiftAVM2Item extends BinaryOpItem { @@ -44,4 +44,9 @@ public class URShiftAVM2Item extends BinaryOpItem { new AVM2Instruction(0, new URShiftIns(), new int[]{}, new byte[0]) ); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index b9a987336..66b6ebcdc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -40,7 +40,6 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushScopeIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.BooleanAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FloatValueAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.IntegerValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.NullAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.StringAVM2Item; @@ -78,6 +77,7 @@ import com.jpexs.decompiler.graph.model.NotItem; import com.jpexs.decompiler.graph.model.OrItem; import com.jpexs.decompiler.graph.model.SwitchItem; import com.jpexs.decompiler.graph.model.TernarOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import com.jpexs.decompiler.graph.model.WhileItem; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -467,10 +467,10 @@ public class AVM2SourceGenerator implements SourceGenerator { public List generate(SourceGeneratorLocalData localData, TryAVM2Item item) { List ret = new ArrayList<>(); - for (ExceptionSAVM2item e : item.catchExceptions2) { + for (NameAVM2Item e : item.catchExceptions2) { ABCException aex = new ABCException(); - aex.name_index = ident(e.name); - aex.type_index = typeName(localData,e.type); + aex.name_index = str(e.getVariableName()); + aex.type_index = typeName(localData, e.type); localData.exceptions.add(aex); //TODO } @@ -547,7 +547,6 @@ public class AVM2SourceGenerator implements SourceGenerator { return tmpReg; } - public AVM2SourceGenerator(ABC abc, List allABCs) { this.abc = abc; this.allABCs = allABCs; @@ -566,6 +565,7 @@ public class AVM2SourceGenerator implements SourceGenerator { instanceInfo.iinit_index = method(localData, new ArrayList(), new ArrayList(), new ArrayList(), new ArrayList(), name/*?? FIXME*/); } else { MethodAVM2Item m = (MethodAVM2Item) constructor; + calcRegisters(m); instanceInfo.iinit_index = method(localData, m.paramTypes, m.paramNames, m.paramValues, m.body, name/*?? FIXME*/); } @@ -573,7 +573,7 @@ public class AVM2SourceGenerator implements SourceGenerator { generateTraits(true, localData, traitItems, classInfo.static_traits); if (extendsVal != null) { - instanceInfo.super_index = typeName(localData,extendsVal); + instanceInfo.super_index = typeName(localData, extendsVal); } else if (!isInterface) { instanceInfo.super_index = abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str("Object"), namespace(Namespace.KIND_PACKAGE, ""), 0, 0, new ArrayList()), true); } @@ -599,10 +599,9 @@ public class AVM2SourceGenerator implements SourceGenerator { classInfo.cinit_index = mb.method_info; - if (!implementsStr.isEmpty()) { - for (GraphTargetItem imp : implementsStr) { - instanceInfo.interfaces[0] = 0; //TODO - } + instanceInfo.interfaces = new int[implementsStr.size()]; + for (int i = 0; i < implementsStr.size(); i++) { + instanceInfo.interfaces[i] = typeName(localData, implementsStr.get(i)); } } @@ -631,51 +630,52 @@ public class AVM2SourceGenerator implements SourceGenerator { } public int typeName(SourceGeneratorLocalData localData, GraphTargetItem type) { - if (type instanceof UnboundedAVM2Item) { + if (type instanceof UnboundedTypeItem) { return 0; } - - String pkg=""; + + String pkg = ""; String name = type.toString(); - NameAVM2Item nameItem=(NameAVM2Item)type; - if(name.contains(".")){ - pkg = name.substring(0,name.lastIndexOf(".")); - name = name.substring(name.lastIndexOf(".")+1); + NameAVM2Item nameItem = (NameAVM2Item) type; + if (name.contains(".")) { + pkg = name.substring(0, name.lastIndexOf(".")); + name = name.substring(name.lastIndexOf(".") + 1); } - + int nsKind = Namespace.KIND_PACKAGE; - if(pkg.equals("")){ - for(int i=0;i abcs=new ArrayList<>(); + if (nsclass == null) { + List abcs = new ArrayList<>(); abcs.add(abc); abcs.addAll(allABCs); - loopabc:for(ABC a:abcs){ - for(InstanceInfo ii:a.instance_info){ - Multiname n=a.constants.constant_multiname.get(ii.name_index); - if(n.getNamespace(a.constants).getName(a.constants).equals(nspkg) && n.getName(a.constants, new ArrayList()).equals(name)){ + loopabc: + for (ABC a : abcs) { + for (InstanceInfo ii : a.instance_info) { + Multiname n = a.constants.constant_multiname.get(ii.name_index); + if (n.getNamespace(a.constants).getName(a.constants).equals(nspkg) && n.getName(a.constants, new ArrayList()).equals(name)) { pkg = nspkg; nsKind = n.getNamespace(a.constants).kind; break loopabc; } } - } - } else if(name.equals(nsclass)){ + } + } else if (name.equals(nsclass)) { pkg = nspkg; nsKind = nameItem.openedNamespacesKind.get(i); break; } } } - - return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(nsKind, pkg), 0, 0, new ArrayList()), true); + + return abc.constants.getMultinameId(new Multiname(Multiname.QNAME, str(name), namespace(nsKind, pkg), 0, 0, new ArrayList()), true); } public int ident(GraphTargetItem name) { @@ -706,7 +706,7 @@ public class AVM2SourceGenerator implements SourceGenerator { ValueKind optional[] = new ValueKind[paramValues.size()]; int param_names[] = new int[paramNames.size()]; for (int i = 0; i < paramTypes.size(); i++) { - param_types[i] = typeName(localData,paramTypes.get(i)); + param_types[i] = typeName(localData, paramTypes.get(i)); param_names[i] = str(paramNames.get(i)); } @@ -714,7 +714,7 @@ public class AVM2SourceGenerator implements SourceGenerator { optional[i] = getValueKind(paramTypes.get(paramTypes.size() - paramValues.size() + i), paramTypes.get(i)); } - MethodInfo mi = new MethodInfo(param_types, typeName(localData,retType), 0/*name_index*/, 0/*TODO*/, optional, param_names); + MethodInfo mi = new MethodInfo(param_types, typeName(localData, retType), 0/*name_index*/, 0/*TODO*/, optional, param_names); MethodBody mbody = new MethodBody(); mbody.method_info = abc.addMethodInfo(mi); List src = generate(localData, body); @@ -767,8 +767,8 @@ public class AVM2SourceGenerator implements SourceGenerator { } public void generateTraits(boolean generateStatic, SourceGeneratorLocalData localData, List items, Traits ts) { - Trait[] traits=new Trait[items.size()]; - for (int k=0;k registerNames = new ArrayList<>(); + registerNames.add("this"); + registerNames.addAll(fun.paramNames); + for (NameAVM2Item n : fun.subvariables) { + if (n.getVariableName().equals("arguments")) { + registerNames.add("arguments"); + break; + } + } + for (NameAVM2Item n : fun.subvariables) { + if (n.isDefinition()) { + registerNames.add(n.getVariableName()); + } + } + for (NameAVM2Item n : fun.subvariables) { + n.setRegNumber(registerNames.indexOf(n.getVariableName())); + } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java index 69ba947f7..6f05aaf7d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java @@ -20,13 +20,10 @@ import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.model.BooleanAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.CallPropertyAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.CallSuperAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.CoerceAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ConstructAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ConstructPropAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ConstructSuperAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.FindPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.FloatValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.GetPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.InAVM2Item; @@ -41,7 +38,6 @@ import com.jpexs.decompiler.flash.abc.avm2.model.PostDecrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.PostIncrementAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ReturnValueAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ReturnVoidAVM2Item; -import com.jpexs.decompiler.flash.abc.avm2.model.SetPropertyAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.ThrowAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.UndefinedAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.WithAVM2Item; @@ -73,12 +69,14 @@ import com.jpexs.decompiler.flash.abc.avm2.model.operations.SubtractAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.TypeOfAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.URShiftAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; -import com.jpexs.decompiler.flash.abc.types.ABCException; +import com.jpexs.decompiler.flash.abc.types.InstanceInfo; +import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.abc.types.ScriptInfo; import com.jpexs.decompiler.flash.action.swf4.ActionIf; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.AndItem; import com.jpexs.decompiler.graph.model.BinaryOp; import com.jpexs.decompiler.graph.model.BlockItem; @@ -93,6 +91,7 @@ import com.jpexs.decompiler.graph.model.OrItem; import com.jpexs.decompiler.graph.model.ParenthesisItem; import com.jpexs.decompiler.graph.model.SwitchItem; import com.jpexs.decompiler.graph.model.TernarOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import com.jpexs.decompiler.graph.model.WhileItem; import java.io.IOException; import java.io.StringReader; @@ -112,6 +111,9 @@ public class ActionScriptParser { private final boolean debugMode = false; private static final String AS3_NAMESPACE = "http://adobe.com/AS3/2006/builtin"; + private ABC abc; + private List otherABCs; + private long uniqId() { uniqLast++; return uniqLast; @@ -133,34 +135,21 @@ public class ActionScriptParser { } private GraphTargetItem type(List openedNamespaces, List openedNamespacesKinds, List variables) throws IOException, ParseException { - GraphTargetItem ret = null; - ParsedSymbol s = lex(); if (s.type == SymbolType.MULTIPLY) { - return new UnboundedAVM2Item(); + return new UnboundedTypeItem(); + } else { + lexer.pushback(s); } - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.STRING_OP); - ret = new NameAVM2Item(lexer.yyline(),s.value.toString(), null, false, openedNamespaces, openedNamespacesKinds); - variables.add((NameAVM2Item) ret); - s = lex(); - while (s.type == SymbolType.DOT) { - s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.STRING_OP); - NameAVM2Item var = new NameAVM2Item(lexer.yyline(),s.value.toString(), null, false, openedNamespaces, openedNamespacesKinds); - ret = new GetPropertyAVM2Item(null, ret, var); - s = lex(); - } - lexer.pushback(s); - return ret; + return name(true, openedNamespaces, openedNamespacesKinds, null, false, false, variables); } private GraphTargetItem memberOrCall(List openedNamespaces, List openedNamespacesKinds, GraphTargetItem newcmds, HashMap registerVars, boolean inFunction, boolean inMethod, List variables) throws IOException, ParseException { ParsedSymbol s = lex(); GraphTargetItem ret = newcmds; - while (s.isType(SymbolType.DOT, SymbolType.BRACKET_OPEN, SymbolType.PARENT_OPEN)) { + while (s.isType(SymbolType.DOT, SymbolType.PARENT_OPEN)) { switch (s.type) { case DOT: - case BRACKET_OPEN: lexer.pushback(s); ret = member(openedNamespaces, openedNamespacesKinds, ret, registerVars, inFunction, inMethod, variables); break; @@ -178,39 +167,123 @@ public class ActionScriptParser { GraphTargetItem ret = obj; ParsedSymbol s = lex(); while (s.isType(SymbolType.DOT)) { - NameAVM2Item var = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); - ret = new GetPropertyAVM2Item(null, ret, var); s = lex(); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + String propName = s.value.toString(); + s = lex(); + GraphTargetItem index = null; + if (s.type == SymbolType.BRACKET_OPEN) { + index = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables); + expectedType(SymbolType.BRACKET_CLOSE); + } else { + lexer.pushback(s); + } + List allAbcs = new ArrayList<>(); + allAbcs.add(abc); + allAbcs.addAll(otherABCs); + ret = new PropertyAVM2Item(ret, propName, index, allAbcs,openedNamespaces,openedNamespacesKinds); } lexer.pushback(s); return ret; } - - private NameAVM2Item qname(List openedNamespaces, List openedNamespacesKinds, List variables) throws IOException, ParseException { + + private GraphTargetItem name(boolean typeOnly, List openedNamespaces, List openedNamespacesKinds, HashMap registerVars, boolean inFunction, boolean inMethod, List variables) throws IOException, ParseException { ParsedSymbol s = lex(); expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); - NameAVM2Item ret = new NameAVM2Item(lexer.yyline(),s.value.toString(), null, false, openedNamespaces, openedNamespacesKinds); - variables.add((NameAVM2Item) ret); - return ret; - } - - private NameAVM2Item name(List openedNamespaces, List openedNamespacesKinds, HashMap registerVars, boolean inFunction, boolean inMethod, List variables) throws IOException, ParseException { - ParsedSymbol s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); - NameAVM2Item ret = new NameAVM2Item(lexer.yyline(),s.value.toString(), null, false, openedNamespaces, openedNamespacesKinds); + //NameAVM2Item ret = new NameAVM2Item(lexer.yyline(),s.value.toString(), null, false, openedNamespaces, openedNamespacesKinds); + List parts = new ArrayList<>(); + parts.add(s.value.toString()); s = lex(); while (s.type == SymbolType.DOT) { s = lex(); expected(s, lexer.yyline(), SymbolType.IDENTIFIER); - ret.appendName(s.value.toString()); + parts.add(s.value.toString()); } + GraphTargetItem index = null; if (s.type == SymbolType.BRACKET_OPEN) { - ret.setIndex(expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables)); + index = expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables); expectedType(SymbolType.BRACKET_CLOSE); } else { lexer.pushback(s); } - variables.add((NameAVM2Item) ret); + List allAbcs = new ArrayList<>(); + allAbcs.add(abc); + allAbcs.addAll(otherABCs); + if (!typeOnly) { + for (NameAVM2Item n : variables) { + if (n.getVariableName().equals(parts.get(0))) { + GraphTargetItem ret = new NameAVM2Item(n.type, lexer.yyline(), n.getVariableName(), null, false, openedNamespaces, openedNamespacesKinds); + if (parts.size() == 1) { + ((NameAVM2Item) ret).setIndex(index); + } + for (int i = 1; i < parts.size(); i++) { + ret = new PropertyAVM2Item(ret, parts.get(i), i == parts.size() - 1 ? index : null, allAbcs,openedNamespaces,openedNamespacesKinds); + } + return ret; + } + } + } + + //variable not found, gonna search types + String pkg = ""; + String name = null; + String type = null; + int nsKind = Namespace.KIND_PACKAGE; + int k; + loopk: + for (k = parts.size() - 1; k >= 0; k--) { + if(typeOnly){ + if(k()).equals(name)) { + nsKind = n.getNamespace(a.constants).kind; + type = n.getNameWithNamespace(a.constants); + break loopk; + } + } + } + } else if (name.equals(nsclass)) { + nsKind = openedNamespacesKinds.get(i); + break loopk; + } + } + } + } + + if(k==-1){ + throw new ParseException("Cannot find variable or type", lexer.yyline()); + } + GraphTargetItem ret=new TypeItem("".equals(pkg)?name:pkg+"."+name); + for (int i = 1; i < parts.size(); i++) { + ret = new PropertyAVM2Item(ret, parts.get(i), i == parts.size() - 1 ? index : null, allAbcs,openedNamespaces,openedNamespacesKinds); + } return ret; } @@ -292,7 +365,7 @@ public class ActionScriptParser { paramTypes.add(type(openedNamespaces, openedNamespacesKinds, variables)); s = lex(); } else { - paramTypes.add(new UnboundedAVM2Item()); + paramTypes.add(new UnboundedTypeItem()); } if (s.type == SymbolType.ASSIGN) { paramValues.add(expression(openedNamespaces, openedNamespacesKinds, null, isMethod, isMethod, isMethod, variables)); @@ -311,7 +384,7 @@ public class ActionScriptParser { if (s.type == SymbolType.COLON) { retType = type(openedNamespaces, openedNamespacesKinds, variables); } else { - retType = new UnboundedAVM2Item(); + retType = new UnboundedTypeItem(); lexer.pushback(s); } List body = null; @@ -518,7 +591,7 @@ public class ActionScriptParser { openedNamespaces = new ArrayList<>(openedNamespaces); openedNamespacesKinds = new ArrayList<>(openedNamespacesKinds); - + openedNamespacesKinds.add(Namespace.KIND_PRIVATE); openedNamespaces.add(packageName + ":" + classNameStr); openedNamespacesKinds.add(Namespace.KIND_PACKAGE); @@ -612,7 +685,7 @@ public class ActionScriptParser { switch (s.type) { case WITH: expectedType(SymbolType.PARENT_OPEN); - GraphTargetItem wvar = (name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables)); + GraphTargetItem wvar = (name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables)); expectedType(SymbolType.PARENT_CLOSE); expectedType(SymbolType.CURLY_OPEN); List wcmd = commands(openedNamespaces, openedNamespacesKinds, loops, loopLabels, registerVars, inFunction, inMethod, forinlevel, variables); @@ -620,7 +693,7 @@ public class ActionScriptParser { ret = new WithAVM2Item(null, wvar, wcmd); break; case DELETE: - GraphTargetItem varDel = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem varDel = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); if (varDel instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item gm = (GetPropertyAVM2Item) varDel; ret = new DeletePropertyAVM2Item(null, gm.object, gm.propertyName); @@ -641,18 +714,20 @@ public class ActionScriptParser { expected(s, lexer.yyline(), SymbolType.IDENTIFIER); String varIdentifier = s.value.toString(); s = lex(); + GraphTargetItem type; if (s.type == SymbolType.COLON) { - type(openedNamespaces, openedNamespacesKinds, variables); + type = type(openedNamespaces, openedNamespacesKinds, variables); s = lex(); - //TODO: handle value type + } else { + type = new UnboundedTypeItem(); } if (s.type == SymbolType.ASSIGN) { GraphTargetItem varval = (expression(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, true, variables)); - ret = new NameAVM2Item(lexer.yyline(),varIdentifier, varval, true, openedNamespaces, openedNamespacesKinds); + ret = new NameAVM2Item(type, lexer.yyline(), varIdentifier, varval, true, openedNamespaces, openedNamespacesKinds); variables.add((NameAVM2Item) ret); } else { - ret = new NameAVM2Item(lexer.yyline(),varIdentifier, null, true, openedNamespaces, openedNamespacesKinds); + ret = new NameAVM2Item(type, lexer.yyline(), varIdentifier, null, true, openedNamespaces, openedNamespacesKinds); variables.add((NameAVM2Item) ret); lexer.pushback(s); } @@ -663,7 +738,7 @@ public class ActionScriptParser { break; case INCREMENT: //preincrement case DECREMENT: //predecrement - GraphTargetItem varincdec = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem varincdec = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); if (s.type == SymbolType.INCREMENT) { ret = new PreIncrementAVM2Item(null, varincdec); } else if (s.type == SymbolType.DECREMENT) { @@ -804,7 +879,7 @@ public class ActionScriptParser { forBody.add(command(openedNamespaces, openedNamespacesKinds, loops, loopLabels, registerVars, inFunction, inMethod, forin ? forinlevel + 1 : forinlevel, true, variables)); if (forin) { - NameAVM2Item obj = new NameAVM2Item(lexer.yyline(),objIdent, null, false, openedNamespaces, openedNamespacesKinds); + NameAVM2Item obj = new NameAVM2Item(new UnboundedTypeItem(), lexer.yyline(), objIdent, null, false, openedNamespaces, openedNamespacesKinds); variables.add(obj); if (each) { ret = new ForEachInAVM2Item(null, floop, new InAVM2Item(null, obj, collection), forBody); @@ -938,14 +1013,17 @@ public class ActionScriptParser { s = lex(); boolean found = false; List> catchCommands = null; - List catchExceptions = new ArrayList<>(); + List catchExceptions = new ArrayList<>(); if (s.type == SymbolType.CATCH) { expectedType(SymbolType.PARENT_OPEN); - NameAVM2Item ename = qname(openedNamespaces, openedNamespacesKinds, variables); + s = lex(); + expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); + + String enamestr = s.value.toString(); expectedType(SymbolType.COLON); - NameAVM2Item etype = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); - ABCException e = new ABCException(); - catchExceptions.add(new ExceptionSAVM2item(etype, ename)); + GraphTargetItem etype = type(openedNamespaces, openedNamespacesKinds, variables); + NameAVM2Item e = new NameAVM2Item(etype, lexer.yyline(), enamestr, null, false/*?*/, openedNamespaces, openedNamespacesKinds); + catchExceptions.add(e); expectedType(SymbolType.PARENT_CLOSE); catchCommands = new ArrayList<>(); List cc = new ArrayList<>(); @@ -1164,8 +1242,8 @@ public class ActionScriptParser { ((NameAVM2Item) expr).setStoreValue(assigned); ((NameAVM2Item) expr).setDefinition(false); ret = expr; - } else if (expr instanceof GetPropertyAVM2Item) { - ret = new SetPropertyAVM2Item(null, ((GetPropertyAVM2Item) expr).object, ((GetPropertyAVM2Item) expr).propertyName, assigned); + } else if (expr instanceof PropertyAVM2Item) { + ((PropertyAVM2Item)expr).setStoreValue(assigned); } else { throw new ParseException("Invalid assignment", lexer.yyline()); } @@ -1376,7 +1454,7 @@ public class ActionScriptParser { existsRemainder = true; break; case DELETE: - GraphTargetItem varDel = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem varDel = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); if (varDel instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item gm = (GetPropertyAVM2Item) varDel; ret = new DeletePropertyAVM2Item(null, gm.object, gm.propertyName); @@ -1386,7 +1464,7 @@ public class ActionScriptParser { break; case INCREMENT: case DECREMENT: //preincrement - GraphTargetItem prevar = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem prevar = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); if (s.type == SymbolType.INCREMENT) { ret = new PreIncrementAVM2Item(null, prevar); } @@ -1406,7 +1484,7 @@ public class ActionScriptParser { existsRemainder = true; break; case NEW: - GraphTargetItem newvar = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem newvar = name(true, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); expectedType(SymbolType.PARENT_OPEN); if (newvar instanceof GetPropertyAVM2Item) { GetPropertyAVM2Item mem = (GetPropertyAVM2Item) newvar; @@ -1422,7 +1500,7 @@ public class ActionScriptParser { case THIS: case SUPER: lexer.pushback(s); - GraphTargetItem var = name(openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); + GraphTargetItem var = name(false, openedNamespaces, openedNamespacesKinds, registerVars, inFunction, inMethod, variables); var = memberOrCall(openedNamespaces, openedNamespacesKinds, var, registerVars, inFunction, inMethod, variables); ret = var; existsRemainder = true; @@ -1473,7 +1551,7 @@ public class ActionScriptParser { List openedNamespacesKinds = new ArrayList<>(); List openedNamespaces = new ArrayList<>(); s = lex(); - while(s.type == SymbolType.IMPORT){ + while (s.type == SymbolType.IMPORT) { String impPackage = ""; String impName = null; boolean all = false; @@ -1481,27 +1559,27 @@ public class ActionScriptParser { expected(s, lexer.yyline(), SymbolType.IDENTIFIER); impName = s.value.toString(); s = lex(); - while(s.type == SymbolType.DOT){ - if(!"".equals(impPackage)){ + while (s.type == SymbolType.DOT) { + if (!"".equals(impPackage)) { impPackage += "."; } impPackage += impName; - + s = lex(); - if(s.type == SymbolType.MULTIPLY){ + if (s.type == SymbolType.MULTIPLY) { impName = null; break; } expected(s, lexer.yyline(), SymbolType.IDENTIFIER); - + impName = s.value.toString(); s = lex(); } - - String fullImp = impName==null?impPackage:impPackage+":"+impName; + + String fullImp = impName == null ? impPackage : impPackage + ":" + impName; openedNamespaces.add(fullImp); openedNamespacesKinds.add(Namespace.KIND_PACKAGE); - + expectedType(SymbolType.SEMICOLON); } lexer.pushback(s); @@ -1522,8 +1600,8 @@ public class ActionScriptParser { return ret; } - public ScriptInfo scriptFromTree(PackageAVM2Item pkg, ABC abc, List otherABCs) { - AVM2SourceGenerator gen = new AVM2SourceGenerator(abc, new ArrayList()); + public ScriptInfo scriptFromTree(PackageAVM2Item pkg) { + AVM2SourceGenerator gen = new AVM2SourceGenerator(abc, otherABCs); List ret = new ArrayList<>(); SourceGeneratorLocalData localData = new SourceGeneratorLocalData( new HashMap(), 0, Boolean.FALSE, 0); @@ -1536,8 +1614,14 @@ public class ActionScriptParser { return gen.generateScriptInfo(localData, pkg.items); } - public ScriptInfo scriptFromString(String s, ABC abc, List otherABCs) throws ParseException, IOException { + public ScriptInfo scriptFromString(String s) throws ParseException, IOException { PackageAVM2Item pkg = packageFromString(s); - return scriptFromTree(pkg, abc, otherABCs); + return scriptFromTree(pkg); } + + public ActionScriptParser(ABC abc, List otherABCs) { + this.abc = abc; + this.otherABCs = otherABCs; + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java index 2b4702e15..cf982d5c3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/CallAVM2Item.java @@ -18,12 +18,17 @@ package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.executing.CallPropertyIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeFunctionItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.LocalData; +import java.util.ArrayList; import java.util.List; /** @@ -48,7 +53,27 @@ public class CallAVM2Item extends AVM2Item { @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - return super.toSource(localData, generator); //To change body of generated methods, choose Tools | Templates. + if(name instanceof PropertyAVM2Item){ + PropertyAVM2Item prop=(PropertyAVM2Item)name; + return toSourceMerge(localData, generator, prop.object,prop.index,arguments, + new AVM2Instruction(0, new CallPropertyIns(), new int[]{prop.resolveProperty(),arguments.size()}, new byte[0]) + ); + } + if(name instanceof NameAVM2Item){ + //TODO + } + return new ArrayList<>(); } + + @Override + public GraphTargetItem returnType() { + GraphTargetItem ti = name.returnType(); + if(ti instanceof TypeFunctionItem){ + TypeFunctionItem tfi=(TypeFunctionItem)ti; + return new TypeItem(tfi.fullTypeName); + } + return ti; + } + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java index 227948ed8..b98b9bd73 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ClassAVM2Item.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.GraphTargetItem; 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; @@ -73,4 +74,11 @@ public class ClassAVM2Item extends AVM2Item implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); //FIXME + } + + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java index c07e3a684..bc92809c2 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstAVM2Item.java @@ -54,4 +54,11 @@ public class ConstAVM2Item extends AVM2Item { return writer; //TODO } + @Override + public GraphTargetItem returnType() { + return type; + } + + + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ExceptionSAVM2item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ExceptionSAVM2item.java deleted file mode 100644 index 3d9e51f7d..000000000 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ExceptionSAVM2item.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2014 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.abc.avm2.parser.script; - -import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; -import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.graph.GraphTargetItem; -import com.jpexs.decompiler.graph.model.LocalData; - -/** - * - * @author JPEXS - */ -public class ExceptionSAVM2item extends AVM2Item { - - public GraphTargetItem type; - public GraphTargetItem name; - - public ExceptionSAVM2item(GraphTargetItem type, GraphTargetItem name) { - super(null, NOPRECEDENCE); - this.type = type; - this.name = name; - } - - @Override - public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - return writer; - } - -} diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java index 324d39ce7..964877fb8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/FunctionAVM2Item.java @@ -53,4 +53,11 @@ public class FunctionAVM2Item extends AVM2Item { return writer; //todo? } + @Override + public GraphTargetItem returnType() { + return retType; + } + + + } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java index c4c3bf5e0..75ea24cc6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/InterfaceAVM2Item.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; /** @@ -55,4 +56,9 @@ public class InterfaceAVM2Item extends AVM2Item { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); //FIXME + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java index 18c4e5242..ba5a02cdf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/NameAVM2Item.java @@ -17,21 +17,25 @@ package com.jpexs.decompiler.flash.abc.avm2.parser.script; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal0Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal1Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal2Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocal3Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.GetLocalIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal0Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal1Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal2Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocal3Ins; +import com.jpexs.decompiler.flash.abc.avm2.instructions.localregs.SetLocalIns; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; -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.parser.ParseException; -import com.jpexs.decompiler.flash.abc.types.InstanceInfo; -import com.jpexs.decompiler.flash.abc.types.Multiname; -import com.jpexs.decompiler.flash.abc.types.Namespace; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -40,7 +44,6 @@ import java.util.List; */ public class NameAVM2Item extends AVM2Item { - private AVM2Item it; private String variableName; private GraphTargetItem storeValue; @@ -50,7 +53,24 @@ public class NameAVM2Item extends AVM2Item { public List openedNamespaces; public List openedNamespacesKind; public int line; + public GraphTargetItem type; + private String ns = ""; + private int regNumber=-1; + public void setNs(String ns) { + this.ns = ns; + } + + public void setRegNumber(int regNumber) { + this.regNumber = regNumber; + } + + + + public String getNs() { + return ns; + } + public void appendName(String name) { this.variableName += "." + name; } @@ -83,56 +103,79 @@ public class NameAVM2Item extends AVM2Item { return variableName; } - public NameAVM2Item(int line,String variableName, GraphTargetItem storeValue, boolean definition, List openedNamespaces, List openedNamespacesKind) { + public NameAVM2Item(GraphTargetItem type, int line,String variableName, GraphTargetItem storeValue, boolean definition, List openedNamespaces, List openedNamespacesKind) { super(null, PRECEDENCE_PRIMARY); this.variableName = variableName; this.storeValue = storeValue; this.definition = definition; this.line = line; + this.type = type; } public boolean isDefinition() { return definition; } - public void setBoxedValue(AVM2Item it) { - this.it = it; - if (it != null) { - this.precedence = it.getPrecedence(); - } - } - - public AVM2Item getBoxedValue() { - return it; - } - public GraphTargetItem getStoreValue() { return storeValue; } @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if (it == null) { - return writer; - } - return it.appendTo(writer, localData); + return writer; } @Override public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { - if (it == null) { + if(regNumber==-1){ + throw new RuntimeException("No register set"); + } + if(definition && storeValue==null){ return new ArrayList<>(); } - return it.toSource(localData, generator); + AVM2Instruction ins; + if(storeValue!=null){ + switch(regNumber){ + case 0: + ins = new AVM2Instruction(0, new GetLocal0Ins(), new int[]{}, new byte[0]); + break; + case 1: + ins = new AVM2Instruction(0, new GetLocal1Ins(), new int[]{}, new byte[0]); + break; + case 2: + ins = new AVM2Instruction(0, new GetLocal2Ins(), new int[]{}, new byte[0]); + break; + case 3: + ins = new AVM2Instruction(0, new GetLocal3Ins(), new int[]{}, new byte[0]); + break; + default: + ins = new AVM2Instruction(0, new GetLocalIns(), new int[]{regNumber}, new byte[0]); + break; + } + return toSourceMerge(localData, generator, ins); + }else{ + switch(regNumber){ + case 0: + ins = new AVM2Instruction(0, new SetLocal0Ins(), new int[]{}, new byte[0]); + break; + case 1: + ins = new AVM2Instruction(0, new SetLocal1Ins(), new int[]{}, new byte[0]); + break; + case 2: + ins = new AVM2Instruction(0, new SetLocal2Ins(), new int[]{}, new byte[0]); + break; + case 3: + ins = new AVM2Instruction(0, new SetLocal3Ins(), new int[]{}, new byte[0]); + break; + default: + ins = new AVM2Instruction(0, new SetLocalIns(), new int[]{regNumber}, new byte[0]); + break; + } + return toSourceMerge(localData, generator,storeValue, ins); + } + } - @Override - public List toSourceIgnoreReturnValue(SourceGeneratorLocalData localData, SourceGenerator generator) { - if (it == null) { - return new ArrayList<>(); - } - return it.toSourceIgnoreReturnValue(localData, generator); - } @Override public boolean hasReturnValue() { @@ -154,90 +197,13 @@ public class NameAVM2Item extends AVM2Item { public String toString() { return variableName; } - - public GraphTargetItem resolve(boolean typeOnly,List variables,AVM2SourceGenerator generator) throws ParseException { - String name = toString(); - String parts[] = new String[]{name}; - if (name.contains(".")) { - parts = name.split("."); + + @Override + public GraphTargetItem returnType() { + if(index!=null){ + return TypeItem.UNBOUNDED; } - - String pkg = ""; - int k; - loopk:for (k = parts.length - 1; k >= 0; k--) { - pkg = ""; - for (int j = 0; j <= k - 1; j++) { - if (!"".equals(pkg)) { - pkg += "."; - } - pkg += parts[j]; - } - name = parts[k]; - - int nsKind = Namespace.KIND_PACKAGE; - //if (pkg.equals("")) { - for (int i = 0; i < openedNamespaces.size(); i++) { - String ns = openedNamespaces.get(i); - String nspkg = ns; - String nsclass = null; - if (nspkg.contains(":")) { - nsclass = nspkg.substring(nspkg.indexOf(":") + 1); - nspkg = nspkg.substring(0, nspkg.indexOf(":")); - } - if (nspkg.equals(pkg)) { - if (nsclass == null) { - List abcs = new ArrayList<>(); - abcs.add(generator.abc); - abcs.addAll(generator.allABCs); - loopabc: - for (ABC a : abcs) { - for (InstanceInfo ii : a.instance_info) { - Multiname n = a.constants.constant_multiname.get(ii.name_index); - if (n.getNamespace(a.constants).getName(a.constants).equals(nspkg) && n.getName(a.constants, new ArrayList()).equals(name)) { - - nsKind = n.getNamespace(a.constants).kind; - break loopk; - } - } - } - } else if (name.equals(nsclass)) { - nsKind = openedNamespacesKind.get(i); - break loopk; - } - } - } - //} - } - - GraphTargetItem ret; - if(k<0){ //Class not found, its variable - if(typeOnly){ - throw new ParseException("Undefined type", line); - } - this.variableName = null; - for(NameAVM2Item n:variables){ - if(n.definition && n.getVariableName().equals(parts[0])){ - this.variableName = parts[0]; - } - } - - if(this.variableName == null){ - throw new ParseException("Undefined variable", line); - } - ret=this; - for(int i=1;i()), true)); - /*for(int i=k+1;i. + */ + +package com.jpexs.decompiler.flash.abc.avm2.parser.script; + +import com.jpexs.decompiler.flash.SourceGeneratorLocalData; +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; +import com.jpexs.decompiler.flash.abc.avm2.instructions.other.GetPropertyIns; +import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; +import com.jpexs.decompiler.flash.abc.types.Multiname; +import com.jpexs.decompiler.flash.abc.types.Namespace; +import com.jpexs.decompiler.flash.abc.types.NamespaceSet; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction; +import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; +import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.GraphSourceItem; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeFunctionItem; +import com.jpexs.decompiler.graph.TypeItem; +import com.jpexs.decompiler.graph.model.LocalData; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author JPEXS + */ +public class PropertyAVM2Item extends AVM2Item { + + public String propertyName; + public GraphTargetItem object; + public List abcs; + public GraphTargetItem index; + private GraphTargetItem storeValue; + private List openedNamespaces; + private List openedNamespacesKind; + + public PropertyAVM2Item(GraphTargetItem object, String propertyName, GraphTargetItem index, List abcs, List openedNamespaces, List openedNamespacesKind) { + super(null,PRECEDENCE_PRIMARY); + this.propertyName = propertyName; + this.object = object; + this.abcs = abcs; + this.index = index; + this.openedNamespaces = openedNamespaces; + this.openedNamespacesKind = openedNamespacesKind; + } + + public void setStoreValue(GraphTargetItem storeValue) { + this.storeValue = storeValue; + } + + + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + return writer; + } + + + private int allNsSet(){ + int nssa[]=new int[openedNamespaces.size()]; + for(int i=0;i()), true); + } + + String objType = object.returnType().toString(); + for(ABC a:abcs){ + int ci = a.findClassByName(objType); + if(ci!=-1){ + for(Trait t:a.instance_info.get(ci).instance_traits.traits){ + String tname = t.getName(a).getName(a.constants, new ArrayList()); + if(tname.equals(propertyName)){ + return t.name_index; + } + } + break; + } + } + return abcs.get(0).constants.getMultinameId(new Multiname(Multiname.MULTINAME, + abcs.get(0).constants.getStringId(propertyName, true), 0, + allNsSet(), 0, new ArrayList()), true); + } + + @Override + public GraphTargetItem returnType() { + if(index!=null){ + return TypeItem.UNBOUNDED; + } + String objType = object.returnType().toString(); + for(ABC a:abcs){ + int ci = a.findClassByName(objType); + if(ci!=-1){ + for(Trait t:a.instance_info.get(ci).instance_traits.traits){ + String tname = t.getName(a).getName(a.constants, new ArrayList()); + if(tname.equals(propertyName)){ + if(t instanceof TraitSlotConst){ + TraitSlotConst tsc=(TraitSlotConst)t; + if(tsc.type_index == 0){ + return TypeItem.UNBOUNDED; + } + return new TypeItem(a.constants.constant_multiname.get(tsc.type_index).getNameWithNamespace(a.constants)); + } + if(t instanceof TraitMethodGetterSetter){ + TraitMethodGetterSetter tmgs=(TraitMethodGetterSetter)t; + return new TypeFunctionItem(a.constants.constant_multiname.get(a.method_info.get(tmgs.method_info).ret_type).getNameWithNamespace(a.constants)); + } + if(t instanceof TraitFunction){ + TraitFunction tf=(TraitFunction)t; + return new TypeFunctionItem(a.constants.constant_multiname.get(a.method_info.get(tf.method_info).ret_type).getNameWithNamespace(a.constants)); + } + } + } + break; + } + } + return TypeItem.UNBOUNDED; + } + + @Override + public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { + AVM2SourceGenerator g=(AVM2SourceGenerator)generator; + int propertyId = resolveProperty(); + if(index!=null){ + return toSourceMerge(localData, generator, object, index, + new AVM2Instruction(0, new GetPropertyIns(), new int[]{propertyId}, new byte[0]) + ); + } + return toSourceMerge(localData, generator, object, + new AVM2Instruction(0, new GetPropertyIns(), new int[]{propertyId}, new byte[0]) + ); + } + + + +} diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java index 77c2c0e71..ba9c71870 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SlotAVM2Item.java @@ -53,5 +53,10 @@ public class SlotAVM2Item extends AVM2Item { public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return writer; //TODO } + + @Override + public GraphTargetItem returnType() { + return type; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java index 10f50177d..5230bd9c3 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/ActionItem.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; 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; @@ -80,4 +81,9 @@ public abstract class ActionItem extends GraphTargetItem implements Serializable } return ret; } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java b/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java index 6eb7a0184..d716082e0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/TemporaryRegister.java @@ -26,7 +26,7 @@ import java.util.List; * * @author JPEXS */ -public class TemporaryRegister extends GraphTargetItem { +public class TemporaryRegister extends ActionItem { private final int regId; diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java index ae963e18a..0e098f836 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AddActionItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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.LocalData; import java.util.List; @@ -76,4 +77,9 @@ public class AddActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionAdd2()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java index 1c161b025..b9aa3416f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/AndActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class AndActionItem extends BinaryOpItem { @@ -40,4 +41,9 @@ public class AndActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionAnd()); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java index 000220fff..4f5da73d5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitAndActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitAndActionItem extends BinaryOpItem { @@ -40,4 +41,9 @@ public class BitAndActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionBitAnd()); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java index 68a7a8454..c822b105e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitOrActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitOrActionItem extends BinaryOpItem { @@ -40,4 +41,9 @@ public class BitOrActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionBitOr()); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java index 354a04e82..e070c4dc9 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/BitXorActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class BitXorActionItem extends BinaryOpItem { @@ -40,4 +41,9 @@ public class BitXorActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionBitXor()); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java index 6dcf71639..723dcf385 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/DivideActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; import com.jpexs.decompiler.graph.model.BinaryOpItem; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; import java.util.List; public class DivideActionItem extends BinaryOpItem { @@ -43,4 +44,9 @@ public class DivideActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionDivide()); } + + @Override + public GraphTargetItem returnType() { + return new UnboundedTypeItem(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java index 42410f626..db9b63c34 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/EqActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -55,4 +56,9 @@ public class EqActionItem extends BinaryOpItem implements LogicalOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionEquals2()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GeActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GeActionItem.java index b28cb4699..cb400a318 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GeActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GeActionItem.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -63,4 +64,9 @@ public class GeActionItem extends BinaryOpItem implements LogicalOpItem, Inverte public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionLess2(), new ActionNot()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GtActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GtActionItem.java index f18a539ed..56ed24f90 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GtActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/GtActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -46,4 +47,9 @@ public class GtActionItem extends BinaryOpItem implements LogicalOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionGreater()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InActionItem.java index 7e3a0c889..24a1c0d8a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InActionItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.flash.action.model.operations; import com.jpexs.decompiler.flash.action.model.ActionItem; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import com.jpexs.decompiler.graph.model.BinaryOpItem; import java.util.Set; @@ -32,4 +33,9 @@ public class InActionItem extends BinaryOpItem { public boolean isCompileTime(Set dependencies) { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InstanceOfActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InstanceOfActionItem.java index 64bf49486..de4c35c0c 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InstanceOfActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/InstanceOfActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf6.ActionInstanceOf; 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 java.util.List; import java.util.Set; @@ -40,4 +41,9 @@ public class InstanceOfActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionInstanceOf()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java index 59308f29e..ffa0aca5a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LShiftActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; @@ -40,4 +41,9 @@ public class LShiftActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionBitLShift()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LeActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LeActionItem.java index ec9adc081..86080f37d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LeActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LeActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -54,4 +55,9 @@ public class LeActionItem extends BinaryOpItem implements LogicalOpItem, Inverte public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionGreater(), new ActionNot()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LtActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LtActionItem.java index f96809cee..bec14b23e 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LtActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/LtActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -55,4 +56,9 @@ public class LtActionItem extends BinaryOpItem implements LogicalOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionLess2()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/ModuloActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/ModuloActionItem.java index 50c55b080..40c0b267d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/ModuloActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/ModuloActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; @@ -43,4 +44,9 @@ public class ModuloActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionModulo()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/MultiplyActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/MultiplyActionItem.java index cc89b228e..eb5e1413a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/MultiplyActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/MultiplyActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; @@ -40,4 +41,9 @@ public class MultiplyActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionMultiply()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java index 4363945b9..0bd99f3b8 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/NeqActionItem.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -56,4 +57,9 @@ public class NeqActionItem extends BinaryOpItem implements LogicalOpItem, Invert public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionEquals2(), new ActionNot()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/OrActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/OrActionItem.java index 630ac7462..9cecf23e0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/OrActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/OrActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; @@ -40,4 +41,9 @@ public class OrActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionOr()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreDecrementActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreDecrementActionItem.java index 29ed746ef..5040b81a5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreDecrementActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreDecrementActionItem.java @@ -93,4 +93,10 @@ public class PreDecrementActionItem extends UnaryOpItem { } return ret; } + + + @Override + public GraphTargetItem returnType() { + return value.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreIncrementActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreIncrementActionItem.java index 946a59c73..441786468 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreIncrementActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/PreIncrementActionItem.java @@ -93,4 +93,9 @@ public class PreIncrementActionItem extends UnaryOpItem { } return ret; } + + @Override + public GraphTargetItem returnType() { + return value.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java index 9057cdeed..dbaa91a04 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/RShiftActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; @@ -40,4 +41,9 @@ public class RShiftActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionBitRShift()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java index 7fba2dd6b..e83f6d6b7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictEqActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -49,4 +50,9 @@ public class StrictEqActionItem extends BinaryOpItem implements LogicalOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionStrictEquals()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java index 8c1b2a835..d63d71ad5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StrictNeqActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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.LogicalOpItem; import java.util.List; @@ -50,4 +51,9 @@ public class StrictNeqActionItem extends BinaryOpItem implements LogicalOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionStrictEquals(), new ActionNot()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringAddActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringAddActionItem.java index 0cb0a08a3..b3a49e76a 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringAddActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringAddActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf4.ActionStringAdd; 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 java.util.List; import java.util.Set; @@ -40,4 +41,9 @@ public class StringAddActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionStringAdd()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringEqActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringEqActionItem.java index 3b7a02a6e..1be1385ca 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringEqActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringEqActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf4.ActionStringEquals; 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 java.util.List; import java.util.Set; @@ -40,4 +41,9 @@ public class StringEqActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionStringEquals()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringLtActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringLtActionItem.java index a3ca1553d..76b20ce81 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringLtActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/StringLtActionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.action.swf4.ActionStringLess; 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 java.util.List; import java.util.Set; @@ -40,4 +41,9 @@ public class StringLtActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionStringLess()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java index 05bf16e4e..81b97c7be 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/SubtractActionItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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.LocalData; import java.util.List; @@ -65,4 +66,9 @@ public class SubtractActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionSubtract()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/URShiftActionItem.java b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/URShiftActionItem.java index ab6c74b7c..47efeba96 100644 --- a/trunk/src/com/jpexs/decompiler/flash/action/model/operations/URShiftActionItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/action/model/operations/URShiftActionItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; @@ -40,4 +41,9 @@ public class URShiftActionItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return toSourceMerge(localData, generator, leftSide, rightSide, new ActionBitURShift()); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java b/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java index b4fe0df28..cfacca3ae 100644 --- a/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/GraphTargetItem.java @@ -225,6 +225,9 @@ public abstract class GraphTargetItem implements Serializable { protected List toSourceMerge(SourceGeneratorLocalData localData, SourceGenerator gen, Object... tar) { List ret = new ArrayList<>(); for (Object o : tar) { + if(o == null){ + continue; + } if (o instanceof GraphTargetItem) { ret.addAll(((GraphTargetItem) o).toSource(localData, gen)); } @@ -252,4 +255,6 @@ public abstract class GraphTargetItem implements Serializable { } return ret; } + + public abstract GraphTargetItem returnType(); } diff --git a/trunk/src/com/jpexs/decompiler/graph/MarkItem.java b/trunk/src/com/jpexs/decompiler/graph/MarkItem.java index 7a4ddf703..17d4dcadb 100644 --- a/trunk/src/com/jpexs/decompiler/graph/MarkItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/MarkItem.java @@ -51,4 +51,9 @@ public class MarkItem extends GraphTargetItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java b/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java index 2598d2c06..ae48a5707 100644 --- a/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/NotCompileTimeItem.java @@ -55,4 +55,9 @@ public class NotCompileTimeItem extends GraphTargetItem { public boolean hasReturnValue() { return object.hasReturnValue(); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/TypeFunctionItem.java b/trunk/src/com/jpexs/decompiler/graph/TypeFunctionItem.java new file mode 100644 index 000000000..e9188529d --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/graph/TypeFunctionItem.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.jpexs.decompiler.graph; + +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; +import java.util.Objects; + +/** + * + * @author JPEXS + */ +public class TypeFunctionItem extends GraphTargetItem{ + + public static TypeFunctionItem BOOLEAN = new TypeFunctionItem("Boolean"); + public static TypeFunctionItem STRING = new TypeFunctionItem("String"); + public static TypeFunctionItem ARRAY = new TypeFunctionItem("Array"); + public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem(); + + public String fullTypeName; + + public TypeFunctionItem(String fullTypeName) { + super(null,NOPRECEDENCE); + this.fullTypeName = fullTypeName; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 83 * hash + Objects.hashCode(this.fullTypeName); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TypeFunctionItem other = (TypeFunctionItem) obj; + if (!Objects.equals(this.fullTypeName, other.fullTypeName)) { + return false; + } + return true; + } + + + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + writer.append(fullTypeName); + return writer; + } + + + + + @Override + public GraphTargetItem returnType() { + return this; + } + + @Override + public boolean hasReturnValue() { + return true; + } + + @Override + public String toString() { + return "Function["+fullTypeName+"]"; + } + +} diff --git a/trunk/src/com/jpexs/decompiler/graph/TypeItem.java b/trunk/src/com/jpexs/decompiler/graph/TypeItem.java new file mode 100644 index 000000000..55f8f5e23 --- /dev/null +++ b/trunk/src/com/jpexs/decompiler/graph/TypeItem.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.jpexs.decompiler.graph; + +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; +import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.model.UnboundedTypeItem; +import java.util.Objects; + +/** + * + * @author JPEXS + */ +public class TypeItem extends GraphTargetItem{ + + public static TypeItem BOOLEAN = new TypeItem("Boolean"); + public static TypeItem STRING = new TypeItem("String"); + public static TypeItem ARRAY = new TypeItem("Array"); + public static UnboundedTypeItem UNBOUNDED = new UnboundedTypeItem(); + + public String fullTypeName; + + public TypeItem(String fullTypeName) { + super(null,NOPRECEDENCE); + this.fullTypeName = fullTypeName; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 83 * hash + Objects.hashCode(this.fullTypeName); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TypeItem other = (TypeItem) obj; + if (!Objects.equals(this.fullTypeName, other.fullTypeName)) { + return false; + } + return true; + } + + + + @Override + public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + writer.append(fullTypeName); + return writer; + } + + + + + @Override + public GraphTargetItem returnType() { + return this; + } + + @Override + public boolean hasReturnValue() { + return true; + } + + @Override + public String toString() { + return fullTypeName; + } + + + +} diff --git a/trunk/src/com/jpexs/decompiler/graph/model/AndItem.java b/trunk/src/com/jpexs/decompiler/graph/model/AndItem.java index 73519a4f9..b95aede51 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/AndItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/AndItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import java.util.List; public class AndItem extends BinaryOpItem { @@ -48,4 +49,9 @@ public class AndItem extends BinaryOpItem { public List toSource(SourceGeneratorLocalData localData, SourceGenerator generator) { return generator.generate(localData, this); } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java b/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java index 8862dacb7..2c8ffe995 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/BlockItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.graph.Graph; 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 java.util.List; /** @@ -53,4 +54,9 @@ public class BlockItem extends GraphTargetItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java b/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java index f7a3b50b7..f334c79fc 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/BreakItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.NulWriter; 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 java.util.List; /** @@ -63,4 +64,9 @@ public class BreakItem extends GraphTargetItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java b/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java index df94f5ab0..ebb87c24d 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/CommaExpressionItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; /** @@ -58,4 +59,9 @@ public class CommaExpressionItem extends GraphTargetItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return commands.isEmpty()?TypeItem.UNBOUNDED:commands.get(commands.size()-1).returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java b/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java index b4e50a86a..53934eef2 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/CommentItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.graph.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; /** * @@ -67,4 +68,9 @@ public class CommentItem extends GraphTargetItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java index f5fd5ba12..9ea76c608 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ContinueItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.helpers.NulWriter; 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 java.util.List; /** @@ -63,4 +64,9 @@ public class ContinueItem extends GraphTargetItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java b/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java index a72b52397..644aa638a 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/DoWhileItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -114,4 +115,9 @@ public class DoWhileItem extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java b/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java index 1054904a4..1b23550c3 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/DuplicateItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; 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 java.util.List; import java.util.Set; @@ -83,4 +84,9 @@ public class DuplicateItem extends GraphTargetItem { public boolean hasReturnValue() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java index 0d1a8c099..b63f556ae 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ForItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -138,4 +139,9 @@ public class ForItem extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java b/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java index b50c96de9..078391d9a 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/IfItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.graph.Block; 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 java.util.ArrayList; import java.util.List; import java.util.Set; @@ -142,4 +143,9 @@ public class IfItem extends GraphTargetItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java b/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java index b6625e0a9..87127bb87 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/IntegerValueItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.graph.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; import java.util.Set; /** @@ -53,4 +54,9 @@ public class IntegerValueItem extends GraphTargetItem { public boolean hasReturnValue() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/NotItem.java b/trunk/src/com/jpexs/decompiler/graph/model/NotItem.java index 3488b1168..7e4519d7b 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/NotItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/NotItem.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.ecma.EcmaScript; 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 java.util.List; import java.util.Set; @@ -74,4 +75,9 @@ public class NotItem extends UnaryOpItem implements LogicalOpItem, Inverted { public boolean hasReturnValue() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/OrItem.java b/trunk/src/com/jpexs/decompiler/graph/model/OrItem.java index 2f6c2b4fa..fa410be26 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/OrItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/OrItem.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphSourceItemPos; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import java.util.List; public class OrItem extends BinaryOpItem { @@ -48,4 +49,9 @@ public class OrItem extends BinaryOpItem { public boolean hasReturnValue() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java index a2c12051e..12829e312 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ParenthesisItem.java @@ -50,4 +50,9 @@ public class ParenthesisItem extends GraphTargetItem { public boolean hasReturnValue() { return value.hasReturnValue(); } + + @Override + public GraphTargetItem returnType() { + return value.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java b/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java index 833e3a7f8..2faa6ee6a 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/ScriptEndItem.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.graph.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; /** * @@ -48,4 +49,9 @@ public class ScriptEndItem extends GraphTargetItem implements ExitItem { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java b/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java index 69bcf8341..c9e7649a0 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/SwitchItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -145,4 +146,9 @@ public class SwitchItem extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java b/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java index 31b96a384..762a9e8f5 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/TernarOpItem.java @@ -55,4 +55,9 @@ public class TernarOpItem extends GraphTargetItem { public boolean hasReturnValue() { return true; } + + @Override + public GraphTargetItem returnType() { + return onTrue.returnType(); + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java b/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java index 32dbc38e3..057fd0e24 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/TrueItem.java @@ -19,6 +19,7 @@ package com.jpexs.decompiler.graph.model; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.TypeItem; /** * @@ -39,4 +40,9 @@ public class TrueItem extends GraphTargetItem { public boolean hasReturnValue() { return true; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.BOOLEAN; + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnboundedAVM2Item.java b/trunk/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java similarity index 75% rename from trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnboundedAVM2Item.java rename to trunk/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java index 7a4b694a7..87adf1788 100644 --- a/trunk/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/UnboundedAVM2Item.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/UnboundedTypeItem.java @@ -14,25 +14,30 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.abc.avm2.parser.script; +package com.jpexs.decompiler.graph.model; import com.jpexs.decompiler.flash.abc.avm2.model.AVM2Item; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.decompiler.graph.model.LocalData; +import com.jpexs.decompiler.graph.GraphTargetItem; /** * * @author JPEXS */ -public class UnboundedAVM2Item extends AVM2Item { +public class UnboundedTypeItem extends AVM2Item { - public UnboundedAVM2Item() { + public UnboundedTypeItem() { super(null, NOPRECEDENCE); } @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { + writer.append("*"); return writer; } + @Override + public GraphTargetItem returnType() { + return this; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java b/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java index cde372072..c66c93787 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/UniversalLoopItem.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.graph.Block; import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -93,4 +94,8 @@ public class UniversalLoopItem extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } } diff --git a/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java b/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java index bf276f5f0..be6294ee9 100644 --- a/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java +++ b/trunk/src/com/jpexs/decompiler/graph/model/WhileItem.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.graph.GraphSourceItem; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.Loop; import com.jpexs.decompiler.graph.SourceGenerator; +import com.jpexs.decompiler.graph.TypeItem; import java.util.ArrayList; import java.util.List; @@ -110,4 +111,9 @@ public class WhileItem extends LoopItem implements Block { public boolean hasReturnValue() { return false; } + + @Override + public GraphTargetItem returnType() { + return TypeItem.UNBOUNDED; + } }