Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(194)

Unified Diff: tools/gn/args.cc

Issue 984353002: Makes declared_arguments per toolchain (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/gn/args.cc
diff --git a/tools/gn/args.cc b/tools/gn/args.cc
index 2a1509a4cbe11ff60e51a3e4dc95ce1a4a7032f3..ced8b70c6cf22148cce4143e9dfc8036b8521715 100644
--- a/tools/gn/args.cc
+++ b/tools/gn/args.cc
@@ -72,7 +72,8 @@ Args::Args() {
Args::Args(const Args& other)
: overrides_(other.overrides_),
all_overrides_(other.all_overrides_),
- declared_arguments_(other.declared_arguments_) {
+ declared_arguments_per_toolchain_(
+ other.declared_arguments_per_toolchain_) {
}
Args::~Args() {
@@ -124,6 +125,8 @@ bool Args::DeclareArgs(const Scope::KeyValueMap& args,
Err* err) const {
base::AutoLock lock(lock_);
+ Scope::KeyValueMap& declared_arguments(
+ DeclaredArgumentsForToolchain(scope_to_set));
for (const auto& arg : args) {
// Verify that the value hasn't already been declared. We want each value
// to be declared only once.
@@ -132,8 +135,8 @@ bool Args::DeclareArgs(const Scope::KeyValueMap& args,
// when used from different toolchains, so we can't just check that we've
// seen it before. Instead, we check that the location matches.
Scope::KeyValueMap::iterator previously_declared =
- declared_arguments_.find(arg.first);
- if (previously_declared != declared_arguments_.end()) {
+ declared_arguments.find(arg.first);
+ if (previously_declared != declared_arguments.end()) {
if (previously_declared->second.origin() != arg.second.origin()) {
// Declaration location mismatch.
*err = Err(arg.second.origin(),
@@ -151,7 +154,7 @@ bool Args::DeclareArgs(const Scope::KeyValueMap& args,
return false;
}
} else {
- declared_arguments_.insert(arg);
+ declared_arguments.insert(arg);
}
// Only set on the current scope to the new value if it hasn't been already
@@ -168,9 +171,22 @@ bool Args::DeclareArgs(const Scope::KeyValueMap& args,
bool Args::VerifyAllOverridesUsed(Err* err) const {
base::AutoLock lock(lock_);
- return VerifyAllOverridesUsed(all_overrides_, declared_arguments_, err);
+ for (const auto& map_pair : declared_arguments_per_toolchain_) {
+ if (!VerifyAllOverridesUsed(all_overrides_, map_pair.second, err))
brettw 2015/03/14 05:14:32 I don't think this is quite right. We want to retu
sky 2015/03/16 16:20:45 Done.
+ return false;
+ }
+ return true;
+}
+
+void Args::MergeDeclaredArguments(Scope::KeyValueMap* dest) const {
+ base::AutoLock lock(lock_);
+ for (const auto& map_pair : declared_arguments_per_toolchain_) {
+ for (const auto& arg : map_pair.second)
+ (*dest)[arg.first] = arg.second;
+ }
}
+// static
bool Args::VerifyAllOverridesUsed(
const Scope::KeyValueMap& overrides,
const Scope::KeyValueMap& declared_arguments,
@@ -201,12 +217,6 @@ bool Args::VerifyAllOverridesUsed(
return true;
}
-void Args::MergeDeclaredArguments(Scope::KeyValueMap* dest) const {
- base::AutoLock lock(lock_);
- for (const auto& arg : declared_arguments_)
- (*dest)[arg.first] = arg.second;
-}
-
void Args::SetSystemVarsLocked(Scope* dest) const {
lock_.AssertAcquired();
@@ -257,12 +267,13 @@ void Args::SetSystemVarsLocked(Scope* dest) const {
dest->SetValue(variables::kTargetCpu, empty_string, nullptr);
dest->SetValue(variables::kCurrentCpu, empty_string, nullptr);
- declared_arguments_[variables::kHostOs] = os_val;
- declared_arguments_[variables::kCurrentOs] = empty_string;
- declared_arguments_[variables::kTargetOs] = empty_string;
- declared_arguments_[variables::kHostCpu] = arch_val;
- declared_arguments_[variables::kCurrentCpu] = empty_string;
- declared_arguments_[variables::kTargetCpu] = empty_string;
+ Scope::KeyValueMap& declared_arguments(DeclaredArgumentsForToolchain(dest));
+ declared_arguments[variables::kHostOs] = os_val;
+ declared_arguments[variables::kCurrentOs] = empty_string;
+ declared_arguments[variables::kTargetOs] = empty_string;
+ declared_arguments[variables::kHostCpu] = arch_val;
+ declared_arguments[variables::kCurrentCpu] = empty_string;
+ declared_arguments[variables::kTargetCpu] = empty_string;
// Mark these variables used so the build config file can override them
// without geting a warning about overwriting an unused variable.
@@ -286,3 +297,8 @@ void Args::SaveOverrideRecordLocked(const Scope::KeyValueMap& values) const {
for (const auto& val : values)
all_overrides_[val.first] = val.second;
}
+
+Scope::KeyValueMap& Args::DeclaredArgumentsForToolchain(Scope* scope) const {
+ lock_.AssertAcquired();
+ return declared_arguments_per_toolchain_[scope->settings()];
+}
« tools/gn/args.h ('K') | « tools/gn/args.h ('k') | tools/gn/args_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698