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

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

Issue 2302163003: [interpreter] Clarify some names and comments. (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 | « src/interpreter/bytecode-array-builder.cc ('k') | src/interpreter/interpreter.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/compilation-info.h" 9 #include "src/compilation-info.h"
10 #include "src/compiler.h" 10 #include "src/compiler.h"
(...skipping 1296 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 1307
1308 LoopBuilder loop_builder(builder()); 1308 LoopBuilder loop_builder(builder());
1309 BytecodeLabel subject_null_label, subject_undefined_label; 1309 BytecodeLabel subject_null_label, subject_undefined_label;
1310 1310
1311 // Prepare the state for executing ForIn. 1311 // Prepare the state for executing ForIn.
1312 builder()->SetExpressionAsStatementPosition(stmt->subject()); 1312 builder()->SetExpressionAsStatementPosition(stmt->subject());
1313 VisitForAccumulatorValue(stmt->subject()); 1313 VisitForAccumulatorValue(stmt->subject());
1314 builder()->JumpIfUndefined(&subject_undefined_label); 1314 builder()->JumpIfUndefined(&subject_undefined_label);
1315 builder()->JumpIfNull(&subject_null_label); 1315 builder()->JumpIfNull(&subject_null_label);
1316 Register receiver = register_allocator()->NewRegister(); 1316 Register receiver = register_allocator()->NewRegister();
1317 builder()->CastAccumulatorToJSObject(receiver); 1317 builder()->ConvertAccumulatorToObject(receiver);
1318 1318
1319 register_allocator()->PrepareForConsecutiveAllocations(3); 1319 register_allocator()->PrepareForConsecutiveAllocations(3);
1320 Register cache_type = register_allocator()->NextConsecutiveRegister(); 1320 Register cache_type = register_allocator()->NextConsecutiveRegister();
1321 Register cache_array = register_allocator()->NextConsecutiveRegister(); 1321 Register cache_array = register_allocator()->NextConsecutiveRegister();
1322 Register cache_length = register_allocator()->NextConsecutiveRegister(); 1322 Register cache_length = register_allocator()->NextConsecutiveRegister();
1323 // Used as kRegTriple and kRegPair in ForInPrepare and ForInNext. 1323 // Used as kRegTriple and kRegPair in ForInPrepare and ForInNext.
1324 USE(cache_array); 1324 USE(cache_array);
1325 builder()->ForInPrepare(receiver, cache_type); 1325 builder()->ForInPrepare(receiver, cache_type);
1326 1326
1327 // Set up loop counter 1327 // Set up loop counter
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1548 ObjectLiteral::Property* property = expr->properties()->at(i); 1548 ObjectLiteral::Property* property = expr->properties()->at(i);
1549 1549
1550 // Set-up receiver. 1550 // Set-up receiver.
1551 Register new_receiver = property->is_static() ? literal : prototype; 1551 Register new_receiver = property->is_static() ? literal : prototype;
1552 if (new_receiver != old_receiver) { 1552 if (new_receiver != old_receiver) {
1553 builder()->MoveRegister(new_receiver, receiver); 1553 builder()->MoveRegister(new_receiver, receiver);
1554 old_receiver = new_receiver; 1554 old_receiver = new_receiver;
1555 } 1555 }
1556 1556
1557 VisitForAccumulatorValue(property->key()); 1557 VisitForAccumulatorValue(property->key());
1558 builder()->CastAccumulatorToName(key); 1558 builder()->ConvertAccumulatorToName(key);
1559 // The static prototype property is read only. We handle the non computed 1559 // The static prototype property is read only. We handle the non computed
1560 // property name case in the parser. Since this is the only case where we 1560 // property name case in the parser. Since this is the only case where we
1561 // need to check for an own read only property we special case this so we do 1561 // need to check for an own read only property we special case this so we do
1562 // not need to do this for every property. 1562 // not need to do this for every property.
1563 if (property->is_static() && property->is_computed_name()) { 1563 if (property->is_static() && property->is_computed_name()) {
1564 VisitClassLiteralStaticPrototypeWithComputedName(key); 1564 VisitClassLiteralStaticPrototypeWithComputedName(key);
1565 } 1565 }
1566 VisitForAccumulatorValue(property->value()); 1566 VisitForAccumulatorValue(property->value());
1567 builder()->StoreAccumulatorInRegister(value); 1567 builder()->StoreAccumulatorInRegister(value);
1568 1568
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
1838 Register literal_argument = register_allocator()->NextConsecutiveRegister(); 1838 Register literal_argument = register_allocator()->NextConsecutiveRegister();
1839 Register key = register_allocator()->NextConsecutiveRegister(); 1839 Register key = register_allocator()->NextConsecutiveRegister();
1840 Register value = register_allocator()->NextConsecutiveRegister(); 1840 Register value = register_allocator()->NextConsecutiveRegister();
1841 Register attr = register_allocator()->NextConsecutiveRegister(); 1841 Register attr = register_allocator()->NextConsecutiveRegister();
1842 DCHECK(Register::AreContiguous(literal_argument, key, value, attr)); 1842 DCHECK(Register::AreContiguous(literal_argument, key, value, attr));
1843 Register set_function_name = 1843 Register set_function_name =
1844 register_allocator()->NextConsecutiveRegister(); 1844 register_allocator()->NextConsecutiveRegister();
1845 1845
1846 builder()->MoveRegister(literal, literal_argument); 1846 builder()->MoveRegister(literal, literal_argument);
1847 VisitForAccumulatorValue(property->key()); 1847 VisitForAccumulatorValue(property->key());
1848 builder()->CastAccumulatorToName(key); 1848 builder()->ConvertAccumulatorToName(key);
1849 VisitForAccumulatorValue(property->value()); 1849 VisitForAccumulatorValue(property->value());
1850 builder()->StoreAccumulatorInRegister(value); 1850 builder()->StoreAccumulatorInRegister(value);
1851 VisitSetHomeObject(value, literal, property); 1851 VisitSetHomeObject(value, literal, property);
1852 builder()->LoadLiteral(Smi::FromInt(NONE)).StoreAccumulatorInRegister(attr); 1852 builder()->LoadLiteral(Smi::FromInt(NONE)).StoreAccumulatorInRegister(attr);
1853 switch (property->kind()) { 1853 switch (property->kind()) {
1854 case ObjectLiteral::Property::CONSTANT: 1854 case ObjectLiteral::Property::CONSTANT:
1855 case ObjectLiteral::Property::COMPUTED: 1855 case ObjectLiteral::Property::COMPUTED:
1856 case ObjectLiteral::Property::MATERIALIZED_LITERAL: 1856 case ObjectLiteral::Property::MATERIALIZED_LITERAL:
1857 builder() 1857 builder()
1858 ->LoadLiteral(Smi::FromInt(property->NeedsSetFunctionName())) 1858 ->LoadLiteral(Smi::FromInt(property->NeedsSetFunctionName()))
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after
2948 BuildKeyedSuperPropertyLoad(object, home_object, key); 2948 BuildKeyedSuperPropertyLoad(object, home_object, key);
2949 break; 2949 break;
2950 } 2950 }
2951 } 2951 }
2952 2952
2953 // Save result for postfix expressions. 2953 // Save result for postfix expressions.
2954 if (is_postfix) { 2954 if (is_postfix) {
2955 old_value = register_allocator()->outer()->NewRegister(); 2955 old_value = register_allocator()->outer()->NewRegister();
2956 2956
2957 // Convert old value into a number before saving it. 2957 // Convert old value into a number before saving it.
2958 builder()->CastAccumulatorToNumber(old_value); 2958 builder()->ConvertAccumulatorToNumber(old_value);
2959 } 2959 }
2960 2960
2961 // Perform +1/-1 operation. 2961 // Perform +1/-1 operation.
2962 FeedbackVectorSlot slot = expr->CountBinaryOpFeedbackSlot(); 2962 FeedbackVectorSlot slot = expr->CountBinaryOpFeedbackSlot();
2963 builder()->CountOperation(expr->binary_op(), feedback_index(slot)); 2963 builder()->CountOperation(expr->binary_op(), feedback_index(slot));
2964 2964
2965 // Store the value. 2965 // Store the value.
2966 builder()->SetExpressionPosition(expr); 2966 builder()->SetExpressionPosition(expr);
2967 FeedbackVectorSlot feedback_slot = expr->CountSlot(); 2967 FeedbackVectorSlot feedback_slot = expr->CountSlot();
2968 switch (assign_type) { 2968 switch (assign_type) {
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
3197 VisitFunctionClosureForContext(); 3197 VisitFunctionClosureForContext();
3198 builder()->CreateBlockContext(scope->scope_info()); 3198 builder()->CreateBlockContext(scope->scope_info());
3199 execution_result()->SetResultInAccumulator(); 3199 execution_result()->SetResultInAccumulator();
3200 } 3200 }
3201 3201
3202 void BytecodeGenerator::VisitNewLocalWithContext() { 3202 void BytecodeGenerator::VisitNewLocalWithContext() {
3203 AccumulatorResultScope accumulator_execution_result(this); 3203 AccumulatorResultScope accumulator_execution_result(this);
3204 3204
3205 Register extension_object = register_allocator()->NewRegister(); 3205 Register extension_object = register_allocator()->NewRegister();
3206 3206
3207 builder()->CastAccumulatorToJSObject(extension_object); 3207 builder()->ConvertAccumulatorToObject(extension_object);
3208 VisitFunctionClosureForContext(); 3208 VisitFunctionClosureForContext();
3209 builder()->CreateWithContext(extension_object); 3209 builder()->CreateWithContext(extension_object);
3210 execution_result()->SetResultInAccumulator(); 3210 execution_result()->SetResultInAccumulator();
3211 } 3211 }
3212 3212
3213 void BytecodeGenerator::VisitNewLocalCatchContext(Variable* variable) { 3213 void BytecodeGenerator::VisitNewLocalCatchContext(Variable* variable) {
3214 AccumulatorResultScope accumulator_execution_result(this); 3214 AccumulatorResultScope accumulator_execution_result(this);
3215 DCHECK(variable->IsContextSlot()); 3215 DCHECK(variable->IsContextSlot());
3216 3216
3217 Register exception = register_allocator()->NewRegister(); 3217 Register exception = register_allocator()->NewRegister();
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
3392 return execution_context()->scope()->language_mode(); 3392 return execution_context()->scope()->language_mode();
3393 } 3393 }
3394 3394
3395 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 3395 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
3396 return TypeFeedbackVector::GetIndex(slot); 3396 return TypeFeedbackVector::GetIndex(slot);
3397 } 3397 }
3398 3398
3399 } // namespace interpreter 3399 } // namespace interpreter
3400 } // namespace internal 3400 } // namespace internal
3401 } // namespace v8 3401 } // namespace v8
OLDNEW
« no previous file with comments | « src/interpreter/bytecode-array-builder.cc ('k') | src/interpreter/interpreter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698