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

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

Issue 1414413004: Distinguish Call::CallType::PROPERTY_CALL further. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_issue-4521
Patch Set: Ports. Created 5 years, 1 month 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/full-codegen/x87/full-codegen-x87.cc ('k') | no next file » | 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/compiler.h" 7 #include "src/compiler.h"
8 #include "src/interpreter/control-flow-builders.h" 8 #include "src/interpreter/control-flow-builders.h"
9 #include "src/objects.h" 9 #include "src/objects.h"
10 #include "src/parser.h" 10 #include "src/parser.h"
(...skipping 1285 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 Register callee = execution_result()->NewRegister(); 1296 Register callee = execution_result()->NewRegister();
1297 1297
1298 // The receiver and arguments need to be allocated consecutively for 1298 // The receiver and arguments need to be allocated consecutively for
1299 // Call(). Future optimizations could avoid this there are no 1299 // Call(). Future optimizations could avoid this there are no
1300 // arguments or the receiver and arguments are already consecutive. 1300 // arguments or the receiver and arguments are already consecutive.
1301 ZoneList<Expression*>* args = expr->arguments(); 1301 ZoneList<Expression*>* args = expr->arguments();
1302 execution_result()->PrepareForConsecutiveAllocations(args->length() + 1); 1302 execution_result()->PrepareForConsecutiveAllocations(args->length() + 1);
1303 Register receiver = execution_result()->NextConsecutiveRegister(); 1303 Register receiver = execution_result()->NextConsecutiveRegister();
1304 1304
1305 switch (call_type) { 1305 switch (call_type) {
1306 case Call::PROPERTY_CALL: { 1306 case Call::NAMED_PROPERTY_CALL:
1307 case Call::KEYED_PROPERTY_CALL: {
1307 Property* property = callee_expr->AsProperty(); 1308 Property* property = callee_expr->AsProperty();
1308 if (property->IsSuperAccess()) {
1309 UNIMPLEMENTED();
1310 }
1311
1312 VisitForAccumulatorValue(property->obj()); 1309 VisitForAccumulatorValue(property->obj());
1313 builder()->StoreAccumulatorInRegister(receiver); 1310 builder()->StoreAccumulatorInRegister(receiver);
1314 VisitPropertyLoadForAccumulator(receiver, property); 1311 VisitPropertyLoadForAccumulator(receiver, property);
1315 builder()->StoreAccumulatorInRegister(callee); 1312 builder()->StoreAccumulatorInRegister(callee);
1316 break; 1313 break;
1317 } 1314 }
1318 case Call::GLOBAL_CALL: { 1315 case Call::GLOBAL_CALL: {
1319 // Receiver is undefined for global calls. 1316 // Receiver is undefined for global calls.
1320 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver); 1317 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver);
1321 // Load callee as a global variable. 1318 // Load callee as a global variable.
1322 VariableProxy* proxy = callee_expr->AsVariableProxy(); 1319 VariableProxy* proxy = callee_expr->AsVariableProxy();
1323 VisitVariableLoadForAccumulatorValue(proxy->var(), 1320 VisitVariableLoadForAccumulatorValue(proxy->var(),
1324 proxy->VariableFeedbackSlot()); 1321 proxy->VariableFeedbackSlot());
1325 builder()->StoreAccumulatorInRegister(callee); 1322 builder()->StoreAccumulatorInRegister(callee);
1326 break; 1323 break;
1327 } 1324 }
1328 case Call::OTHER_CALL: { 1325 case Call::OTHER_CALL: {
1329 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver); 1326 builder()->LoadUndefined().StoreAccumulatorInRegister(receiver);
1330 VisitForAccumulatorValue(callee_expr); 1327 VisitForAccumulatorValue(callee_expr);
1331 builder()->StoreAccumulatorInRegister(callee); 1328 builder()->StoreAccumulatorInRegister(callee);
1332 break; 1329 break;
1333 } 1330 }
1331 case Call::NAMED_SUPER_PROPERTY_CALL:
1332 case Call::KEYED_SUPER_PROPERTY_CALL:
1334 case Call::LOOKUP_SLOT_CALL: 1333 case Call::LOOKUP_SLOT_CALL:
1335 case Call::SUPER_CALL: 1334 case Call::SUPER_CALL:
1336 case Call::POSSIBLY_EVAL_CALL: 1335 case Call::POSSIBLY_EVAL_CALL:
1337 UNIMPLEMENTED(); 1336 UNIMPLEMENTED();
1338 } 1337 }
1339 1338
1340 // Evaluate all arguments to the function call and store in sequential 1339 // Evaluate all arguments to the function call and store in sequential
1341 // registers. 1340 // registers.
1342 if (args->length() > 0) { 1341 if (args->length() > 0) {
1343 Register arg = VisitArguments(args); 1342 Register arg = VisitArguments(args);
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
1947 } 1946 }
1948 1947
1949 1948
1950 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const { 1949 int BytecodeGenerator::feedback_index(FeedbackVectorSlot slot) const {
1951 return info()->feedback_vector()->GetIndex(slot); 1950 return info()->feedback_vector()->GetIndex(slot);
1952 } 1951 }
1953 1952
1954 } // namespace interpreter 1953 } // namespace interpreter
1955 } // namespace internal 1954 } // namespace internal
1956 } // namespace v8 1955 } // namespace v8
OLDNEW
« no previous file with comments | « src/full-codegen/x87/full-codegen-x87.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698