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

Side by Side Diff: src/compiler/js-operator.cc

Issue 1412223015: [turbofan] Fix receiver binding for inlined callees. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Addressed comments. 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/compiler/js-operator.h ('k') | src/compiler/opcodes.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/js-operator.h" 5 #include "src/compiler/js-operator.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/lazy-instance.h" 9 #include "src/base/lazy-instance.h"
10 #include "src/compiler/opcodes.h" 10 #include "src/compiler/opcodes.h"
(...skipping 22 matching lines...) Expand all
33 bool operator!=(VectorSlotPair const& lhs, VectorSlotPair const& rhs) { 33 bool operator!=(VectorSlotPair const& lhs, VectorSlotPair const& rhs) {
34 return !(lhs == rhs); 34 return !(lhs == rhs);
35 } 35 }
36 36
37 37
38 size_t hash_value(VectorSlotPair const& p) { 38 size_t hash_value(VectorSlotPair const& p) {
39 return base::hash_combine(p.slot(), p.vector().location()); 39 return base::hash_combine(p.slot(), p.vector().location());
40 } 40 }
41 41
42 42
43 size_t hash_value(ConvertReceiverMode const& mode) {
44 return base::hash_value(static_cast<int>(mode));
45 }
46
47
48 std::ostream& operator<<(std::ostream& os, ConvertReceiverMode const& mode) {
49 switch (mode) {
50 case ConvertReceiverMode::kNullOrUndefined:
51 return os << "NULL_OR_UNDEFINED";
52 case ConvertReceiverMode::kNotNullOrUndefined:
53 return os << "NOT_NULL_OR_UNDEFINED";
54 case ConvertReceiverMode::kAny:
55 return os << "ANY";
56 }
57 UNREACHABLE();
58 return os;
59 }
60
61
43 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) { 62 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) {
44 os << p.arity() << ", " << p.flags() << ", " << p.language_mode(); 63 os << p.arity() << ", " << p.flags() << ", " << p.language_mode();
45 if (p.AllowTailCalls()) { 64 if (p.AllowTailCalls()) {
46 os << ", ALLOW_TAIL_CALLS"; 65 os << ", ALLOW_TAIL_CALLS";
47 } 66 }
48 return os; 67 return os;
49 } 68 }
50 69
51 70
52 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) { 71 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) {
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 default: \ 508 default: \
490 break; /* %*!%^$#@ */ \ 509 break; /* %*!%^$#@ */ \
491 } \ 510 } \
492 UNREACHABLE(); \ 511 UNREACHABLE(); \
493 return nullptr; \ 512 return nullptr; \
494 } 513 }
495 CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE) 514 CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
496 #undef CACHED_WITH_LANGUAGE_MODE 515 #undef CACHED_WITH_LANGUAGE_MODE
497 516
498 517
499 const Operator* JSOperatorBuilder::CallFunction(size_t arity, 518 const Operator* JSOperatorBuilder::CallFunction(
500 CallFunctionFlags flags, 519 size_t arity, CallFunctionFlags flags, LanguageMode language_mode,
501 LanguageMode language_mode, 520 VectorSlotPair const& feedback, ConvertReceiverMode convert_mode,
502 VectorSlotPair const& feedback, 521 TailCallMode tail_call_mode) {
503 TailCallMode tail_call_mode) {
504 CallFunctionParameters parameters(arity, flags, language_mode, feedback, 522 CallFunctionParameters parameters(arity, flags, language_mode, feedback,
505 tail_call_mode); 523 tail_call_mode, convert_mode);
506 return new (zone()) Operator1<CallFunctionParameters>( // -- 524 return new (zone()) Operator1<CallFunctionParameters>( // --
507 IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode 525 IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode
508 "JSCallFunction", // name 526 "JSCallFunction", // name
509 parameters.arity(), 1, 1, 1, 1, 2, // inputs/outputs 527 parameters.arity(), 1, 1, 1, 1, 2, // inputs/outputs
510 parameters); // parameter 528 parameters); // parameter
511 } 529 }
512 530
513 531
514 const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id, 532 const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id,
515 size_t arity) { 533 size_t arity) {
(...skipping 10 matching lines...) Expand all
526 544
527 const Operator* JSOperatorBuilder::CallConstruct(int arguments) { 545 const Operator* JSOperatorBuilder::CallConstruct(int arguments) {
528 return new (zone()) Operator1<int>( // -- 546 return new (zone()) Operator1<int>( // --
529 IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode 547 IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode
530 "JSCallConstruct", // name 548 "JSCallConstruct", // name
531 arguments, 1, 1, 1, 1, 2, // counts 549 arguments, 1, 1, 1, 1, 2, // counts
532 arguments); // parameter 550 arguments); // parameter
533 } 551 }
534 552
535 553
554 const Operator* JSOperatorBuilder::ConvertReceiver(
555 ConvertReceiverMode convert_mode) {
556 return new (zone()) Operator1<ConvertReceiverMode>( // --
557 IrOpcode::kJSConvertReceiver, Operator::kNoThrow, // opcode
558 "JSConvertReceiver", // name
559 1, 1, 1, 1, 1, 0, // counts
560 convert_mode); // parameter
561 }
562
563
536 const Operator* JSOperatorBuilder::LoadNamed(LanguageMode language_mode, 564 const Operator* JSOperatorBuilder::LoadNamed(LanguageMode language_mode,
537 Handle<Name> name, 565 Handle<Name> name,
538 const VectorSlotPair& feedback) { 566 const VectorSlotPair& feedback) {
539 NamedAccess access(language_mode, name, feedback); 567 NamedAccess access(language_mode, name, feedback);
540 return new (zone()) Operator1<NamedAccess>( // -- 568 return new (zone()) Operator1<NamedAccess>( // --
541 IrOpcode::kJSLoadNamed, Operator::kNoProperties, // opcode 569 IrOpcode::kJSLoadNamed, Operator::kNoProperties, // opcode
542 "JSLoadNamed", // name 570 "JSLoadNamed", // name
543 2, 1, 1, 1, 1, 2, // counts 571 2, 1, 1, 1, 1, 2, // counts
544 access); // parameter 572 access); // parameter
545 } 573 }
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 Handle<ScopeInfo>::hash>( // -- 766 Handle<ScopeInfo>::hash>( // --
739 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode 767 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode
740 "JSCreateScriptContext", // name 768 "JSCreateScriptContext", // name
741 1, 1, 1, 1, 1, 2, // counts 769 1, 1, 1, 1, 1, 2, // counts
742 scpope_info); // parameter 770 scpope_info); // parameter
743 } 771 }
744 772
745 } // namespace compiler 773 } // namespace compiler
746 } // namespace internal 774 } // namespace internal
747 } // namespace v8 775 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-operator.h ('k') | src/compiler/opcodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698