OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/interpreter/bytecode-generator.h" | 5 #include "src/interpreter/bytecode-generator.h" |
6 | 6 |
7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
8 #include "src/compiler.h" | 8 #include "src/compiler.h" |
9 #include "src/interpreter/control-flow-builders.h" | 9 #include "src/interpreter/control-flow-builders.h" |
10 #include "src/objects.h" | 10 #include "src/objects.h" |
(...skipping 1765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1776 } else if (expr->expression()->IsVariableProxy()) { | 1776 } else if (expr->expression()->IsVariableProxy()) { |
1777 // Delete of an unqualified identifier is allowed in sloppy mode but is | 1777 // Delete of an unqualified identifier is allowed in sloppy mode but is |
1778 // not allowed in strict mode. Deleting 'this' is allowed in both modes. | 1778 // not allowed in strict mode. Deleting 'this' is allowed in both modes. |
1779 VariableProxy* proxy = expr->expression()->AsVariableProxy(); | 1779 VariableProxy* proxy = expr->expression()->AsVariableProxy(); |
1780 Variable* variable = proxy->var(); | 1780 Variable* variable = proxy->var(); |
1781 DCHECK(is_sloppy(language_mode()) || variable->HasThisName(isolate())); | 1781 DCHECK(is_sloppy(language_mode()) || variable->HasThisName(isolate())); |
1782 switch (variable->location()) { | 1782 switch (variable->location()) { |
1783 case VariableLocation::GLOBAL: | 1783 case VariableLocation::GLOBAL: |
1784 case VariableLocation::UNALLOCATED: { | 1784 case VariableLocation::UNALLOCATED: { |
1785 // Global var, let, const or variables not explicitly declared. | 1785 // Global var, let, const or variables not explicitly declared. |
| 1786 Register native_context = execution_result()->NewRegister(); |
1786 Register global_object = execution_result()->NewRegister(); | 1787 Register global_object = execution_result()->NewRegister(); |
1787 builder() | 1788 builder() |
1788 ->LoadContextSlot(execution_context()->reg(), | 1789 ->LoadContextSlot(execution_context()->reg(), |
1789 Context::GLOBAL_OBJECT_INDEX) | 1790 Context::NATIVE_CONTEXT_INDEX) |
| 1791 .StoreAccumulatorInRegister(native_context) |
| 1792 .LoadContextSlot(native_context, Context::EXTENSION_INDEX) |
1790 .StoreAccumulatorInRegister(global_object) | 1793 .StoreAccumulatorInRegister(global_object) |
1791 .LoadLiteral(variable->name()) | 1794 .LoadLiteral(variable->name()) |
1792 .Delete(global_object, language_mode()); | 1795 .Delete(global_object, language_mode()); |
1793 break; | 1796 break; |
1794 } | 1797 } |
1795 case VariableLocation::PARAMETER: | 1798 case VariableLocation::PARAMETER: |
1796 case VariableLocation::LOCAL: | 1799 case VariableLocation::LOCAL: |
1797 case VariableLocation::CONTEXT: { | 1800 case VariableLocation::CONTEXT: { |
1798 // Deleting local var/let/const, context variables, and arguments | 1801 // Deleting local var/let/const, context variables, and arguments |
1799 // does not have any effect. | 1802 // does not have any effect. |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2225 } | 2228 } |
2226 | 2229 |
2227 | 2230 |
2228 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { | 2231 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { |
2229 return info()->feedback_vector()->GetIndex(slot); | 2232 return info()->feedback_vector()->GetIndex(slot); |
2230 } | 2233 } |
2231 | 2234 |
2232 } // namespace interpreter | 2235 } // namespace interpreter |
2233 } // namespace internal | 2236 } // namespace internal |
2234 } // namespace v8 | 2237 } // namespace v8 |
OLD | NEW |