From c670473452680b7ab428539e576ddae60fbcf786 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 15 Jun 2022 17:53:15 -0700 Subject: [PATCH] Fixed global lookup and function cast --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index aad9e58e..cdfb9ea7 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -9761,8 +9761,12 @@ BfTypeDef* BfModule::FindTypeDef(const BfAtomComposite& findName, int numGeneric } } + BfFindTypeDefFlags findDefFlags = BfFindTypeDefFlag_None; + if ((resolveFlags & BfResolveTypeRefFlag_AllowGlobalContainer) != 0) + findDefFlags = (BfFindTypeDefFlags)(findDefFlags | BfFindTypeDefFlag_AllowGlobal); + BfTypeDef* ambiguousTypeDef = NULL; - BfTypeDef *result = mSystem->FindTypeDef(findName, numGenericArgs, project, namespaceSearch, &ambiguousTypeDef); + BfTypeDef *result = mSystem->FindTypeDef(findName, numGenericArgs, project, namespaceSearch, &ambiguousTypeDef, findDefFlags); if ((ambiguousTypeDef != NULL) && (error != NULL)) { error->mErrorKind = BfTypeLookupError::BfErrorKind_Ambiguous; @@ -10763,7 +10767,7 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula //auto typeDef = mSystem->FindTypeDef(findName, wantNumGenericArgs, bfProject, {}, &ambiguousTypeDef); BfTypeLookupError lookupError; - auto typeDef = FindTypeDef(findName, wantNumGenericArgs, NULL, &lookupError); + auto typeDef = FindTypeDef(findName, wantNumGenericArgs, NULL, &lookupError, resolveFlags); if (typeDef != NULL) { if (ambiguousTypeDef != NULL) @@ -12624,6 +12628,7 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp // Func -> void* if ((typedVal.mType->IsFunction()) && (toType->IsVoidPtr())) { + typedVal = LoadValue(typedVal); return mBfIRBuilder->CreateIntToPtr(typedVal.mValue, mBfIRBuilder->MapType(toType)); } @@ -12632,6 +12637,7 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp // void* -> Func if ((typedVal.mType->IsVoidPtr()) && (toType->IsFunction())) { + typedVal = LoadValue(typedVal); return mBfIRBuilder->CreatePtrToInt(typedVal.mValue, BfTypeCode_IntPtr); }