| Index: tools/gn/functions.cc
|
| diff --git a/tools/gn/functions.cc b/tools/gn/functions.cc
|
| index 41be19b5206c875f842283aeda5bfb15de00f766..e01a25c977f7a300ae1048f994c2c6d0b8a33851 100644
|
| --- a/tools/gn/functions.cc
|
| +++ b/tools/gn/functions.cc
|
| @@ -45,38 +45,8 @@ bool VerifyNoBlockForFunctionCall(const FunctionCallNode* function,
|
| return false;
|
| }
|
|
|
| -// This key is set as a scope property on the scope of a declare_args() block,
|
| -// in order to prevent reading a variable defined earlier in the same call
|
| -// (see `gn help declare_args` for more).
|
| -const void *kInDeclareArgsKey = nullptr;
|
| -
|
| } // namespace
|
|
|
| -
|
| -bool EnsureNotReadingFromSameDeclareArgs(const ParseNode* node,
|
| - const Scope* cur_scope,
|
| - const Scope* val_scope,
|
| - Err* err) {
|
| - // If the value didn't come from a scope at all, we're safe.
|
| - if (!val_scope)
|
| - return true;
|
| -
|
| - const Scope* val_args_scope = nullptr;
|
| - val_scope->GetProperty(&kInDeclareArgsKey, &val_args_scope);
|
| -
|
| - const Scope* cur_args_scope = nullptr;
|
| - cur_scope->GetProperty(&kInDeclareArgsKey, &cur_args_scope);
|
| - if (!val_args_scope || !cur_args_scope || (val_args_scope != cur_args_scope))
|
| - return true;
|
| -
|
| - *err = Err(node,
|
| - "Reading a variable defined in the same declare_args() call.\n"
|
| - "\n"
|
| - "If you need to set the value of one arg based on another, put\n"
|
| - "them in two separate declare_args() calls, one after the other.\n");
|
| - return false;
|
| -}
|
| -
|
| bool EnsureNotProcessingImport(const ParseNode* node,
|
| const Scope* scope,
|
| Err* err) {
|
| @@ -387,9 +357,8 @@ const char kDeclareArgs_Help[] =
|
|
|
| The precise behavior of declare args is:
|
|
|
| - 1. The declare_args() block executes. Any variable defined in the enclosing
|
| - scope is available for reading, but any variable defined earlier in
|
| - the current scope is not (since the overrides haven't been applied yet).
|
| + 1. The declare_arg block executes. Any variables in the enclosing scope are
|
| + available for reading.
|
|
|
| 2. At the end of executing the block, any variables set within that scope
|
| are saved globally as build arguments, with their current values being
|
| @@ -408,10 +377,12 @@ const char kDeclareArgs_Help[] =
|
| like [], "", or -1, and after the declare_args block, call exec_script if
|
| the value is unset by the user.
|
|
|
| - - Because you cannot read the value of a variable defined in the same
|
| - block, if you need to make the default value of one arg depend
|
| - on the possibly-overridden value of another, write two separate
|
| - declare_args() blocks:
|
| + - Any code inside of the declare_args block will see the default values of
|
| + previous variables defined in the block rather than the user-overridden
|
| + value. This can be surprising because you will be used to seeing the
|
| + overridden value. If you need to make the default value of one arg
|
| + dependent on the possibly-overridden value of another, write two separate
|
| + declare_args blocks:
|
|
|
| declare_args() {
|
| enable_foo = true
|
| @@ -444,7 +415,6 @@ Value RunDeclareArgs(Scope* scope,
|
| return Value();
|
|
|
| Scope block_scope(scope);
|
| - block_scope.SetProperty(&kInDeclareArgsKey, &block_scope);
|
| block->Execute(&block_scope, err);
|
| if (err->has_error())
|
| return Value();
|
|
|