From 8659afa9446c1f635198be868b7cad5547f154c0 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 4 Sep 2019 11:17:23 -0700 Subject: [PATCH] Fixed build cache error, fixed ordered hash bug Fixed error writing to build.bat when build directory was externally cleared Fixed ordered hash errors where the fields were added but the hash didn't change --- IDEHelper/Backend/BeIRCodeGen.cpp | 24 +++++++++++++++++++++++- IDEHelper/Compiler/BfCodeGen.cpp | 9 +++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Backend/BeIRCodeGen.cpp b/IDEHelper/Backend/BeIRCodeGen.cpp index 76ce9ded..89da21bd 100644 --- a/IDEHelper/Backend/BeIRCodeGen.cpp +++ b/IDEHelper/Backend/BeIRCodeGen.cpp @@ -244,7 +244,29 @@ void BeIRCodeGen::Hash(BeHashContext& hashCtx) hashCtx.Mixin(mPtrSize); hashCtx.Mixin(mIsOptimized); if (mBeModule != NULL) - mBeModule->Hash(hashCtx); + mBeModule->Hash(hashCtx); + + Array structHashList; + + for (auto beType : mBeContext->mTypes) + { + if (!beType->IsStruct()) + continue; + auto beStructType = (BeStructType*)beType; + if (beStructType->mHashId != -1) + continue; + structHashList.Add(beStructType); + } + + structHashList.Sort([](BeStructType* lhs, BeStructType* rhs) + { + return lhs->mName < rhs->mName; + }); + + for (auto beStructType : structHashList) + { + beStructType->HashReference(hashCtx); + } } bool BeIRCodeGen::IsModuleEmpty() diff --git a/IDEHelper/Compiler/BfCodeGen.cpp b/IDEHelper/Compiler/BfCodeGen.cpp index 63d3ab00..ac048b3b 100644 --- a/IDEHelper/Compiler/BfCodeGen.cpp +++ b/IDEHelper/Compiler/BfCodeGen.cpp @@ -112,6 +112,15 @@ void BfCodeGenDirectoryData::Write() String fileName = GetDataFileName(); if (!fileStream.Open(fileName, "wb")) { + String directory = GetFileDir(fileName); + if (!DirectoryExists(directory)) + { + // Someone else (or the user) cleared this directory + DoBfLog(2, "BfCodeGen cleared cache because '%s' was removed\n", directory.c_str()); + mFileMap.Clear(); + return; + } + mError = "Failed to write to " + fileName; return; }