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

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: 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
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 }
Benedikt Meurer 2015/10/27 11:24:42 Nit: UNREACHABLE(); return os;
Michael Starzinger 2015/10/27 11:35:55 Done.
57 }
58
59
43 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) { 60 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) {
44 os << p.arity() << ", " << p.flags() << ", " << p.language_mode(); 61 os << p.arity() << ", " << p.flags() << ", " << p.language_mode();
45 if (p.AllowTailCalls()) { 62 if (p.AllowTailCalls()) {
46 os << ", ALLOW_TAIL_CALLS"; 63 os << ", ALLOW_TAIL_CALLS";
47 } 64 }
48 return os; 65 return os;
49 } 66 }
50 67
51 68
52 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) { 69 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) {
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 default: \ 506 default: \
490 break; /* %*!%^$#@ */ \ 507 break; /* %*!%^$#@ */ \
491 } \ 508 } \
492 UNREACHABLE(); \ 509 UNREACHABLE(); \
493 return nullptr; \ 510 return nullptr; \
494 } 511 }
495 CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE) 512 CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE)
496 #undef CACHED_WITH_LANGUAGE_MODE 513 #undef CACHED_WITH_LANGUAGE_MODE
497 514
498 515
499 const Operator* JSOperatorBuilder::CallFunction(size_t arity, 516 const Operator* JSOperatorBuilder::CallFunction(
500 CallFunctionFlags flags, 517 size_t arity, CallFunctionFlags flags, LanguageMode language_mode,
501 LanguageMode language_mode, 518 VectorSlotPair const& feedback, ConvertReceiverMode convert_mode,
502 VectorSlotPair const& feedback, 519 TailCallMode tail_call_mode) {
503 TailCallMode tail_call_mode) {
504 CallFunctionParameters parameters(arity, flags, language_mode, feedback, 520 CallFunctionParameters parameters(arity, flags, language_mode, feedback,
505 tail_call_mode); 521 tail_call_mode, convert_mode);
506 return new (zone()) Operator1<CallFunctionParameters>( // -- 522 return new (zone()) Operator1<CallFunctionParameters>( // --
507 IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode 523 IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode
508 "JSCallFunction", // name 524 "JSCallFunction", // name
509 parameters.arity(), 1, 1, 1, 1, 2, // inputs/outputs 525 parameters.arity(), 1, 1, 1, 1, 2, // inputs/outputs
510 parameters); // parameter 526 parameters); // parameter
511 } 527 }
512 528
513 529
514 const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id, 530 const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id,
515 size_t arity) { 531 size_t arity) {
(...skipping 10 matching lines...) Expand all
526 542
527 const Operator* JSOperatorBuilder::CallConstruct(int arguments) { 543 const Operator* JSOperatorBuilder::CallConstruct(int arguments) {
528 return new (zone()) Operator1<int>( // -- 544 return new (zone()) Operator1<int>( // --
529 IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode 545 IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode
530 "JSCallConstruct", // name 546 "JSCallConstruct", // name
531 arguments, 1, 1, 1, 1, 2, // counts 547 arguments, 1, 1, 1, 1, 2, // counts
532 arguments); // parameter 548 arguments); // parameter
533 } 549 }
534 550
535 551
552 const Operator* JSOperatorBuilder::ConvertReceiver(
553 ConvertReceiverMode convert_mode) {
554 return new (zone()) Operator1<ConvertReceiverMode>( // --
555 IrOpcode::kJSConvertReceiver, Operator::kNoThrow, // opcode
556 "JSConvertReceiver", // name
557 1, 1, 1, 1, 1, 0, // counts
558 convert_mode); // parameter
559 }
560
561
536 const Operator* JSOperatorBuilder::LoadNamed(LanguageMode language_mode, 562 const Operator* JSOperatorBuilder::LoadNamed(LanguageMode language_mode,
537 Handle<Name> name, 563 Handle<Name> name,
538 const VectorSlotPair& feedback) { 564 const VectorSlotPair& feedback) {
539 NamedAccess access(language_mode, name, feedback); 565 NamedAccess access(language_mode, name, feedback);
540 return new (zone()) Operator1<NamedAccess>( // -- 566 return new (zone()) Operator1<NamedAccess>( // --
541 IrOpcode::kJSLoadNamed, Operator::kNoProperties, // opcode 567 IrOpcode::kJSLoadNamed, Operator::kNoProperties, // opcode
542 "JSLoadNamed", // name 568 "JSLoadNamed", // name
543 2, 1, 1, 1, 1, 2, // counts 569 2, 1, 1, 1, 1, 2, // counts
544 access); // parameter 570 access); // parameter
545 } 571 }
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 Handle<ScopeInfo>::hash>( // -- 764 Handle<ScopeInfo>::hash>( // --
739 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode 765 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode
740 "JSCreateScriptContext", // name 766 "JSCreateScriptContext", // name
741 1, 1, 1, 1, 1, 2, // counts 767 1, 1, 1, 1, 1, 2, // counts
742 scpope_info); // parameter 768 scpope_info); // parameter
743 } 769 }
744 770
745 } // namespace compiler 771 } // namespace compiler
746 } // namespace internal 772 } // namespace internal
747 } // namespace v8 773 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698