From a69e1cfe6e7e3324c2505b9333d7b579b151cf7e Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 28 Jun 2022 08:10:20 -0700 Subject: [PATCH] Improved lookup of emitted static/const fields --- IDEHelper/Compiler/BfExprEvaluator.cpp | 29 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 7c423066..7046030e 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -5340,15 +5340,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar return BfTypedValue(); } mModule->PopulateType(startCheckType, BfPopulateType_BaseType); - } - - if ((startCheckType != NULL) && (mModule->mContext->mCurTypeState != NULL)) - { - // Don't allow lookups yet - if ((mModule->mContext->mCurTypeState->mResolveKind == BfTypeState::ResolveKind_Attributes) && - (startCheckType == mModule->mContext->mCurTypeState->mType)) - return BfTypedValue(); - } + } String findName; int varSkipCount = 0; @@ -5377,6 +5369,25 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar bool isBaseLookup = false; while (curCheckType != NULL) { + bool isPopulatingType = false; + if (mModule->mContext->mCurTypeState != NULL) + { + if (curCheckType == mModule->mContext->mCurTypeState->mType) + { + isPopulatingType = true; + if (mModule->mContext->mCurTypeState->mResolveKind == BfTypeState::ResolveKind_Attributes) + { + // Don't allow lookups yet + return BfTypedValue(); + } + } + } + if ((!isPopulatingType) && (curCheckType->mDefineState < Beefy::BfTypeDefineState_Defined)) + { + // We MAY have emitted fields so we need to do this + mModule->PopulateType(curCheckType); + } + curCheckType->mTypeDef->PopulateMemberSets(); BfFieldDef* nextField = NULL; BfMemberSetEntry* entry;