GN: Use std::unique_ptr in Loader::ToolchainRecordMap. BUG=602726 Review URL: https://codereview.chromium.org/1878353002 Cr-Original-Commit-Position: refs/heads/master@{#388015} Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src Cr-Mirrored-Commit: f9b6b5ae0cd8396663e5c1b06468384fc9d89688
diff --git a/tools/gn/loader.cc b/tools/gn/loader.cc index 9061be8..3ac868c 100644 --- a/tools/gn/loader.cc +++ b/tools/gn/loader.cc
@@ -7,7 +7,6 @@ #include "base/bind.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" -#include "base/stl_util.h" #include "tools/gn/build_settings.h" #include "tools/gn/err.h" #include "tools/gn/filesystem_utils.h" @@ -106,8 +105,6 @@ } LoaderImpl::~LoaderImpl() { - STLDeleteContainerPairSecondPointers(toolchain_records_.begin(), - toolchain_records_.end()); } void LoaderImpl::Load(const SourceFile& file, @@ -120,13 +117,14 @@ return; // Already in set, so this file was already loaded or schedulerd. if (toolchain_records_.empty()) { - // Nothing loaded, need to load the default build config. The intial load + // Nothing loaded, need to load the default build config. The initial load // should not specify a toolchain. DCHECK(toolchain_name.is_null()); - ToolchainRecord* record = - new ToolchainRecord(build_settings_, Label(), Label()); - toolchain_records_[Label()] = record; + std::unique_ptr<ToolchainRecord> new_record( + new ToolchainRecord(build_settings_, Label(), Label())); + ToolchainRecord* record = new_record.get(); + toolchain_records_[Label()] = std::move(new_record); // The default build config is no dependent on the toolchain definition, // since we need to load the build config before we know what the default @@ -135,22 +133,24 @@ record->waiting_on_me.push_back(SourceFileAndOrigin(file, origin)); ScheduleLoadBuildConfig(&record->settings, Scope::KeyValueMap()); + return; } ToolchainRecord* record; if (toolchain_name.is_null()) - record = toolchain_records_[default_toolchain_label_]; + record = toolchain_records_[default_toolchain_label_].get(); else - record = toolchain_records_[toolchain_name]; + record = toolchain_records_[toolchain_name].get(); if (!record) { DCHECK(!default_toolchain_label_.is_null()); // No reference to this toolchain found yet, make one. - record = new ToolchainRecord(build_settings_, toolchain_name, - default_toolchain_label_); - toolchain_records_[toolchain_name] = record; + std::unique_ptr<ToolchainRecord> new_record(new ToolchainRecord( + build_settings_, toolchain_name, default_toolchain_label_)); + record = new_record.get(); + toolchain_records_[toolchain_name] = std::move(new_record); // Schedule a load of the toolchain using the default one. Load(BuildFileForLabel(toolchain_name), origin, default_toolchain_label_); @@ -163,12 +163,13 @@ } void LoaderImpl::ToolchainLoaded(const Toolchain* toolchain) { - ToolchainRecord* record = toolchain_records_[toolchain->label()]; + ToolchainRecord* record = toolchain_records_[toolchain->label()].get(); if (!record) { DCHECK(!default_toolchain_label_.is_null()); - record = new ToolchainRecord(build_settings_, toolchain->label(), - default_toolchain_label_); - toolchain_records_[toolchain->label()] = record; + std::unique_ptr<ToolchainRecord> new_record(new ToolchainRecord( + build_settings_, toolchain->label(), default_toolchain_label_)); + record = new_record.get(); + toolchain_records_[toolchain->label()] = std::move(new_record); } record->is_toolchain_loaded = true; @@ -356,8 +357,10 @@ CHECK(empty_label != toolchain_records_.end()); // Fix up the toolchain record. - record = empty_label->second; - toolchain_records_[label] = record; + std::unique_ptr<ToolchainRecord> moved_record = + std::move(empty_label->second); + record = moved_record.get(); + toolchain_records_[label] = std::move(moved_record); toolchain_records_.erase(empty_label); // Save the default toolchain label. @@ -383,7 +386,7 @@ } } } else { - record = found_toolchain->second; + record = found_toolchain->second.get(); } DCHECK(!record->is_config_loaded);
diff --git a/tools/gn/loader.h b/tools/gn/loader.h index 3d61fe4..37f7085 100644 --- a/tools/gn/loader.h +++ b/tools/gn/loader.h
@@ -6,6 +6,7 @@ #define TOOLS_GN_LOADER_H_ #include <map> +#include <memory> #include <set> #include "base/callback.h" @@ -173,8 +174,7 @@ Label default_toolchain_label_; // Records for the build config file loads. - // Owning pointers. - typedef std::map<Label, ToolchainRecord*> ToolchainRecordMap; + typedef std::map<Label, std::unique_ptr<ToolchainRecord>> ToolchainRecordMap; ToolchainRecordMap toolchain_records_; };