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

Unified Diff: tools/gn/builder.cc

Issue 26537002: Add a UniqueVector class to GN (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: REview comments, remove npos Created 6 years, 4 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
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/command_desc.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/builder.cc
diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
index 50a027b389de3352afe54e67329c9ed2310a980e..d498b108e1bf02d9cc1198c1c676d66b68c2f463 100644
--- a/tools/gn/builder.cc
+++ b/tools/gn/builder.cc
@@ -228,7 +228,7 @@ bool Builder::TargetDefined(BuilderRecord* record, Err* err) {
if (!AddDeps(record, target->deps(), err) ||
!AddDeps(record, target->datadeps(), err) ||
- !AddDeps(record, target->configs(), err) ||
+ !AddDeps(record, target->configs().vector(), err) ||
!AddDeps(record, target->all_dependent_configs(), err) ||
!AddDeps(record, target->direct_dependent_configs(), err) ||
!AddToolchainDep(record, target, err))
@@ -337,6 +337,19 @@ bool Builder::AddDeps(BuilderRecord* record,
}
bool Builder::AddDeps(BuilderRecord* record,
+ const UniqueVector<LabelConfigPair>& configs,
+ Err* err) {
+ for (size_t i = 0; i < configs.size(); i++) {
+ BuilderRecord* dep_record = GetOrCreateRecordOfType(
+ configs[i].label, configs[i].origin, BuilderRecord::ITEM_CONFIG, err);
+ if (!dep_record)
+ return false;
+ record->AddDep(dep_record);
+ }
+ return true;
+}
+
+bool Builder::AddDeps(BuilderRecord* record,
const LabelTargetVector& targets,
Err* err) {
for (size_t i = 0; i < targets.size(); i++) {
@@ -440,16 +453,16 @@ bool Builder::ResolveDeps(LabelTargetVector* deps, Err* err) {
return true;
}
-bool Builder::ResolveConfigs(LabelConfigVector* configs, Err* err) {
+bool Builder::ResolveConfigs(UniqueVector<LabelConfigPair>* configs, Err* err) {
for (size_t i = 0; i < configs->size(); i++) {
- LabelConfigPair& cur = (*configs)[i];
+ const LabelConfigPair& cur = (*configs)[i];
DCHECK(!cur.ptr);
BuilderRecord* record = GetResolvedRecordOfType(
cur.label, cur.origin, BuilderRecord::ITEM_CONFIG, err);
if (!record)
return false;
- cur.ptr = record->item()->AsConfig();
+ const_cast<LabelConfigPair&>(cur).ptr = record->item()->AsConfig();
}
return true;
}
@@ -458,14 +471,18 @@ bool Builder::ResolveConfigs(LabelConfigVector* configs, Err* err) {
// have their configs forwarded.
bool Builder::ResolveForwardDependentConfigs(Target* target, Err* err) {
const LabelTargetVector& deps = target->deps();
- LabelTargetVector& configs = target->forward_dependent_configs();
+ const UniqueVector<LabelTargetPair>& configs =
+ target->forward_dependent_configs();
// Assume that the lists are small so that brute-force n^2 is appropriate.
for (size_t config_i = 0; config_i < configs.size(); config_i++) {
for (size_t dep_i = 0; dep_i < deps.size(); dep_i++) {
if (configs[config_i].label == deps[dep_i].label) {
DCHECK(deps[dep_i].ptr); // Should already be resolved.
- configs[config_i].ptr = deps[dep_i].ptr;
+ // UniqueVector's contents are constant so uniqueness is preserved, but
+ // we want to update this pointer which doesn't change uniqueness
+ // (uniqueness in this vector is determined by the label only).
+ const_cast<LabelTargetPair&>(configs[config_i]).ptr = deps[dep_i].ptr;
break;
}
}
« no previous file with comments | « tools/gn/builder.h ('k') | tools/gn/command_desc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698