1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-11 04:52:21 +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); auto result = LookupField(targetSrc, target, autoFieldName, BfLookupFieldFlag_IgnoreProtection);
if (result) if (result)
{ {
bool needsCopy = true;
if (!hasSetter) if (!hasSetter)
{ {
if (((mModule->mCurMethodInstance->mMethodDef->mMethodType == BfMethodType_Ctor)) && if (((mModule->mCurMethodInstance->mMethodDef->mMethodType == BfMethodType_Ctor)) &&
@ -4840,11 +4842,22 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
// Allow writing inside ctor // Allow writing inside ctor
} }
else else
{
result.MakeReadOnly(); result.MakeReadOnly();
needsCopy = false;
}
} }
if (needsCopy)
{
result = mModule->LoadValue(result);
result = mModule->MakeAddressable(result);
result = mModule->RemoveReadOnly(result);
}
mPropDef = NULL; mPropDef = NULL;
mPropSrc = NULL; mPropSrc = NULL;
mOrigPropTarget = NULL; mOrigPropTarget = NULL;
return result; return result;
} }
} }