Преглед на файлове

Fixed mDeclModule changes from this morning

Brian Fiete преди 6 години
родител
ревизия
43b78a6c25
променени са 3 файла, в които са добавени 21 реда и са изтрити 15 реда
  1. 18 13
      IDEHelper/Compiler/BfModule.cpp
  2. 1 0
      IDEHelper/Compiler/BfModule.h
  3. 2 2
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 18 - 13
IDEHelper/Compiler/BfModule.cpp

@@ -1063,6 +1063,22 @@ void BfModule::Cleanup()
 	CleanupFileInstances();
 	CleanupFileInstances();
 }
 }
 
 
+void BfModule::PrepareForIRWriting(BfTypeInstance* typeInst)
+{
+	if (HasCompiledOutput())
+	{
+		// It's possible that the target's code hasn't changed but we're requesting a new generic method specialization		
+		if ((!mIsModuleMutable) && (!typeInst->IsUnspecializedType()) && (!typeInst->mResolvingVarField))
+		{
+			StartExtension();
+		}
+	}
+	else
+	{
+		EnsureIRBuilder();
+	}
+}
+
 void BfModule::EnsureIRBuilder(bool dbgVerifyCodeGen)
 void BfModule::EnsureIRBuilder(bool dbgVerifyCodeGen)
 {
 {
 	BF_ASSERT(!mIsDeleting);
 	BF_ASSERT(!mIsDeleting);
@@ -10569,19 +10585,7 @@ BfModuleMethodInstance BfModule::ReferenceExternalMethodInstance(BfMethodInstanc
 BfModule* BfModule::GetOrCreateMethodModule(BfMethodInstance* methodInstance)
 BfModule* BfModule::GetOrCreateMethodModule(BfMethodInstance* methodInstance)
 {
 {
 	BfTypeInstance* typeInst = methodInstance->mMethodInstanceGroup->mOwner;
 	BfTypeInstance* typeInst = methodInstance->mMethodInstanceGroup->mOwner;
-	if (HasCompiledOutput())
-	{
-		// It's possible that the target's code hasn't changed but we're requesting a new generic method specialization		
-		if ((!mIsModuleMutable) && (!typeInst->IsUnspecializedType()) && (!typeInst->mResolvingVarField))
-		{			
-			StartExtension();
-		}
-	}
-	else
-	{
-		EnsureIRBuilder();
-	}
-	
+		
 	BfModule* declareModule = this;
 	BfModule* declareModule = this;
 	// Get to the optionless branch head -- but this could still be a specialized method module, not the true root
 	// Get to the optionless branch head -- but this could still be a specialized method module, not the true root
 	while ((declareModule->mParentModule != NULL) && (!declareModule->mIsSpecializedMethodModuleRoot))
 	while ((declareModule->mParentModule != NULL) && (!declareModule->mIsSpecializedMethodModuleRoot))
@@ -10678,6 +10682,7 @@ BfModule* BfModule::GetOrCreateMethodModule(BfMethodInstance* methodInstance)
 		}
 		}
 	}	
 	}	
 
 
+	declareModule->PrepareForIRWriting(typeInst);
 	return declareModule;
 	return declareModule;
 }
 }
 
 

+ 1 - 0
IDEHelper/Compiler/BfModule.h

@@ -1735,6 +1735,7 @@ public:
 	void UnreifyModule();
 	void UnreifyModule();
 	void Cleanup();
 	void Cleanup();
 	void StartNewRevision(RebuildKind rebuildKind = RebuildKind_All, bool force = false);
 	void StartNewRevision(RebuildKind rebuildKind = RebuildKind_All, bool force = false);
+	void PrepareForIRWriting(BfTypeInstance* typeInst);
 	void EnsureIRBuilder(bool dbgVerifyCodeGen = false);
 	void EnsureIRBuilder(bool dbgVerifyCodeGen = false);
 	void DbgFinish();
 	void DbgFinish();
 	BfIRValue CreateForceLinkMarker(BfModule* module, String* outName);
 	BfIRValue CreateForceLinkMarker(BfModule* module, String* outName);

+ 2 - 2
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -4097,10 +4097,10 @@ void BfModule::AddMethodToWorkList(BfMethodInstance* methodInstance)
 		return;
 		return;
 	}
 	}
 
 
-	if ((!mCompiler->mIsResolveOnly) && (!methodInstance->mIRFunction) && (methodInstance->mIsReified) && (!methodInstance->mIsUnspecialized))
+	if ((!methodInstance->mIRFunction) && (methodInstance->mIsReified) && (!methodInstance->mIsUnspecialized))
 	{
 	{
 		if (!mIsModuleMutable)
 		if (!mIsModuleMutable)
-			StartExtension();
+			PrepareForIRWriting(methodInstance->GetOwner());
 
 
 		BfIRValue func = CreateFunctionFrom(methodInstance, false, methodInstance->mAlwaysInline);
 		BfIRValue func = CreateFunctionFrom(methodInstance, false, methodInstance->mAlwaysInline);
 		methodInstance->mIRFunction = func;
 		methodInstance->mIRFunction = func;