1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 12:32:20 +02:00

Properly make a copy during autoprop direct field access optimization

This commit is contained in:
Brian Fiete 2021-01-20 07:51:59 -08:00
parent 18208cb958
commit 981e56baad

View file

@ -4832,6 +4832,8 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
auto result = LookupField(targetSrc, target, autoFieldName, BfLookupFieldFlag_IgnoreProtection);
if (result)
{
bool needsCopy = true;
if (!hasSetter)
{
if (((mModule->mCurMethodInstance->mMethodDef->mMethodType == BfMethodType_Ctor)) &&
@ -4840,11 +4842,22 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
// Allow writing inside ctor
}
else
{
result.MakeReadOnly();
needsCopy = false;
}
}
if (needsCopy)
{
result = mModule->LoadValue(result);
result = mModule->MakeAddressable(result);
result = mModule->RemoveReadOnly(result);
}
mPropDef = NULL;
mPropSrc = NULL;
mOrigPropTarget = NULL;
mOrigPropTarget = NULL;
return result;
}
}