From dfdbe7440fc81f3b9373db5374e26d5247ae2ec8 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 2 Feb 2025 08:44:48 -0800 Subject: [PATCH] Fixed colorization of unqualified property access (ie: implicit 'this') --- IDEHelper/Compiler/BfExprEvaluator.cpp | 6 +++--- IDEHelper/Compiler/BfModule.cpp | 9 +++++++++ IDEHelper/Compiler/BfModule.h | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 4bccbfcf..ed7b0066 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4770,7 +4770,7 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI result = LookupField(identifierNode, thisValue, findName); if ((result) || (mPropDef != NULL)) { - mModule->SetElementType(identifierNode, BfSourceElementType_Member); + mModule->SetHighestElementType(identifierNode, BfSourceElementType_Member); return result; } } @@ -4785,7 +4785,7 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI result = LookupField(identifierNode, thisValue, findName); if ((result) || (mPropDef != NULL)) { - mModule->SetElementType(identifierNode, BfSourceElementType_Member); + mModule->SetHighestElementType(identifierNode, BfSourceElementType_Member); return result; } } @@ -4793,7 +4793,7 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI } else { - mModule->SetElementType(identifierNode, BfSourceElementType_Member); + mModule->SetHighestElementType(identifierNode, BfSourceElementType_Member); } if ((!result) && (identifierNode != NULL)) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 47f49577..627c8664 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -3031,6 +3031,15 @@ void BfModule::SetElementType(BfAstNode* astNode, BfSourceElementType elementTyp } } +void BfModule::SetHighestElementType(BfAstNode* astNode, BfSourceElementType elementType) +{ + if (mCompiler->mResolvePassData != NULL) + { + if (auto sourceClassifier = mCompiler->mResolvePassData->GetSourceClassifier(astNode)) + sourceClassifier->SetHighestElementType(astNode, elementType); + } +} + bool BfModule::PreFail() { if (!mIgnoreErrors) diff --git a/IDEHelper/Compiler/BfModule.h b/IDEHelper/Compiler/BfModule.h index 3cf97f7a..dc6609b0 100644 --- a/IDEHelper/Compiler/BfModule.h +++ b/IDEHelper/Compiler/BfModule.h @@ -1624,6 +1624,7 @@ public: void GetAccessAllowed(BfTypeInstance* checkType, bool& allowProtected, bool& allowPrivate); bool CheckProtection(BfProtectionCheckFlags& flags, BfTypeInstance* memberOwner, BfProject* memberProject, BfProtection memberProtection, BfTypeInstance* lookupStartType); void SetElementType(BfAstNode* astNode, BfSourceElementType elementType); + void SetHighestElementType(BfAstNode* astNode, BfSourceElementType elementType); bool PreFail(); void SetFail(); void VerifyOnDemandMethods();