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; |
} |