From 85b4afcd94faa0bb8188bbc68ead46ddfb2d3688 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 11 Aug 2020 12:14:47 -0700 Subject: [PATCH] Tightened std type lookup requirements, fixed reified redecl issue --- IDEHelper/Compiler/BfCompiler.cpp | 10 +++++----- IDEHelper/Compiler/BfContext.cpp | 21 ++++++++++++++++----- IDEHelper/Compiler/BfModule.cpp | 7 +++++-- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 182290bd..93924dc0 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -6231,10 +6231,10 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory) return typeDef; }; - mArray1TypeDef = _GetRequiredType("System.Array1"); - mArray2TypeDef = _GetRequiredType("System.Array2"); - mArray3TypeDef = _GetRequiredType("System.Array3"); - mArray4TypeDef = _GetRequiredType("System.Array4"); + mArray1TypeDef = _GetRequiredType("System.Array1", 1); + mArray2TypeDef = _GetRequiredType("System.Array2", 1); + mArray3TypeDef = _GetRequiredType("System.Array3", 1); + mArray4TypeDef = _GetRequiredType("System.Array4", 1); mSpanTypeDef = _GetRequiredType("System.Span", 1); mAttributeTypeDef = _GetRequiredType("System.Attribute"); mAttributeUsageAttributeTypeDef = _GetRequiredType("System.AttributeUsageAttribute"); @@ -6270,7 +6270,7 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory) mLinkNameAttributeTypeDef = _GetRequiredType("System.LinkNameAttribute"); mCallingConventionAttributeTypeDef = _GetRequiredType("System.CallingConventionAttribute"); mMethodRefTypeDef = _GetRequiredType("System.MethodReference", 1); - mNullableTypeDef = _GetRequiredType("System.Nullable"); + mNullableTypeDef = _GetRequiredType("System.Nullable", 1); mOrderedAttributeTypeDef = _GetRequiredType("System.OrderedAttribute"); mPointerTTypeDef = _GetRequiredType("System.Pointer", 1); mPointerTypeDef = _GetRequiredType("System.Pointer", 0); diff --git a/IDEHelper/Compiler/BfContext.cpp b/IDEHelper/Compiler/BfContext.cpp index e1f84c64..ee2ce51b 100644 --- a/IDEHelper/Compiler/BfContext.cpp +++ b/IDEHelper/Compiler/BfContext.cpp @@ -2188,12 +2188,13 @@ void BfContext::GenerateModuleName_TypeInst(BfTypeInstance* typeInst, String& na return; } - for (int genericIdx = startGenericIdx; genericIdx < (int)typeInst->mTypeDef->mGenericParamDefs.size(); genericIdx++) + if (typeInst->mGenericTypeInfo != NULL) { - auto genericType = (BfTypeInstance*)typeInst; - - auto type = genericType->mGenericTypeInfo->mTypeGenericArguments[genericIdx]; - GenerateModuleName_Type(type, name); + for (int genericIdx = startGenericIdx; genericIdx < (int)typeInst->mGenericTypeInfo->mTypeGenericArguments.size(); genericIdx++) + { + auto type = typeInst->mGenericTypeInfo->mTypeGenericArguments[genericIdx]; + GenerateModuleName_Type(type, name); + } } } @@ -2363,6 +2364,11 @@ void BfContext::QueueMethodSpecializations(BfTypeInstance* typeInst, bool checkS BP_ZONE("BfContext::QueueMethodSpecializations"); + if (typeInst->mTypeId == 578) + { + NOP; + } + auto module = typeInst->mModule; if (module == NULL) return; @@ -2408,6 +2414,11 @@ void BfContext::QueueMethodSpecializations(BfTypeInstance* typeInst, bool checkS auto methodDef = methodRef.mTypeInstance->mTypeDef->mMethods[methodRef.mMethodNum]; + if (methodDef->mName == "set__Capacity") + { + NOP; + } + auto targetContext = methodRef.mTypeInstance->mContext; BfMethodSpecializationRequest* specializationRequest = targetContext->mMethodSpecializationWorkList.Alloc(); if (specializedMethodRefInfo.mHasReifiedRef) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index e08b33ce..10cf5256 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -11448,8 +11448,9 @@ bool BfModule::IsCompatibleInterfaceMethod(BfMethodInstance* iMethodInst, BfMeth } void BfModule::AddMethodReference(const BfMethodRef& methodRef, BfGetMethodInstanceFlags flags) -{ +{ BfMethodInstance* methodInstance = methodRef; + if ((mCurTypeInstance != NULL) && (!mCompiler->IsAutocomplete())) { auto methodInstanceGroup = methodInstance->mMethodInstanceGroup; @@ -11665,7 +11666,7 @@ BfModule* BfModule::GetOrCreateMethodModule(BfMethodInstance* methodInstance) } BfModuleMethodInstance BfModule::GetMethodInstance(BfTypeInstance* typeInst, BfMethodDef* methodDef, const BfTypeVector& methodGenericArguments, BfGetMethodInstanceFlags flags, BfTypeInstance* foreignType) -{ +{ if (((flags & BfGetMethodInstanceFlag_ForceInline) != 0) && (mCompiler->mIsResolveOnly)) { // Don't bother inlining for resolve-only @@ -12300,6 +12301,8 @@ BfModuleMethodInstance BfModule::GetMethodInstance(BfTypeInstance* typeInst, BfM } BfModule* declareModule = GetOrCreateMethodModule(methodInstance); + if ((doingRedeclare) && (methodInstance->mDeclModule != mContext->mUnreifiedModule)) + declareModule = methodInstance->mDeclModule; BF_ASSERT(typeInst == methodInstance->GetOwner());