diff --git a/IDEHelper/Backend/BeMCContext.cpp b/IDEHelper/Backend/BeMCContext.cpp index 9e594c11..55aad861 100644 --- a/IDEHelper/Backend/BeMCContext.cpp +++ b/IDEHelper/Backend/BeMCContext.cpp @@ -14739,7 +14739,7 @@ void BeMCContext::Generate(BeFunction* function) mDbgPreferredRegs[32] = X64Reg_R8;*/ //mDbgPreferredRegs[8] = X64Reg_RAX; - mDebugging = function->mName == "?Hey@Blurg@bf@@SAXXZ"; + //mDebugging = function->mName == "?Hey@Blurg@bf@@SAXXZ"; //"?ColorizeCodeString@IDEUtils@IDE@bf@@SAXPEAVString@System@3@W4CodeKind@123@@Z"; //"?Main@Program@bf@@CAHPEAV?$Array1@PEAVString@System@bf@@@System@2@@Z"; diff --git a/IDEHelper/Compiler/BfCodeGen.cpp b/IDEHelper/Compiler/BfCodeGen.cpp index 10d5f2ae..8a59f463 100644 --- a/IDEHelper/Compiler/BfCodeGen.cpp +++ b/IDEHelper/Compiler/BfCodeGen.cpp @@ -449,7 +449,7 @@ void BfCodeGenThread::RunLoop() DoBfLog(2, "Generating obj %s\n", request->mOutFileName.c_str()); BeCOFFObject coffObject; - coffObject.mWriteToLib = (request->mOptions.mWriteToLib) && (!request->mOptions.mIsHotCompile); + coffObject.mWriteToLib = request->mOptions.mWriteToLib; if (!coffObject.Generate(beIRCodeGen->mBeModule, objFileName)) errorMsg = StrFormat("Failed to write object file: %s", objFileName.c_str()); diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 600ec3bc..5770167d 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -3949,7 +3949,15 @@ void BfCompiler::ProcessAutocompleteTempType() auto propDeclaration = BfNodeDynCast(propDef->mFieldDeclaration); if (propDeclaration != NULL) autoComplete->CheckProperty(propDeclaration); - module->ResolveTypeRef(propDef->mTypeRef, BfPopulateType_Data, BfResolveTypeRefFlag_AllowRef); + module->ResolveTypeRef(propDef->mTypeRef, BfPopulateType_Identity, BfResolveTypeRefFlag_AllowRef); + + if (auto indexerDeclaration = BfNodeDynCast(propDef->mFieldDeclaration)) + { + for (auto paramDecl : indexerDeclaration->mParams) + { + module->ResolveTypeRef(paramDecl->mTypeRef, BfPopulateType_Identity); + } + } if ((autoComplete->mIsGetDefinition) && (propDef->mFieldDeclaration != NULL) && (autoComplete->IsAutocompleteNode(propDef->mFieldDeclaration->mNameNode))) { @@ -6520,19 +6528,24 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory) #ifdef BF_PLATFORM_WINDOWS if (!mIsResolveOnly) - { - for (auto mainModule : mContext->mModules) - { - BfModule* bfModule = mainModule; - if (bfModule->mIsReified) + { + if (!IsHotCompile()) + { + // Remove individually-written object files from any libs that previously had them, + // in the case that lib settings changed (ie: switching a module from Og+ to O0) + for (auto mainModule : mContext->mModules) { - for (auto outFileName : bfModule->mOutFileNames) + BfModule* bfModule = mainModule; + if (bfModule->mIsReified) { - if (outFileName.mModuleWritten) - BeLibManager::Get()->AddUsedFileName(outFileName.mFileName); + for (auto outFileName : bfModule->mOutFileNames) + { + if (outFileName.mModuleWritten) + BeLibManager::Get()->AddUsedFileName(outFileName.mFileName); + } } } - } + } auto libManager = BeLibManager::Get(); libManager->Finish(); diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 392dbd2b..6195e039 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -19350,7 +19350,6 @@ void BfModule::DoMethodDeclaration(BfMethodDeclaration* methodDeclaration, bool bool wasGenericParam = false; if (resolvedParamType == NULL) { - SetAndRestoreValue prevIngoreErrors(mIgnoreErrors, mIgnoreErrors || (methodDef->GetPropertyDeclaration() != NULL)); resolvedParamType = ResolveTypeRef(paramDef->mTypeRef, BfPopulateType_Declaration, (BfResolveTypeRefFlags)(BfResolveTypeRefFlag_NoResolveGenericParam | BfResolveTypeRefFlag_AllowRef | BfResolveTypeRefFlag_AllowRefGeneric | BfResolveTypeRefFlag_AllowGenericMethodParamConstValue)); } @@ -21011,7 +21010,8 @@ bool BfModule::Finish() mCompiler->mStats.mConstBytes += mBfIRBuilder->mTempAlloc.GetAllocSize(); bool allowWriteToLib = true; - if ((allowWriteToLib) && (codeGenOptions.mOptLevel == BfOptLevel_OgPlus) && (mModuleName != "vdata")) + if ((allowWriteToLib) && (codeGenOptions.mOptLevel == BfOptLevel_OgPlus) && + (!mCompiler->IsHotCompile()) && (mModuleName != "vdata")) { codeGenOptions.mWriteToLib = true; mWroteToLib = true; @@ -21065,15 +21065,9 @@ bool BfModule::Finish() if (mCompiler->IsHotCompile()) { codeGenOptions.mIsHotCompile = true; - //TODO: Why did we have this 'mWroteToLib' check? 'vdata' didn't get this flag set, which - // is required for rebuilding vdata after we hot create a vdata - //if (mWroteToLib) - - { - if (mParentModule != NULL) - mParentModule->mHadHotObjectWrites = true; - mHadHotObjectWrites = true; - } + if (mParentModule != NULL) + mParentModule->mHadHotObjectWrites = true; + mHadHotObjectWrites = true; }