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

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

Issue 2387593002: Revert of Reland: [modules] Properly initialize declared variables. (Closed)
Patch Set: Created 4 years, 2 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/objects.h » ('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/compile-time-value.h" 7 #include "src/ast/compile-time-value.h"
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/compilation-info.h" 10 #include "src/compilation-info.h"
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 925
926 Register name = register_allocator()->NewRegister(); 926 Register name = register_allocator()->NewRegister();
927 927
928 builder() 928 builder()
929 ->LoadLiteral(variable->name()) 929 ->LoadLiteral(variable->name())
930 .StoreAccumulatorInRegister(name) 930 .StoreAccumulatorInRegister(name)
931 .CallRuntime(Runtime::kDeclareEvalVar, name, 1); 931 .CallRuntime(Runtime::kDeclareEvalVar, name, 1);
932 break; 932 break;
933 } 933 }
934 case VariableLocation::MODULE: 934 case VariableLocation::MODULE:
935 if (variable->IsExport() && variable->binding_needs_init()) { 935 // Nothing to do here.
936 builder()->LoadTheHole();
937 VisitVariableAssignment(variable, Token::INIT,
938 FeedbackVectorSlot::Invalid());
939 }
940 // Nothing to do for imports.
941 break; 936 break;
942 } 937 }
943 } 938 }
944 939
945 void BytecodeGenerator::VisitFunctionDeclaration(FunctionDeclaration* decl) { 940 void BytecodeGenerator::VisitFunctionDeclaration(FunctionDeclaration* decl) {
946 Variable* variable = decl->proxy()->var(); 941 Variable* variable = decl->proxy()->var();
947 DCHECK(variable->mode() == LET || variable->mode() == VAR); 942 DCHECK(variable->mode() == LET || variable->mode() == VAR);
948 switch (variable->location()) { 943 switch (variable->location()) {
949 case VariableLocation::UNALLOCATED: { 944 case VariableLocation::UNALLOCATED: {
950 FeedbackVectorSlot slot = decl->proxy()->VariableFeedbackSlot(); 945 FeedbackVectorSlot slot = decl->proxy()->VariableFeedbackSlot();
(...skipping 19 matching lines...) Expand all
970 Register name = register_allocator()->NextConsecutiveRegister(); 965 Register name = register_allocator()->NextConsecutiveRegister();
971 Register literal = register_allocator()->NextConsecutiveRegister(); 966 Register literal = register_allocator()->NextConsecutiveRegister();
972 builder()->LoadLiteral(variable->name()).StoreAccumulatorInRegister(name); 967 builder()->LoadLiteral(variable->name()).StoreAccumulatorInRegister(name);
973 968
974 VisitForAccumulatorValue(decl->fun()); 969 VisitForAccumulatorValue(decl->fun());
975 builder()->StoreAccumulatorInRegister(literal).CallRuntime( 970 builder()->StoreAccumulatorInRegister(literal).CallRuntime(
976 Runtime::kDeclareEvalFunction, name, 2); 971 Runtime::kDeclareEvalFunction, name, 2);
977 break; 972 break;
978 } 973 }
979 case VariableLocation::MODULE: 974 case VariableLocation::MODULE:
980 DCHECK_EQ(variable->mode(), LET); 975 DCHECK(variable->mode() == LET);
981 DCHECK(variable->IsExport());
982 VisitForAccumulatorValue(decl->fun()); 976 VisitForAccumulatorValue(decl->fun());
983 VisitVariableAssignment(variable, Token::INIT, 977 VisitVariableAssignment(variable, Token::INIT,
984 FeedbackVectorSlot::Invalid()); 978 FeedbackVectorSlot::Invalid());
985 break; 979 break;
986 } 980 }
987 } 981 }
988 982
989 void BytecodeGenerator::VisitDeclarations( 983 void BytecodeGenerator::VisitDeclarations(
990 ZoneList<Declaration*>* declarations) { 984 ZoneList<Declaration*>* declarations) {
991 RegisterAllocationScope register_scope(this); 985 RegisterAllocationScope register_scope(this);
(...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after
2017 Register import_name = register_allocator()->NextConsecutiveRegister(); 2011 Register import_name = register_allocator()->NextConsecutiveRegister();
2018 Register module_request = 2012 Register module_request =
2019 register_allocator()->NextConsecutiveRegister(); 2013 register_allocator()->NextConsecutiveRegister();
2020 builder() 2014 builder()
2021 ->LoadLiteral(it->second->import_name->string()) 2015 ->LoadLiteral(it->second->import_name->string())
2022 .StoreAccumulatorInRegister(import_name) 2016 .StoreAccumulatorInRegister(import_name)
2023 .LoadLiteral(Smi::FromInt(it->second->module_request)) 2017 .LoadLiteral(Smi::FromInt(it->second->module_request))
2024 .StoreAccumulatorInRegister(module_request) 2018 .StoreAccumulatorInRegister(module_request)
2025 .CallRuntime(Runtime::kLoadModuleImport, import_name, 2); 2019 .CallRuntime(Runtime::kLoadModuleImport, import_name, 2);
2026 } 2020 }
2027 BuildHoleCheckForVariableLoad(variable);
2028 break; 2021 break;
2029 } 2022 }
2030 } 2023 }
2031 execution_result()->SetResultInAccumulator(); 2024 execution_result()->SetResultInAccumulator();
2032 } 2025 }
2033 2026
2034 void BytecodeGenerator::VisitVariableLoadForAccumulatorValue( 2027 void BytecodeGenerator::VisitVariableLoadForAccumulatorValue(
2035 Variable* variable, FeedbackVectorSlot slot, TypeofMode typeof_mode) { 2028 Variable* variable, FeedbackVectorSlot slot, TypeofMode typeof_mode) {
2036 AccumulatorResultScope accumulator_result(this); 2029 AccumulatorResultScope accumulator_result(this);
2037 VisitVariableLoad(variable, slot, typeof_mode); 2030 VisitVariableLoad(variable, slot, typeof_mode);
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after
3470 return execution_context()->scope()->language_mode(); 3463 return execution_context()->scope()->language_mode();
3471 } 3464 }
3472 3465
3473 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 3466 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
3474 return TypeFeedbackVector::GetIndex(slot); 3467 return TypeFeedbackVector::GetIndex(slot);
3475 } 3468 }
3476 3469
3477 } // namespace interpreter 3470 } // namespace interpreter
3478 } // namespace internal 3471 } // namespace internal
3479 } // namespace v8 3472 } // namespace v8
OLDNEW
« no previous file with comments | « src/globals.h ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698