1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00

Propagating readonly with mixin arguments

This commit is contained in:
Brian Fiete 2020-08-03 05:44:40 -07:00
parent 768cae659c
commit bdc6a17f79

View file

@ -13837,6 +13837,8 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
localVar->mIsReadOnly = argValue.IsReadOnly();
}
if (argValue.IsReadOnly())
localVar->mIsReadOnly = true;
if (argIdx == -1)
{
@ -15041,6 +15043,12 @@ BfTypedValue BfExprEvaluator::GetResult(bool clearResult, bool resolveGenericTyp
}
}
}
if (mResultFieldInstance != NULL)
{
NOP;
}
mPropDef = NULL;
mPropDefBypassVirtual = false;
mIndexerValues.clear();
@ -15354,7 +15362,10 @@ bool BfExprEvaluator::CheckModifyResult(BfTypedValue typedVal, BfAstNode* refNod
{
if (!mModule->mCurMethodInstance->IsMixin())
{
if ((localVar->mResolvedType->IsGenericParam()) && (onlyNeedsMut))
if (mModule->mCurMethodState->mMixinState != NULL)
error = mModule->Fail(StrFormat("Cannot %s mixin parameter '%s'", modifyType,
localVar->mName.c_str(), mModule->MethodToString(mModule->mCurMethodInstance).c_str()), refNode);
else if ((localVar->mResolvedType->IsGenericParam()) && (onlyNeedsMut))
error = mModule->Fail(StrFormat("Cannot %s parameter '%s'. Consider adding 'mut' or 'ref' specifier to parameter or copying to a local variable.", modifyType,
localVar->mName.c_str(), mModule->MethodToString(mModule->mCurMethodInstance).c_str()), refNode);
else