From 833d9eae4e49ef7b9055c709fd8a6959588952c3 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 29 Jul 2019 10:06:18 -0400 Subject: fileapi: Refactor codemodel defines de-duplication --- Source/cmFileAPICodemodel.cxx | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/Source/cmFileAPICodemodel.cxx b/Source/cmFileAPICodemodel.cxx index 0c4f5c4..9ff8ffa 100644 --- a/Source/cmFileAPICodemodel.cxx +++ b/Source/cmFileAPICodemodel.cxx @@ -231,8 +231,6 @@ struct CompileData } }; - void SetDefines(std::set> const& defines); - std::string Language; std::string Sysroot; std::vector> Flags; @@ -240,14 +238,6 @@ struct CompileData std::vector Includes; }; -void CompileData::SetDefines(std::set> const& defines) -{ - this->Defines.reserve(defines.size()); - for (BT const& d : defines) { - this->Defines.push_back(d); - } -} - class Target { cmGeneratorTarget* GT; @@ -726,7 +716,10 @@ void Target::ProcessLanguage(std::string const& lang) } std::set> defines = lg->GetTargetDefines(this->GT, this->Config, lang); - cd.SetDefines(defines); + cd.Defines.reserve(defines.size()); + for (BT const& d : defines) { + cd.Defines.emplace_back(d); + } std::vector> includePathList = lg->GetIncludeDirectories(this->GT, lang, this->Config); for (BT const& i : includePathList) { @@ -814,11 +807,16 @@ CompileData Target::BuildCompileData(cmSourceFile* sf) genexInterpreter.Evaluate(config_defs, COMPILE_DEFINITIONS)); } - std::set> defines; - defines.insert(fileDefines.begin(), fileDefines.end()); - defines.insert(cd.Defines.begin(), cd.Defines.end()); + fd.Defines.reserve(cd.Defines.size() + fileDefines.size()); + fd.Defines = cd.Defines; + for (std::string const& d : fileDefines) { + fd.Defines.emplace_back(d, cmListFileBacktrace()); + } - fd.SetDefines(defines); + // De-duplicate defines. + std::stable_sort(fd.Defines.begin(), fd.Defines.end()); + auto end = std::unique(fd.Defines.begin(), fd.Defines.end()); + fd.Defines.erase(end, fd.Defines.end()); return fd; } -- cgit v0.12