Use FindProperty instead of FindPropStrict on setting property

This commit is contained in:
Jindra Petřík
2023-01-16 09:17:31 +01:00
parent e69d492953
commit 2511a80f23
3 changed files with 6 additions and 6 deletions

View File

@@ -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))
);
}

View File

@@ -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())
);
}

View File

@@ -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<Integer> 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<ABC> 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<Integer> ret_temp = new Reference<>(-1);
Reference<Integer> obj_temp = new Reference<>(-1);