From f10365c1ad00597c27ea9b3c650971d08c4b7dfc Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sat, 22 Mar 2025 07:45:43 -0400 Subject: [PATCH] Fixed alloctype(T) where T : var field lookups --- IDEHelper/Compiler/BfExprEvaluator.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 5c8e9368..5b6c5327 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4104,7 +4104,7 @@ bool BfExprEvaluator::CheckForMethodName(BfAstNode* refNode, BfTypeInstance* typ } bool BfExprEvaluator::IsVar(BfType* type, bool forceIgnoreWrites) -{ +{ if (type->IsVar()) return true; if ((type->IsGenericParam()) && (!forceIgnoreWrites) && (!mModule->mBfIRBuilder->mIgnoreWrites)) @@ -5742,7 +5742,7 @@ BfTypedValue BfExprEvaluator::LoadField(BfAstNode* targetSrc, BfTypedValue targe BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue target, const StringImpl& fieldName, BfLookupFieldFlags flags) { if (target) - flags = (BfLookupFieldFlags)(flags | BfLookupFieldFlag_HasInstance); + flags = (BfLookupFieldFlags)(flags | BfLookupFieldFlag_HasInstance); if ((target.mType != NULL && (target.mType->IsGenericParam()))) { @@ -11282,6 +11282,12 @@ void BfExprEvaluator::LookupQualifiedName(BfQualifiedNameNode* nameNode, bool ig else mResult.mKind = BfTypedValueKind_Addr; } + else if (mResult.mType->IsAllocType()) + { + BF_ASSERT(mResult.mValue.IsFake()); + mResult.mType = mResult.mType->GetUnderlyingType(); + } + mIsVolatileReference = false; mIsHeapReference = false;