diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java index 06db4a2ad..dac9eb4e8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/operations/DeletePropertyAVM2Item.java @@ -84,7 +84,7 @@ public class DeletePropertyAVM2Item extends AVM2Item { } if (p instanceof PropertyAVM2Item) { PropertyAVM2Item prop = (PropertyAVM2Item) p; - return toSourceMerge(localData, generator, prop.resolveObject(localData, generator), + return toSourceMerge(localData, generator, prop.resolveObject(localData, generator, true), ins(AVM2Instructions.DeleteProperty, prop.resolveProperty(localData)) ); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java index f28c514a1..9de718c92 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ConstructSomethingAVM2Item.java @@ -80,7 +80,7 @@ public class ConstructSomethingAVM2Item extends CallAVM2Item { if (resname instanceof PropertyAVM2Item) { PropertyAVM2Item prop = (PropertyAVM2Item) resname; - return toSourceMerge(localData, generator, prop.resolveObject(localData, generator), arguments, + return toSourceMerge(localData, generator, prop.resolveObject(localData, generator, true), arguments, ins(AVM2Instructions.ConstructProp, prop.resolveProperty(localData), arguments.size()) ); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java index b82786f52..1d42b013a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/PropertyAVM2Item.java @@ -405,7 +405,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { resolve(false, localData, isType, objType, propType, propIndex, outPropValue, outPropValueAbc); int propertyId = propIndex.getVal(); - Object obj = resolveObject(localData, generator); + Object obj = resolveObject(localData, generator, assignedValue == null); Reference ret_temp = new Reference<>(-1); if (assignedValue != null) { GraphTargetItem targetType = propType.getVal(); @@ -451,7 +451,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { return true; } - public Object resolveObject(SourceGeneratorLocalData localData, SourceGenerator generator) throws CompilationException { + public Object resolveObject(SourceGeneratorLocalData localData, SourceGenerator generator, boolean mustExist) throws CompilationException { Object obj = object; if (obj == null) { @@ -495,7 +495,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { Reference propValueAbc = new Reference<>(null); resolve(false, localData, isType, objType, propType, propIndex, outPropValue, propValueAbc); - obj = ins(AVM2Instructions.FindPropertyStrict, propIndex.getVal()); + obj = ins(mustExist ? AVM2Instructions.FindPropertyStrict : AVM2Instructions.FindProperty, propIndex.getVal()); //} } return obj; @@ -514,7 +514,7 @@ public class PropertyAVM2Item extends AssignableAVM2Item { resolve(false, localData, isType, objType, propType, propIndex, outPropValue, outPropValueAbc); int propertyId = propIndex.getVal(); - Object obj = resolveObject(localData, generator); + Object obj = resolveObject(localData, generator, false); Reference ret_temp = new Reference<>(-1); Reference obj_temp = new Reference<>(-1);