diff --git a/BeefLibs/corlib/src/Diagnostics/FileVersionInfo.bf b/BeefLibs/corlib/src/Diagnostics/FileVersionInfo.bf index 8924ab08..7194aefc 100644 --- a/BeefLibs/corlib/src/Diagnostics/FileVersionInfo.bf +++ b/BeefLibs/corlib/src/Diagnostics/FileVersionInfo.bf @@ -467,7 +467,7 @@ namespace System.Diagnostics mFileFlags = (.)ffi.dwFileFlags; // fileVersion is chosen based on best guess. Other fields can be used if appropriate. - return (mFileVersion != string.Empty); + return (mFileVersion != String.Empty); } /// diff --git a/BeefLibs/corlib/src/Threading/Thread.bf b/BeefLibs/corlib/src/Threading/Thread.bf index c00b2cf8..8198c23e 100644 --- a/BeefLibs/corlib/src/Threading/Thread.bf +++ b/BeefLibs/corlib/src/Threading/Thread.bf @@ -82,7 +82,7 @@ namespace System.Threading public static this() { - var cb = ref Runtime.BfRtCallbacks.sCallbacks; + var cb = ref Runtime.BfRtCallbacks.[Friend]sCallbacks; cb.[Friend]mThread_Alloc = => Thread_Alloc; cb.[Friend]mThread_GetMainThread = => Thread_GetMainThread; diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index e67f4e2c..c696a8f7 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -9519,11 +9519,7 @@ void BfExprEvaluator::LookupQualifiedStaticField(BfAstNode* nameNode, BfIdentifi { // Lookup left side as a type { - BfType* type = NULL; - { - SetAndRestoreValue prevIgnoreErrors(mModule->mIgnoreErrors, true); - type = mModule->ResolveTypeRef(nameLeft, NULL, BfPopulateType_Declaration, BfResolveTypeRefFlag_AllowRef); - } + BfType* type = mModule->ResolveTypeRef(nameLeft, NULL, BfPopulateType_Declaration, BfResolveTypeRefFlag_IgnoreLookupError); if (type != NULL) { BfTypedValue lookupType; diff --git a/IDEHelper/Compiler/BfModule.h b/IDEHelper/Compiler/BfModule.h index fe8d8e51..b64b4f1c 100644 --- a/IDEHelper/Compiler/BfModule.h +++ b/IDEHelper/Compiler/BfModule.h @@ -1814,7 +1814,7 @@ public: bool ResolveTypeResult_Validate(BfTypeReference* typeRef, BfType* resolvedTypeRef); BfType* ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTypeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags); void ShowAmbiguousTypeError(BfAstNode* refNode, BfTypeDef* typeDef, BfTypeDef* otherTypeDef); - void ShowGenericArgCountError(BfTypeReference* typeRef, int wantedGenericParams); + void ShowGenericArgCountError(BfAstNode* typeRef, int wantedGenericParams); BfTypeDef* GetActiveTypeDef(BfTypeInstance* typeInstanceOverride = NULL, bool useMixinDecl = false); // useMixinDecl is useful for type lookup, but we don't want the decl project to limit what methods the user can call BfTypeDef* FindTypeDefRaw(const BfAtomComposite& findName, int numGenericArgs, BfTypeInstance* typeInstance, BfTypeDef* useTypeDef, BfTypeLookupError* error); BfTypeDef* FindTypeDef(const BfAtomComposite& findName, int numGenericArgs = 0, BfTypeInstance* typeInstanceOverride = NULL, BfTypeLookupError* error = NULL); @@ -1828,11 +1828,9 @@ public: BfType* ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0, int numGenericArgs = 0); BfType* ResolveTypeRefAllowUnboundGenerics(BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, bool resolveGenericParam = true); BfType* ResolveTypeRef(BfAstNode* astNode, const BfSizedArray* genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0); - //BfType* ResolveTypeRef(BfIdentifierNode* identifier, const BfSizedArray& genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0); BfType* ResolveTypeDef(BfTypeDef* typeDef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None); BfType* ResolveTypeDef(BfTypeDef* typeDef, const BfTypeVector& genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None); - BfType* ResolveInnerType(BfType* outerType, BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, bool ignoreErrors = false, int numGenericArgs = 0); - BfType* ResolveInnerType(BfType* outerType, BfIdentifierNode* identifier, BfPopulateType populateType = BfPopulateType_Data, bool ignoreErrors = false); + BfType* ResolveInnerType(BfType* outerType, BfAstNode* typeRef, BfPopulateType populateType = BfPopulateType_Data, bool ignoreErrors = false, int numGenericArgs = 0); BfTypeDef* GetCombinedPartialTypeDef(BfTypeDef* type); BfTypeInstance* GetOuterType(BfType* type); bool IsInnerType(BfType* checkInnerType, BfType* checkOuterType); diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index bc7b12e0..92df2786 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -6613,7 +6613,7 @@ void BfModule::HandleMethodGenericParamRef(BfAstNode* refNode, BfTypeDef* typeDe mCompiler->mResolvePassData->HandleMethodGenericParam(refNode, typeDef, methodDef, methodGenericParamIdx); } -BfType* BfModule::ResolveInnerType(BfType* outerType, BfTypeReference* typeRef, BfPopulateType populateType, bool ignoreErrors, int numGenericArgs) +BfType* BfModule::ResolveInnerType(BfType* outerType, BfAstNode* typeRef, BfPopulateType populateType, bool ignoreErrors, int numGenericArgs) { BfTypeDef* nestedTypeDef = NULL; @@ -6623,6 +6623,7 @@ BfType* BfModule::ResolveInnerType(BfType* outerType, BfTypeReference* typeRef, BfNamedTypeReference* namedTypeRef = NULL; BfGenericInstanceTypeRef* genericTypeRef = NULL; BfDirectStrTypeReference* directStrTypeRef = NULL; + BfIdentifierNode* identifierNode = NULL; if ((namedTypeRef = BfNodeDynCast(typeRef))) { //TYPEDEF nestedTypeDef = namedTypeRef->mTypeDef; @@ -6632,12 +6633,16 @@ BfType* BfModule::ResolveInnerType(BfType* outerType, BfTypeReference* typeRef, namedTypeRef = BfNodeDynCast(genericTypeRef->mElementType); //TYPEDEF nestedTypeDef = namedTypeRef->mTypeDef; } + else if ((identifierNode = BfNodeDynCast(typeRef))) + { + //TYPEDEF nestedTypeDef = namedTypeRef->mTypeDef; + } else if ((directStrTypeRef = BfNodeDynCast(typeRef))) { // } - BF_ASSERT((namedTypeRef != NULL) || (directStrTypeRef != NULL)); + BF_ASSERT((identifierNode != NULL) || (namedTypeRef != NULL) || (directStrTypeRef != NULL)); auto usedOuterType = outerType; if (nestedTypeDef == NULL) @@ -6645,6 +6650,8 @@ BfType* BfModule::ResolveInnerType(BfType* outerType, BfTypeReference* typeRef, StringView findName; if (namedTypeRef != NULL) findName = namedTypeRef->mNameNode->ToStringView(); + else if (identifierNode != NULL) + findName = identifierNode->ToStringView(); else findName = directStrTypeRef->mTypeName; @@ -6744,7 +6751,7 @@ BfType* BfModule::ResolveInnerType(BfType* outerType, BfTypeReference* typeRef, genericArgs.clear(); } else - { + { ShowGenericArgCountError(typeRef, (int)nestedTypeDef->mGenericParamDefs.size() - (int)nestedTypeDef->mOuterType->mGenericParamDefs.size()); return NULL; } @@ -8083,7 +8090,7 @@ void BfModule::ShowAmbiguousTypeError(BfAstNode* refNode, BfTypeDef* typeDef, Bf } } -void BfModule::ShowGenericArgCountError(BfTypeReference* typeRef, int wantedGenericParams) +void BfModule::ShowGenericArgCountError(BfAstNode* typeRef, int wantedGenericParams) { BfGenericInstanceTypeRef* genericTypeInstRef = BfNodeDynCast(typeRef); @@ -10363,15 +10370,6 @@ BfTypeInstance* BfModule::GetUnspecializedTypeInstance(BfTypeInstance* typeInst) return result->ToTypeInstance(); } -BfType* BfModule::ResolveInnerType(BfType* outerType, BfIdentifierNode* identifier, BfPopulateType populateType, bool ignoreErrors) -{ - BfDirectStrTypeReference typeRef; - typeRef.Init(identifier->ToString()); - // There is no ref node so we ignore errors - auto type = ResolveInnerType(outerType, &typeRef, populateType, /*ignoreErrors*/true); - return type; -} - BfType* BfModule::ResolveTypeRef(BfAstNode* astNode, const BfSizedArray* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags) { if ((genericArgs == NULL) || (genericArgs->size() == 0)) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp index 1c7e43b3..174e9ac9 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.cpp +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.cpp @@ -4548,8 +4548,15 @@ void BfTypeUtils::PopulateType(BfModule* module, BfType* type) module->PopulateType(type); } -String BfTypeUtils::TypeToString(BfTypeReference* typeRef) +String BfTypeUtils::TypeToString(BfAstNode* typeRefNode) { + if (auto identifierNode = BfNodeDynCast(typeRefNode)) + return identifierNode->ToString(); + + auto typeRef = BfNodeDynCast(typeRefNode); + if (typeRef == NULL) + return ""; + if (auto typeDefTypeRef = BfNodeDynCast(typeRef)) { if (!typeDefTypeRef->mTypeDef->mNamespace.IsEmpty()) diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.h b/IDEHelper/Compiler/BfResolvedTypeUtils.h index f6a7f424..4da171c0 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.h +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.h @@ -2553,7 +2553,7 @@ class BfTypeUtils { public: static String HashEncode64(uint64 val); // Note: this only encodes 60 bits - static String TypeToString(BfTypeReference* typeRef); + static String TypeToString(BfAstNode* typeRef); static String TypeToString(BfTypeDef* typeDef, BfTypeNameFlags typeNameFlags = BfTypeNameFlags_None); static bool TypeToString(StringImpl& str, BfTypeDef* typeDef, BfTypeNameFlags typeNameFlags = BfTypeNameFlags_None); static bool TypeEquals(BfType* typeA, BfType* typeB, BfType* selfType);