| Index: tools/gn/scope.h
|
| diff --git a/tools/gn/scope.h b/tools/gn/scope.h
|
| index 685f8404d5fce71682580e713513b0155b651d68..3d3671254beae20ef3387cb3e7b629f95df34f8e 100644
|
| --- a/tools/gn/scope.h
|
| +++ b/tools/gn/scope.h
|
| @@ -45,6 +45,13 @@ class Scope {
|
| // Holds an owning list of Items.
|
| typedef ScopedVector<Item> ItemVector;
|
|
|
| + // A flag to indicate whether a function should recurse into nested scopes,
|
| + // or only operate on the current scope.
|
| + enum SearchNested {
|
| + SEARCH_NESTED,
|
| + SEARCH_CURRENT
|
| + };
|
| +
|
| // Allows code to provide values for built-in variables. This class will
|
| // automatically register itself on construction and deregister itself on
|
| // destruction.
|
| @@ -114,6 +121,10 @@ class Scope {
|
| return mutable_containing_ ? mutable_containing_ : const_containing_;
|
| }
|
|
|
| + // Clears any references to containing scopes. This scope will now be
|
| + // self-sufficient.
|
| + void DetachFromContaining();
|
| +
|
| // Returns NULL if there's no such value.
|
| //
|
| // counts_as_used should be set if the variable is being read in a way that
|
| @@ -122,6 +133,16 @@ class Scope {
|
| bool counts_as_used);
|
| const Value* GetValue(const base::StringPiece& ident) const;
|
|
|
| + // If the value exists in the current scope, destrictively moves it into the
|
| + // return value. If it exists in a containing scope, copies it.
|
| + //
|
| + // This is for implementing modify-write operations where we want to read
|
| + // the existing value and plan to immediately overwrite it. If the value is
|
| + // in a containing scope, we never want to touch it (all writes go to the
|
| + // current scope), but if it's in the current scope, avoid the copy since it
|
| + // will be overwritten anyway.
|
| + //Value DestructiveMoveOut(const base::StringPiece& ident);
|
| +
|
| // Returns the requested value as a mutable one if possible. If the value
|
| // is not found in a mutable scope, then returns null. Note that the value
|
| // could still exist in a const scope, so GetValue() could still return
|
| @@ -144,17 +165,9 @@ class Scope {
|
| // }
|
| // The 6 should get set on the nested scope rather than modify the value
|
| // in the outer one.
|
| - Value* GetMutableValue(const base::StringPiece& ident, bool counts_as_used);
|
| -
|
| - // Same as GetValue, but if the value exists in a parent scope, we'll copy
|
| - // it to the current scope. If the return value is non-null, the value is
|
| - // guaranteed to be set in the current scope. Generatlly this will be used
|
| - // if the calling code is planning on modifying the value in-place.
|
| - //
|
| - // Since this is used when doing read-modifies, we never count this access
|
| - // as reading the variable, since we assume it will be written to.
|
| - Value* GetValueForcedToCurrentScope(const base::StringPiece& ident,
|
| - const ParseNode* set_node);
|
| + Value* GetMutableValue(const base::StringPiece& ident,
|
| + SearchNested search_mode,
|
| + bool counts_as_used);
|
|
|
| // Returns the StringPiece used to identify the value. This string piece
|
| // will have the same contents as "ident" passed in, but may point to a
|
| @@ -168,7 +181,7 @@ class Scope {
|
| // errors later. Returns a pointer to the value in the current scope (a copy
|
| // is made for storage).
|
| Value* SetValue(const base::StringPiece& ident,
|
| - const Value& v,
|
| + Value v,
|
| const ParseNode* set_node);
|
|
|
| // Removes the value with the given identifier if it exists on the current
|
|
|