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

Side by Side Diff: src/ast/scopes.cc

Issue 2352813002: Filter out synthetic variables from with scopes (Closed)
Patch Set: Created 4 years, 3 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 | « no previous file | src/contexts.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project 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 #include "src/ast/scopes.h" 5 #include "src/ast/scopes.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "src/accessors.h" 9 #include "src/accessors.h"
10 #include "src/ast/ast.h" 10 #include "src/ast/ast.h"
(...skipping 1428 matching lines...) Expand 10 before | Expand all | Expand 10 after
1439 1439
1440 // The variable could not be resolved statically. 1440 // The variable could not be resolved statically.
1441 if (var == nullptr) return var; 1441 if (var == nullptr) return var;
1442 1442
1443 if (is_function_scope() && !var->is_dynamic()) { 1443 if (is_function_scope() && !var->is_dynamic()) {
1444 var->ForceContextAllocation(); 1444 var->ForceContextAllocation();
1445 } 1445 }
1446 // "this" can't be shadowed by "eval"-introduced bindings or by "with" 1446 // "this" can't be shadowed by "eval"-introduced bindings or by "with"
1447 // scopes. 1447 // scopes.
1448 // TODO(wingo): There are other variables in this category; add them. 1448 // TODO(wingo): There are other variables in this category; add them.
1449 if (var->is_this()) return var; 1449 if (ScopeInfo::VariableIsSynthetic(*var->name())) return var;
1450 1450
1451 if (is_with_scope()) { 1451 if (is_with_scope()) {
1452 // The current scope is a with scope, so the variable binding can not be 1452 // The current scope is a with scope, so the variable binding can not be
1453 // statically resolved. However, note that it was necessary to do a lookup 1453 // statically resolved. However, note that it was necessary to do a lookup
1454 // in the outer scope anyway, because if a binding exists in an outer 1454 // in the outer scope anyway, because if a binding exists in an outer
1455 // scope, the associated variable has to be marked as potentially being 1455 // scope, the associated variable has to be marked as potentially being
1456 // accessed from inside of an inner with scope (the property may not be in 1456 // accessed from inside of an inner with scope (the property may not be in
1457 // the 'with' object). 1457 // the 'with' object).
1458 if (!var->is_dynamic() && var->IsUnallocated()) { 1458 if (!var->is_dynamic() && var->IsUnallocated()) {
1459 DCHECK(!already_resolved_); 1459 DCHECK(!already_resolved_);
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after
1811 Variable* function = 1811 Variable* function =
1812 is_function_scope() ? AsDeclarationScope()->function_var() : nullptr; 1812 is_function_scope() ? AsDeclarationScope()->function_var() : nullptr;
1813 bool is_function_var_in_context = 1813 bool is_function_var_in_context =
1814 function != nullptr && function->IsContextSlot(); 1814 function != nullptr && function->IsContextSlot();
1815 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS - 1815 return num_heap_slots() - Context::MIN_CONTEXT_SLOTS -
1816 (is_function_var_in_context ? 1 : 0); 1816 (is_function_var_in_context ? 1 : 0);
1817 } 1817 }
1818 1818
1819 } // namespace internal 1819 } // namespace internal
1820 } // namespace v8 1820 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/contexts.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698