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

Side by Side Diff: tools/gn/scope.cc

Issue 1263053003: Add forward_variables_from() and target() to GN (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More spelling fixes Created 5 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 unified diff | Download patch
« no previous file with comments | « tools/gn/scope.h ('k') | tools/gn/scope_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/gn/scope.h" 5 #include "tools/gn/scope.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "tools/gn/parse_tree.h" 9 #include "tools/gn/parse_tree.h"
10 #include "tools/gn/template.h" 10 #include "tools/gn/template.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 item_collector_(nullptr) { 54 item_collector_(nullptr) {
55 } 55 }
56 56
57 Scope::~Scope() { 57 Scope::~Scope() {
58 STLDeleteContainerPairSecondPointers(target_defaults_.begin(), 58 STLDeleteContainerPairSecondPointers(target_defaults_.begin(),
59 target_defaults_.end()); 59 target_defaults_.end());
60 } 60 }
61 61
62 const Value* Scope::GetValue(const base::StringPiece& ident, 62 const Value* Scope::GetValue(const base::StringPiece& ident,
63 bool counts_as_used) { 63 bool counts_as_used) {
64 // First check for programatically-provided values. 64 // First check for programmatically-provided values.
65 for (const auto& provider : programmatic_providers_) { 65 for (const auto& provider : programmatic_providers_) {
66 const Value* v = provider->GetProgrammaticValue(ident); 66 const Value* v = provider->GetProgrammaticValue(ident);
67 if (v) 67 if (v)
68 return v; 68 return v;
69 } 69 }
70 70
71 RecordMap::iterator found = values_.find(ident); 71 RecordMap::iterator found = values_.find(ident);
72 if (found != values_.end()) { 72 if (found != values_.end()) {
73 if (counts_as_used) 73 if (counts_as_used)
74 found->second.used = true; 74 found->second.used = true;
75 return &found->second.value; 75 return &found->second.value;
76 } 76 }
77 77
78 // Search in the parent scope. 78 // Search in the parent scope.
79 if (const_containing_) 79 if (const_containing_)
80 return const_containing_->GetValue(ident); 80 return const_containing_->GetValue(ident);
81 if (mutable_containing_) 81 if (mutable_containing_)
82 return mutable_containing_->GetValue(ident, counts_as_used); 82 return mutable_containing_->GetValue(ident, counts_as_used);
83 return nullptr; 83 return nullptr;
84 } 84 }
85 85
86 Value* Scope::GetMutableValue(const base::StringPiece& ident, 86 Value* Scope::GetMutableValue(const base::StringPiece& ident,
87 bool counts_as_used) { 87 bool counts_as_used) {
88 // Don't do programatic values, which are not mutable. 88 // Don't do programmatic values, which are not mutable.
89 RecordMap::iterator found = values_.find(ident); 89 RecordMap::iterator found = values_.find(ident);
90 if (found != values_.end()) { 90 if (found != values_.end()) {
91 if (counts_as_used) 91 if (counts_as_used)
92 found->second.used = true; 92 found->second.used = true;
93 return &found->second.value; 93 return &found->second.value;
94 } 94 }
95 95
96 // Search in the parent mutable scope, but not const one. 96 // Search in the parent mutable scope, but not const one.
97 if (mutable_containing_) 97 if (mutable_containing_)
98 return mutable_containing_->GetMutableValue(ident, counts_as_used); 98 return mutable_containing_->GetMutableValue(ident, counts_as_used);
(...skipping 10 matching lines...) Expand all
109 if (containing()) { 109 if (containing()) {
110 const Value* in_containing = containing()->GetValue(ident); 110 const Value* in_containing = containing()->GetValue(ident);
111 if (in_containing) { 111 if (in_containing) {
112 // Promote to current scope. 112 // Promote to current scope.
113 return SetValue(ident, *in_containing, set_node); 113 return SetValue(ident, *in_containing, set_node);
114 } 114 }
115 } 115 }
116 return nullptr; 116 return nullptr;
117 } 117 }
118 118
119 base::StringPiece Scope::GetStorageKey(const base::StringPiece& ident) const {
120 RecordMap::const_iterator found = values_.find(ident);
121 if (found != values_.end())
122 return found->first;
123
124 // Search in parent scope.
125 if (containing())
126 return containing()->GetStorageKey(ident);
127 return base::StringPiece();
128 }
129
119 const Value* Scope::GetValue(const base::StringPiece& ident) const { 130 const Value* Scope::GetValue(const base::StringPiece& ident) const {
120 RecordMap::const_iterator found = values_.find(ident); 131 RecordMap::const_iterator found = values_.find(ident);
121 if (found != values_.end()) 132 if (found != values_.end())
122 return &found->second.value; 133 return &found->second.value;
123 if (containing()) 134 if (containing())
124 return containing()->GetValue(ident); 135 return containing()->GetValue(ident);
125 return nullptr; 136 return nullptr;
126 } 137 }
127 138
128 Value* Scope::SetValue(const base::StringPiece& ident, 139 Value* Scope::SetValue(const base::StringPiece& ident,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 184
174 void Scope::MarkUsed(const base::StringPiece& ident) { 185 void Scope::MarkUsed(const base::StringPiece& ident) {
175 RecordMap::iterator found = values_.find(ident); 186 RecordMap::iterator found = values_.find(ident);
176 if (found == values_.end()) { 187 if (found == values_.end()) {
177 NOTREACHED(); 188 NOTREACHED();
178 return; 189 return;
179 } 190 }
180 found->second.used = true; 191 found->second.used = true;
181 } 192 }
182 193
194 void Scope::MarkAllUsed() {
195 for (auto& cur : values_)
196 cur.second.used = true;
197 }
198
183 void Scope::MarkUnused(const base::StringPiece& ident) { 199 void Scope::MarkUnused(const base::StringPiece& ident) {
184 RecordMap::iterator found = values_.find(ident); 200 RecordMap::iterator found = values_.find(ident);
185 if (found == values_.end()) { 201 if (found == values_.end()) {
186 NOTREACHED(); 202 NOTREACHED();
187 return; 203 return;
188 } 204 }
189 found->second.used = false; 205 found->second.used = false;
190 } 206 }
191 207
192 bool Scope::IsSetButUnused(const base::StringPiece& ident) const { 208 bool Scope::IsSetButUnused(const base::StringPiece& ident) const {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 err->AppendSubErr(Err(pair.second.value, "defined here.", 264 err->AppendSubErr(Err(pair.second.value, "defined here.",
249 "Which would clobber the one in your current scope")); 265 "Which would clobber the one in your current scope"));
250 err->AppendSubErr(Err(*existing_value, "defined here.", 266 err->AppendSubErr(Err(*existing_value, "defined here.",
251 "Executing " + desc_string + " should not conflict with anything " 267 "Executing " + desc_string + " should not conflict with anything "
252 "in the current\nscope unless the values are identical.")); 268 "in the current\nscope unless the values are identical."));
253 return false; 269 return false;
254 } 270 }
255 } 271 }
256 dest->values_[pair.first] = pair.second; 272 dest->values_[pair.first] = pair.second;
257 273
258 if (options.mark_used) 274 if (options.mark_dest_used)
259 dest->MarkUsed(pair.first); 275 dest->MarkUsed(pair.first);
260 } 276 }
261 277
262 // Target defaults are owning pointers. 278 // Target defaults are owning pointers.
263 for (const auto& pair : target_defaults_) { 279 for (const auto& pair : target_defaults_) {
264 if (!options.clobber_existing) { 280 if (!options.clobber_existing) {
265 if (dest->GetTargetDefaults(pair.first)) { 281 if (dest->GetTargetDefaults(pair.first)) {
266 // TODO(brettw) it would be nice to know the origin of a 282 // TODO(brettw) it would be nice to know the origin of a
267 // set_target_defaults so we can give locations for the colliding target 283 // set_target_defaults so we can give locations for the colliding target
268 // defaults. 284 // defaults.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 } 484 }
469 485
470 void Scope::AddProvider(ProgrammaticProvider* p) { 486 void Scope::AddProvider(ProgrammaticProvider* p) {
471 programmatic_providers_.insert(p); 487 programmatic_providers_.insert(p);
472 } 488 }
473 489
474 void Scope::RemoveProvider(ProgrammaticProvider* p) { 490 void Scope::RemoveProvider(ProgrammaticProvider* p) {
475 DCHECK(programmatic_providers_.find(p) != programmatic_providers_.end()); 491 DCHECK(programmatic_providers_.find(p) != programmatic_providers_.end());
476 programmatic_providers_.erase(p); 492 programmatic_providers_.erase(p);
477 } 493 }
OLDNEW
« no previous file with comments | « tools/gn/scope.h ('k') | tools/gn/scope_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698