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

Side by Side Diff: src/interpreter/bytecode-generator.cc

Issue 2199283002: [modules] Introduce new VariableLocation for module imports/exports. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. Created 4 years, 4 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 | « src/globals.h ('k') | src/parsing/parser.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 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/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/interpreter/bytecode-flags.h" 10 #include "src/interpreter/bytecode-flags.h"
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 DCHECK(!variable->binding_needs_init()); 865 DCHECK(!variable->binding_needs_init());
866 866
867 Register name = register_allocator()->NewRegister(); 867 Register name = register_allocator()->NewRegister();
868 868
869 builder() 869 builder()
870 ->LoadLiteral(variable->name()) 870 ->LoadLiteral(variable->name())
871 .StoreAccumulatorInRegister(name) 871 .StoreAccumulatorInRegister(name)
872 .CallRuntime(Runtime::kDeclareEvalVar, name, 1); 872 .CallRuntime(Runtime::kDeclareEvalVar, name, 1);
873 break; 873 break;
874 } 874 }
875 case VariableLocation::MODULE:
876 UNREACHABLE();
875 } 877 }
876 } 878 }
877 879
878 void BytecodeGenerator::VisitFunctionDeclaration(FunctionDeclaration* decl) { 880 void BytecodeGenerator::VisitFunctionDeclaration(FunctionDeclaration* decl) {
879 Variable* variable = decl->proxy()->var(); 881 Variable* variable = decl->proxy()->var();
880 switch (variable->location()) { 882 switch (variable->location()) {
881 case VariableLocation::GLOBAL: 883 case VariableLocation::GLOBAL:
882 case VariableLocation::UNALLOCATED: { 884 case VariableLocation::UNALLOCATED: {
883 FeedbackVectorSlot slot = decl->proxy()->VariableFeedbackSlot(); 885 FeedbackVectorSlot slot = decl->proxy()->VariableFeedbackSlot();
884 globals_builder()->AddFunctionDeclaration(slot, decl->fun()); 886 globals_builder()->AddFunctionDeclaration(slot, decl->fun());
(...skipping 17 matching lines...) Expand all
902 } 904 }
903 case VariableLocation::LOOKUP: { 905 case VariableLocation::LOOKUP: {
904 register_allocator()->PrepareForConsecutiveAllocations(2); 906 register_allocator()->PrepareForConsecutiveAllocations(2);
905 Register name = register_allocator()->NextConsecutiveRegister(); 907 Register name = register_allocator()->NextConsecutiveRegister();
906 Register literal = register_allocator()->NextConsecutiveRegister(); 908 Register literal = register_allocator()->NextConsecutiveRegister();
907 builder()->LoadLiteral(variable->name()).StoreAccumulatorInRegister(name); 909 builder()->LoadLiteral(variable->name()).StoreAccumulatorInRegister(name);
908 910
909 VisitForAccumulatorValue(decl->fun()); 911 VisitForAccumulatorValue(decl->fun());
910 builder()->StoreAccumulatorInRegister(literal).CallRuntime( 912 builder()->StoreAccumulatorInRegister(literal).CallRuntime(
911 Runtime::kDeclareEvalFunction, name, 2); 913 Runtime::kDeclareEvalFunction, name, 2);
914 break;
912 } 915 }
916 case VariableLocation::MODULE:
917 UNREACHABLE();
913 } 918 }
914 } 919 }
915 920
916 void BytecodeGenerator::VisitDeclarations( 921 void BytecodeGenerator::VisitDeclarations(
917 ZoneList<Declaration*>* declarations) { 922 ZoneList<Declaration*>* declarations) {
918 RegisterAllocationScope register_scope(this); 923 RegisterAllocationScope register_scope(this);
919 DCHECK(globals_builder()->empty()); 924 DCHECK(globals_builder()->empty());
920 for (int i = 0; i < declarations->length(); i++) { 925 for (int i = 0; i < declarations->length(); i++) {
921 RegisterAllocationScope register_scope(this); 926 RegisterAllocationScope register_scope(this);
922 Visit(declarations->at(i)); 927 Visit(declarations->at(i));
(...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after
1897 builder()->LoadContextSlot(context_reg, variable->index()); 1902 builder()->LoadContextSlot(context_reg, variable->index());
1898 BuildHoleCheckForVariableLoad(variable); 1903 BuildHoleCheckForVariableLoad(variable);
1899 execution_result()->SetResultInAccumulator(); 1904 execution_result()->SetResultInAccumulator();
1900 break; 1905 break;
1901 } 1906 }
1902 case VariableLocation::LOOKUP: { 1907 case VariableLocation::LOOKUP: {
1903 builder()->LoadLookupSlot(variable->name(), typeof_mode); 1908 builder()->LoadLookupSlot(variable->name(), typeof_mode);
1904 execution_result()->SetResultInAccumulator(); 1909 execution_result()->SetResultInAccumulator();
1905 break; 1910 break;
1906 } 1911 }
1912 case VariableLocation::MODULE:
1913 UNREACHABLE();
1907 } 1914 }
1908 } 1915 }
1909 1916
1910 void BytecodeGenerator::VisitVariableLoadForAccumulatorValue( 1917 void BytecodeGenerator::VisitVariableLoadForAccumulatorValue(
1911 Variable* variable, FeedbackVectorSlot slot, TypeofMode typeof_mode) { 1918 Variable* variable, FeedbackVectorSlot slot, TypeofMode typeof_mode) {
1912 AccumulatorResultScope accumulator_result(this); 1919 AccumulatorResultScope accumulator_result(this);
1913 VisitVariableLoad(variable, slot, typeof_mode); 1920 VisitVariableLoad(variable, slot, typeof_mode);
1914 } 1921 }
1915 1922
1916 Register BytecodeGenerator::VisitVariableLoadForRegisterValue( 1923 Register BytecodeGenerator::VisitVariableLoadForRegisterValue(
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 } 2129 }
2123 2130
2124 builder()->StoreContextSlot(context_reg, variable->index()); 2131 builder()->StoreContextSlot(context_reg, variable->index());
2125 break; 2132 break;
2126 } 2133 }
2127 case VariableLocation::LOOKUP: { 2134 case VariableLocation::LOOKUP: {
2128 DCHECK_NE(CONST_LEGACY, variable->mode()); 2135 DCHECK_NE(CONST_LEGACY, variable->mode());
2129 builder()->StoreLookupSlot(variable->name(), language_mode()); 2136 builder()->StoreLookupSlot(variable->name(), language_mode());
2130 break; 2137 break;
2131 } 2138 }
2139 case VariableLocation::MODULE:
2140 UNREACHABLE();
2132 } 2141 }
2133 } 2142 }
2134 2143
2135 void BytecodeGenerator::VisitAssignment(Assignment* expr) { 2144 void BytecodeGenerator::VisitAssignment(Assignment* expr) {
2136 DCHECK(expr->target()->IsValidReferenceExpressionOrThis()); 2145 DCHECK(expr->target()->IsValidReferenceExpressionOrThis());
2137 Register object, key, home_object, value; 2146 Register object, key, home_object, value;
2138 Handle<String> name; 2147 Handle<String> name;
2139 2148
2140 // Left-hand side can only be a property, a global or a variable slot. 2149 // Left-hand side can only be a property, a global or a variable slot.
2141 Property* property = expr->target()->AsProperty(); 2150 Property* property = expr->target()->AsProperty();
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after
3271 return execution_context()->scope()->language_mode(); 3280 return execution_context()->scope()->language_mode();
3272 } 3281 }
3273 3282
3274 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 3283 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
3275 return TypeFeedbackVector::GetIndex(slot); 3284 return TypeFeedbackVector::GetIndex(slot);
3276 } 3285 }
3277 3286
3278 } // namespace interpreter 3287 } // namespace interpreter
3279 } // namespace internal 3288 } // namespace internal
3280 } // namespace v8 3289 } // namespace v8
OLDNEW
« no previous file with comments | « src/globals.h ('k') | src/parsing/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698