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

Improved resolution of member types such as 'decltype(OtherMemember)'

This commit is contained in:
Brian Fiete 2025-05-29 06:39:39 +02:00
parent 5882d4fbd2
commit 864b9252ea

View file

@ -5310,6 +5310,17 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe
auto fieldInstance = &typeInstance->mFieldInstances[fieldDef->mIdx];
bool isResolvingFields = typeInstance->mResolvingConstField || typeInstance->mResolvingVarField;
if (typeInstance->mDefineState < BfTypeDefineState_Defined)
{
// Check for cases like a member like 'uint8[sizeof(decltype(PrevMember))] NextMember;'
auto checkTypeState = mModule->mContext->mCurTypeState;
while (checkTypeState != NULL)
{
if ((checkTypeState->mType == typeInstance) && (checkTypeState->mResolveKind == BfTypeState::ResolveKind_FieldType))
isResolvingFields = true;
checkTypeState = checkTypeState->mPrevState;
}
}
if (fieldDef->mIsVolatile)
mIsVolatileReference = true;
@ -5570,7 +5581,7 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe
}
else if (!target)
{
if (((mBfEvalExprFlags & BfEvalExprFlags_NameOf) == 0) && (mModule->PreFail()))
if (((mBfEvalExprFlags & (BfEvalExprFlags_NameOf | BfEvalExprFlags_DeclType)) == 0) && (mModule->PreFail()))
{
if ((flags & BfLookupFieldFlag_CheckingOuter) != 0)
mModule->Fail(StrFormat("An instance reference is required to reference non-static outer field '%s.%s'", mModule->TypeToString(typeInstance).c_str(), fieldDef->mName.c_str()),