| Index: src/scopes.cc
|
| ===================================================================
|
| --- src/scopes.cc (revision 3225)
|
| +++ src/scopes.cc (working copy)
|
| @@ -540,11 +540,11 @@
|
|
|
|
|
| // Lookup a variable starting with this scope. The result is either
|
| -// the statically resolved (local!) variable belonging to an outer scope,
|
| -// or NULL. It may be NULL because a) we couldn't find a variable, or b)
|
| -// because the variable is just a guess (and may be shadowed by another
|
| -// variable that is introduced dynamically via an 'eval' call or a 'with'
|
| -// statement).
|
| +// the statically resolved variable belonging to an outer scope, or
|
| +// NULL. It may be NULL because a) we couldn't find a variable, or b)
|
| +// because the variable is just a guess (and may be shadowed by
|
| +// another variable that is introduced dynamically via an 'eval' call
|
| +// or a 'with' statement).
|
| Variable* Scope::LookupRecursive(Handle<String> name,
|
| bool inner_lookup,
|
| Variable** invalidated_local) {
|
| @@ -598,9 +598,11 @@
|
| if (inner_lookup)
|
| var->is_accessed_from_inner_scope_ = true;
|
|
|
| - // If the variable we have found is just a guess, invalidate the result.
|
| + // If the variable we have found is just a guess, invalidate the
|
| + // result. If the found variable is local, record that fact so we
|
| + // can generate fast code to get it if it is not shadowed by eval.
|
| if (guess) {
|
| - *invalidated_local = var;
|
| + if (!var->is_global()) *invalidated_local = var;
|
| var = NULL;
|
| }
|
|
|
|
|