Просмотр исходного кода

Fixed field initialization in structs with extensions

Brian Fiete 4 лет назад
Родитель
Сommit
994640df11
1 измененных файлов с 6 добавлено и 2 удалено
  1. 6 2
      IDEHelper/Compiler/BfModule.cpp

+ 6 - 2
IDEHelper/Compiler/BfModule.cpp

@@ -15556,7 +15556,7 @@ void BfModule::EmitCtorBody(bool& skipBody)
 
 				calledCtorNoBody = true;
 			}
-		}		
+		}
 	}
 
 	// Initialize fields (if applicable)
@@ -15568,7 +15568,7 @@ void BfModule::EmitCtorBody(bool& skipBody)
 	{
 		// Field initializers occur in CtorNoBody methods for extensions
 	}
-	else if ((!hadThisInitializer) && (!calledCtorNoBody))
+	else if (!hadThisInitializer)
 	{
 		// If we had a 'this' initializer, that other ctor will have initialized our fields
 
@@ -15578,6 +15578,10 @@ void BfModule::EmitCtorBody(bool& skipBody)
 			(mCompiler->mResolvePassData->mAutoComplete == NULL) ||
 			(mCompiler->mResolvePassData->mAutoComplete->mResolveType == BfResolveType_ShowFileSymbolReferences))
 		{
+			// If we calledCtorNoBody then we did the field initializer code, but we still need to run though it here
+			//  to properly set the assigned flags
+			SetAndRestoreValue<bool> prevIgnoreWrites(mBfIRBuilder->mIgnoreWrites, mBfIRBuilder->mIgnoreWrites || calledCtorNoBody);
+
 			bool hadInlineInitBlock = false;
 			BfScopeData scopeData;