| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |