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:
parent
5882d4fbd2
commit
864b9252ea
1 changed files with 12 additions and 1 deletions
|
@ -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()),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue