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 <set> | 9 #include <set> |
10 | 10 |
(...skipping 30 matching lines...) Expand all Loading... |
41 public: | 41 public: |
42 typedef base::hash_map<base::StringPiece, Value> KeyValueMap; | 42 typedef base::hash_map<base::StringPiece, Value> KeyValueMap; |
43 // Holds an owning list of Items. | 43 // Holds an owning list of Items. |
44 typedef ScopedVector<Item> ItemVector; | 44 typedef ScopedVector<Item> ItemVector; |
45 | 45 |
46 // Allows code to provide values for built-in variables. This class will | 46 // Allows code to provide values for built-in variables. This class will |
47 // automatically register itself on construction and deregister itself on | 47 // automatically register itself on construction and deregister itself on |
48 // destruction. | 48 // destruction. |
49 class ProgrammaticProvider { | 49 class ProgrammaticProvider { |
50 public: | 50 public: |
51 ProgrammaticProvider(Scope* scope) : scope_(scope) { | 51 explicit ProgrammaticProvider(Scope* scope) : scope_(scope) { |
52 scope_->AddProvider(this); | 52 scope_->AddProvider(this); |
53 } | 53 } |
54 ~ProgrammaticProvider() { | 54 virtual ~ProgrammaticProvider(); |
55 scope_->RemoveProvider(this); | |
56 } | |
57 | 55 |
58 // Returns a non-null value if the given value can be programmatically | 56 // Returns a non-null value if the given value can be programmatically |
59 // generated, or NULL if there is none. | 57 // generated, or NULL if there is none. |
60 virtual const Value* GetProgrammaticValue( | 58 virtual const Value* GetProgrammaticValue( |
61 const base::StringPiece& ident) = 0; | 59 const base::StringPiece& ident) = 0; |
62 | 60 |
63 protected: | 61 protected: |
64 Scope* scope_; | 62 Scope* scope_; |
65 }; | 63 }; |
66 | 64 |
(...skipping 22 matching lines...) Expand all Loading... |
89 bool skip_private_vars; | 87 bool skip_private_vars; |
90 | 88 |
91 // When set, values copied to the destination scope will be marked as used | 89 // When set, values copied to the destination scope will be marked as used |
92 // so won't trigger an unused variable warning. You want this when doing an | 90 // so won't trigger an unused variable warning. You want this when doing an |
93 // import, for example, or files that don't need a variable from the .gni | 91 // import, for example, or files that don't need a variable from the .gni |
94 // file will throw an error. | 92 // file will throw an error. |
95 bool mark_used; | 93 bool mark_used; |
96 }; | 94 }; |
97 | 95 |
98 // Creates an empty toplevel scope. | 96 // Creates an empty toplevel scope. |
99 Scope(const Settings* settings); | 97 explicit Scope(const Settings* settings); |
100 | 98 |
101 // Creates a dependent scope. | 99 // Creates a dependent scope. |
102 Scope(Scope* parent); | 100 explicit Scope(Scope* parent); |
103 Scope(const Scope* parent); | 101 explicit Scope(const Scope* parent); |
104 | 102 |
105 ~Scope(); | 103 ~Scope(); |
106 | 104 |
107 const Settings* settings() const { return settings_; } | 105 const Settings* settings() const { return settings_; } |
108 | 106 |
109 // See the const_/mutable_containing_ var declaraions below. Yes, it's a | 107 // See the const_/mutable_containing_ var declaraions below. Yes, it's a |
110 // bit weird that we can have a const pointer to the "mutable" one. | 108 // bit weird that we can have a const pointer to the "mutable" one. |
111 Scope* mutable_containing() { return mutable_containing_; } | 109 Scope* mutable_containing() { return mutable_containing_; } |
112 const Scope* mutable_containing() const { return mutable_containing_; } | 110 const Scope* mutable_containing() const { return mutable_containing_; } |
113 const Scope* const_containing() const { return const_containing_; } | 111 const Scope* const_containing() const { return const_containing_; } |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 // |found_on_scope| variable will be filled with the actual scope containing | 289 // |found_on_scope| variable will be filled with the actual scope containing |
292 // the key (if the pointer is non-NULL). | 290 // the key (if the pointer is non-NULL). |
293 void SetProperty(const void* key, void* value); | 291 void SetProperty(const void* key, void* value); |
294 void* GetProperty(const void* key, const Scope** found_on_scope) const; | 292 void* GetProperty(const void* key, const Scope** found_on_scope) const; |
295 | 293 |
296 private: | 294 private: |
297 friend class ProgrammaticProvider; | 295 friend class ProgrammaticProvider; |
298 | 296 |
299 struct Record { | 297 struct Record { |
300 Record() : used(false) {} | 298 Record() : used(false) {} |
301 Record(const Value& v) : used(false), value(v) {} | 299 explicit Record(const Value& v) : used(false), value(v) {} |
302 | 300 |
303 bool used; // Set to true when the variable is used. | 301 bool used; // Set to true when the variable is used. |
304 Value value; | 302 Value value; |
305 }; | 303 }; |
306 | 304 |
307 void AddProvider(ProgrammaticProvider* p); | 305 void AddProvider(ProgrammaticProvider* p); |
308 void RemoveProvider(ProgrammaticProvider* p); | 306 void RemoveProvider(ProgrammaticProvider* p); |
309 | 307 |
310 // Scopes can have no containing scope (both null), a mutable containing | 308 // Scopes can have no containing scope (both null), a mutable containing |
311 // scope, or a const containing scope. The reason is that when we're doing | 309 // scope, or a const containing scope. The reason is that when we're doing |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 | 345 |
348 typedef std::set<ProgrammaticProvider*> ProviderSet; | 346 typedef std::set<ProgrammaticProvider*> ProviderSet; |
349 ProviderSet programmatic_providers_; | 347 ProviderSet programmatic_providers_; |
350 | 348 |
351 SourceDir source_dir_; | 349 SourceDir source_dir_; |
352 | 350 |
353 DISALLOW_COPY_AND_ASSIGN(Scope); | 351 DISALLOW_COPY_AND_ASSIGN(Scope); |
354 }; | 352 }; |
355 | 353 |
356 #endif // TOOLS_GN_SCOPE_H_ | 354 #endif // TOOLS_GN_SCOPE_H_ |
OLD | NEW |