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

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

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/import_manager.cc ('k') | tools/gn/scope.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 #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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 protected: 61 protected:
62 Scope* scope_; 62 Scope* scope_;
63 }; 63 };
64 64
65 // Options for configuring scope merges. 65 // Options for configuring scope merges.
66 struct MergeOptions { 66 struct MergeOptions {
67 // Defaults to all false, which are the things least likely to cause errors. 67 // Defaults to all false, which are the things least likely to cause errors.
68 MergeOptions() 68 MergeOptions()
69 : clobber_existing(false), 69 : clobber_existing(false),
70 skip_private_vars(false), 70 skip_private_vars(false),
71 mark_used(false) { 71 mark_dest_used(false) {
72 } 72 }
73 73
74 // When set, all existing avlues in the destination scope will be 74 // When set, all existing avlues in the destination scope will be
75 // overwritten. 75 // overwritten.
76 // 76 //
77 // When false, it will be an error to merge a variable into another scope 77 // When false, it will be an error to merge a variable into another scope
78 // where a variable with the same name is already set. The exception is 78 // where a variable with the same name is already set. The exception is
79 // if both of the variables have the same value (which happens if you 79 // if both of the variables have the same value (which happens if you
80 // somehow multiply import the same file, for example). This case will be 80 // somehow multiply import the same file, for example). This case will be
81 // ignored since there is nothing getting lost. 81 // ignored since there is nothing getting lost.
82 bool clobber_existing; 82 bool clobber_existing;
83 83
84 // When true, private variables (names beginning with an underscore) will 84 // When true, private variables (names beginning with an underscore) will
85 // be copied to the destination scope. When false, private values will be 85 // be copied to the destination scope. When false, private values will be
86 // skipped. 86 // skipped.
87 bool skip_private_vars; 87 bool skip_private_vars;
88 88
89 // 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
90 // 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
91 // 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
92 // file will throw an error. 92 // file will throw an error.
93 bool mark_used; 93 bool mark_dest_used;
94 }; 94 };
95 95
96 // Creates an empty toplevel scope. 96 // Creates an empty toplevel scope.
97 explicit Scope(const Settings* settings); 97 explicit Scope(const Settings* settings);
98 98
99 // Creates a dependent scope. 99 // Creates a dependent scope.
100 explicit Scope(Scope* parent); 100 explicit Scope(Scope* parent);
101 explicit Scope(const Scope* parent); 101 explicit Scope(const Scope* parent);
102 102
103 ~Scope(); 103 ~Scope();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 // Same as GetValue, but if the value exists in a parent scope, we'll copy 148 // Same as GetValue, but if the value exists in a parent scope, we'll copy
149 // it to the current scope. If the return value is non-null, the value is 149 // it to the current scope. If the return value is non-null, the value is
150 // guaranteed to be set in the current scope. Generatlly this will be used 150 // guaranteed to be set in the current scope. Generatlly this will be used
151 // if the calling code is planning on modifying the value in-place. 151 // if the calling code is planning on modifying the value in-place.
152 // 152 //
153 // Since this is used when doing read-modifies, we never count this access 153 // Since this is used when doing read-modifies, we never count this access
154 // as reading the variable, since we assume it will be written to. 154 // as reading the variable, since we assume it will be written to.
155 Value* GetValueForcedToCurrentScope(const base::StringPiece& ident, 155 Value* GetValueForcedToCurrentScope(const base::StringPiece& ident,
156 const ParseNode* set_node); 156 const ParseNode* set_node);
157 157
158 // Returns the StringPiece used to identify the value. This string piece
159 // will have the same contents as "ident" passed in, but may point to a
160 // different underlying buffer. This is useful because this StringPiece is
161 // static and won't be deleted for the life of the program, so it can be used
162 // as keys in places that may outlive a temporary. It will return an empty
163 // string for programmatic and nonexistant values.
164 base::StringPiece GetStorageKey(const base::StringPiece& ident) const;
165
158 // The set_node indicates the statement that caused the set, for displaying 166 // The set_node indicates the statement that caused the set, for displaying
159 // errors later. Returns a pointer to the value in the current scope (a copy 167 // errors later. Returns a pointer to the value in the current scope (a copy
160 // is made for storage). 168 // is made for storage).
161 Value* SetValue(const base::StringPiece& ident, 169 Value* SetValue(const base::StringPiece& ident,
162 const Value& v, 170 const Value& v,
163 const ParseNode* set_node); 171 const ParseNode* set_node);
164 172
165 // Removes the value with the given identifier if it exists on the current 173 // Removes the value with the given identifier if it exists on the current
166 // scope. This does not search recursive scopes. Does nothing if not found. 174 // scope. This does not search recursive scopes. Does nothing if not found.
167 void RemoveIdentifier(const base::StringPiece& ident); 175 void RemoveIdentifier(const base::StringPiece& ident);
168 176
169 // Removes from this scope all identifiers and templates that are considered 177 // Removes from this scope all identifiers and templates that are considered
170 // private. 178 // private.
171 void RemovePrivateIdentifiers(); 179 void RemovePrivateIdentifiers();
172 180
173 // Templates associated with this scope. A template can only be set once, so 181 // Templates associated with this scope. A template can only be set once, so
174 // AddTemplate will fail and return false if a rule with that name already 182 // AddTemplate will fail and return false if a rule with that name already
175 // exists. GetTemplate returns NULL if the rule doesn't exist, and it will 183 // exists. GetTemplate returns NULL if the rule doesn't exist, and it will
176 // check all containing scoped rescursively. 184 // check all containing scoped rescursively.
177 bool AddTemplate(const std::string& name, const Template* templ); 185 bool AddTemplate(const std::string& name, const Template* templ);
178 const Template* GetTemplate(const std::string& name) const; 186 const Template* GetTemplate(const std::string& name) const;
179 187
180 // Marks the given identifier as (un)used in the current scope. 188 // Marks the given identifier as (un)used in the current scope.
181 void MarkUsed(const base::StringPiece& ident); 189 void MarkUsed(const base::StringPiece& ident);
190 void MarkAllUsed();
182 void MarkUnused(const base::StringPiece& ident); 191 void MarkUnused(const base::StringPiece& ident);
183 192
184 // Checks to see if the scope has a var set that hasn't been used. This is 193 // Checks to see if the scope has a var set that hasn't been used. This is
185 // called before replacing the var with a different one. It does not check 194 // called before replacing the var with a different one. It does not check
186 // containing scopes. 195 // containing scopes.
187 // 196 //
188 // If the identifier is present but hasnn't been used, return true. 197 // If the identifier is present but hasnn't been used, return true.
189 bool IsSetButUnused(const base::StringPiece& ident) const; 198 bool IsSetButUnused(const base::StringPiece& ident) const;
190 199
191 // Checks the scope to see if any values were set but not used, and fills in 200 // Checks the scope to see if any values were set but not used, and fills in
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 354
346 typedef std::set<ProgrammaticProvider*> ProviderSet; 355 typedef std::set<ProgrammaticProvider*> ProviderSet;
347 ProviderSet programmatic_providers_; 356 ProviderSet programmatic_providers_;
348 357
349 SourceDir source_dir_; 358 SourceDir source_dir_;
350 359
351 DISALLOW_COPY_AND_ASSIGN(Scope); 360 DISALLOW_COPY_AND_ASSIGN(Scope);
352 }; 361 };
353 362
354 #endif // TOOLS_GN_SCOPE_H_ 363 #endif // TOOLS_GN_SCOPE_H_
OLDNEW
« no previous file with comments | « tools/gn/import_manager.cc ('k') | tools/gn/scope.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698