OLD | NEW |
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 #ifndef TOOLS_GN_SCOPE_H_ | 5 #ifndef TOOLS_GN_SCOPE_H_ |
6 #define TOOLS_GN_SCOPE_H_ | 6 #define TOOLS_GN_SCOPE_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <set> | 10 #include <set> |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 const char* desc_for_err, | 222 const char* desc_for_err, |
223 Err* err) const; | 223 Err* err) const; |
224 | 224 |
225 // Constructs a scope that is a copy of the current one. Nested scopes will | 225 // Constructs a scope that is a copy of the current one. Nested scopes will |
226 // be collapsed until we reach a const containing scope. Private values will | 226 // be collapsed until we reach a const containing scope. Private values will |
227 // be included. The resulting closure will reference the const containing | 227 // be included. The resulting closure will reference the const containing |
228 // scope as its containing scope (since we assume the const scope won't | 228 // scope as its containing scope (since we assume the const scope won't |
229 // change, we don't have to copy its values). | 229 // change, we don't have to copy its values). |
230 std::unique_ptr<Scope> MakeClosure() const; | 230 std::unique_ptr<Scope> MakeClosure() const; |
231 | 231 |
232 // Makes an empty scope with the given name. Returns NULL if the name is | 232 // Makes an empty scope with the given name. Overwrites any existing one. |
233 // already set. | |
234 Scope* MakeTargetDefaults(const std::string& target_type); | 233 Scope* MakeTargetDefaults(const std::string& target_type); |
235 | 234 |
236 // Gets the scope associated with the given target name, or null if it hasn't | 235 // Gets the scope associated with the given target name, or null if it hasn't |
237 // been set. | 236 // been set. |
238 const Scope* GetTargetDefaults(const std::string& target_type) const; | 237 const Scope* GetTargetDefaults(const std::string& target_type) const; |
239 | 238 |
240 // Filter to apply when the sources variable is assigned. May return NULL. | 239 // Filter to apply when the sources variable is assigned. May return NULL. |
241 const PatternList* GetSourcesAssignmentFilter() const; | 240 const PatternList* GetSourcesAssignmentFilter() const; |
242 void set_sources_assignment_filter(std::unique_ptr<PatternList> f) { | 241 void set_sources_assignment_filter(std::unique_ptr<PatternList> f) { |
243 sources_assignment_filter_ = std::move(f); | 242 sources_assignment_filter_ = std::move(f); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 friend class ProgrammaticProvider; | 303 friend class ProgrammaticProvider; |
305 | 304 |
306 struct Record { | 305 struct Record { |
307 Record() : used(false) {} | 306 Record() : used(false) {} |
308 explicit Record(const Value& v) : used(false), value(v) {} | 307 explicit Record(const Value& v) : used(false), value(v) {} |
309 | 308 |
310 bool used; // Set to true when the variable is used. | 309 bool used; // Set to true when the variable is used. |
311 Value value; | 310 Value value; |
312 }; | 311 }; |
313 | 312 |
| 313 typedef base::hash_map<base::StringPiece, Record, base::StringPieceHash> |
| 314 RecordMap; |
| 315 |
314 void AddProvider(ProgrammaticProvider* p); | 316 void AddProvider(ProgrammaticProvider* p); |
315 void RemoveProvider(ProgrammaticProvider* p); | 317 void RemoveProvider(ProgrammaticProvider* p); |
316 | 318 |
| 319 // Returns true if the two RecordMaps contain the same values (the origins |
| 320 // of the values may be different). |
| 321 static bool RecordMapValuesEqual(const RecordMap& a, const RecordMap& b); |
| 322 |
317 // Scopes can have no containing scope (both null), a mutable containing | 323 // Scopes can have no containing scope (both null), a mutable containing |
318 // scope, or a const containing scope. The reason is that when we're doing | 324 // scope, or a const containing scope. The reason is that when we're doing |
319 // a new target, we want to refer to the base_config scope which will be read | 325 // a new target, we want to refer to the base_config scope which will be read |
320 // by multiple threads at the same time, so we REALLY want it to be const. | 326 // by multiple threads at the same time, so we REALLY want it to be const. |
321 // When you jsut do a nested {}, however, we sometimes want to be able to | 327 // When you jsut do a nested {}, however, we sometimes want to be able to |
322 // change things (especially marking unused vars). | 328 // change things (especially marking unused vars). |
323 const Scope* const_containing_; | 329 const Scope* const_containing_; |
324 Scope* mutable_containing_; | 330 Scope* mutable_containing_; |
325 | 331 |
326 const Settings* settings_; | 332 const Settings* settings_; |
327 | 333 |
328 // Bits set for different modes. See the flag definitions in the .cc file | 334 // Bits set for different modes. See the flag definitions in the .cc file |
329 // for more. | 335 // for more. |
330 unsigned mode_flags_; | 336 unsigned mode_flags_; |
331 | 337 |
332 typedef base::hash_map<base::StringPiece, Record, base::StringPieceHash> | |
333 RecordMap; | |
334 RecordMap values_; | 338 RecordMap values_; |
335 | 339 |
336 // Note that this can't use string pieces since the names are constructed from | 340 // Note that this can't use string pieces since the names are constructed from |
337 // Values which might be deallocated before this goes out of scope. | 341 // Values which might be deallocated before this goes out of scope. |
338 typedef base::hash_map<std::string, std::unique_ptr<Scope>> NamedScopeMap; | 342 typedef base::hash_map<std::string, std::unique_ptr<Scope>> NamedScopeMap; |
339 NamedScopeMap target_defaults_; | 343 NamedScopeMap target_defaults_; |
340 | 344 |
341 // Null indicates not set and that we should fallback to the containing | 345 // Null indicates not set and that we should fallback to the containing |
342 // scope's filter. | 346 // scope's filter. |
343 std::unique_ptr<PatternList> sources_assignment_filter_; | 347 std::unique_ptr<PatternList> sources_assignment_filter_; |
(...skipping 10 matching lines...) Expand all Loading... |
354 | 358 |
355 typedef std::set<ProgrammaticProvider*> ProviderSet; | 359 typedef std::set<ProgrammaticProvider*> ProviderSet; |
356 ProviderSet programmatic_providers_; | 360 ProviderSet programmatic_providers_; |
357 | 361 |
358 SourceDir source_dir_; | 362 SourceDir source_dir_; |
359 | 363 |
360 DISALLOW_COPY_AND_ASSIGN(Scope); | 364 DISALLOW_COPY_AND_ASSIGN(Scope); |
361 }; | 365 }; |
362 | 366 |
363 #endif // TOOLS_GN_SCOPE_H_ | 367 #endif // TOOLS_GN_SCOPE_H_ |
OLD | NEW |