OLD | NEW |
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 23 matching lines...) Expand all Loading... |
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 mode) { | 43 size_t hash_value(ConvertReceiverMode mode) { |
44 return base::hash_value(static_cast<int>(mode)); | 44 return base::hash_value(static_cast<unsigned>(mode)); |
45 } | 45 } |
46 | 46 |
47 | 47 |
48 std::ostream& operator<<(std::ostream& os, ConvertReceiverMode mode) { | 48 std::ostream& operator<<(std::ostream& os, ConvertReceiverMode mode) { |
49 switch (mode) { | 49 switch (mode) { |
50 case ConvertReceiverMode::kNullOrUndefined: | 50 case ConvertReceiverMode::kNullOrUndefined: |
51 return os << "NULL_OR_UNDEFINED"; | 51 return os << "NULL_OR_UNDEFINED"; |
52 case ConvertReceiverMode::kNotNullOrUndefined: | 52 case ConvertReceiverMode::kNotNullOrUndefined: |
53 return os << "NOT_NULL_OR_UNDEFINED"; | 53 return os << "NOT_NULL_OR_UNDEFINED"; |
54 case ConvertReceiverMode::kAny: | 54 case ConvertReceiverMode::kAny: |
55 return os << "ANY"; | 55 return os << "ANY"; |
56 } | 56 } |
57 UNREACHABLE(); | 57 UNREACHABLE(); |
58 return os; | 58 return os; |
59 } | 59 } |
60 | 60 |
61 | 61 |
62 ConvertReceiverMode ConvertReceiverModeOf(Operator const* op) { | 62 ConvertReceiverMode ConvertReceiverModeOf(Operator const* op) { |
63 DCHECK_EQ(IrOpcode::kJSConvertReceiver, op->opcode()); | 63 DCHECK_EQ(IrOpcode::kJSConvertReceiver, op->opcode()); |
64 return OpParameter<ConvertReceiverMode>(op); | 64 return OpParameter<ConvertReceiverMode>(op); |
65 } | 65 } |
66 | 66 |
67 | 67 |
| 68 size_t hash_value(TailCallMode mode) { |
| 69 return base::hash_value(static_cast<unsigned>(mode)); |
| 70 } |
| 71 |
| 72 |
| 73 std::ostream& operator<<(std::ostream& os, TailCallMode mode) { |
| 74 switch (mode) { |
| 75 case TailCallMode::kAllow: |
| 76 return os << "ALLOW_TAIL_CALLS"; |
| 77 case TailCallMode::kDisallow: |
| 78 return os << "DISALLOW_TAIL_CALLS"; |
| 79 } |
| 80 UNREACHABLE(); |
| 81 return os; |
| 82 } |
| 83 |
| 84 |
68 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) { | 85 std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) { |
69 os << p.arity() << ", " << p.flags() << ", " << p.language_mode(); | 86 os << p.arity() << ", " << p.language_mode() << ", " << p.convert_mode() |
70 if (p.AllowTailCalls()) { | 87 << ", " << p.tail_call_mode(); |
71 os << ", ALLOW_TAIL_CALLS"; | |
72 } | |
73 return os; | 88 return os; |
74 } | 89 } |
75 | 90 |
76 | 91 |
77 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) { | 92 const CallFunctionParameters& CallFunctionParametersOf(const Operator* op) { |
78 DCHECK_EQ(IrOpcode::kJSCallFunction, op->opcode()); | 93 DCHECK_EQ(IrOpcode::kJSCallFunction, op->opcode()); |
79 return OpParameter<CallFunctionParameters>(op); | 94 return OpParameter<CallFunctionParameters>(op); |
80 } | 95 } |
81 | 96 |
82 | 97 |
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 break; /* %*!%^$#@ */ \ | 478 break; /* %*!%^$#@ */ \ |
464 } \ | 479 } \ |
465 UNREACHABLE(); \ | 480 UNREACHABLE(); \ |
466 return nullptr; \ | 481 return nullptr; \ |
467 } | 482 } |
468 CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE) | 483 CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE) |
469 #undef CACHED_WITH_LANGUAGE_MODE | 484 #undef CACHED_WITH_LANGUAGE_MODE |
470 | 485 |
471 | 486 |
472 const Operator* JSOperatorBuilder::CallFunction( | 487 const Operator* JSOperatorBuilder::CallFunction( |
473 size_t arity, CallFunctionFlags flags, LanguageMode language_mode, | 488 size_t arity, LanguageMode language_mode, VectorSlotPair const& feedback, |
474 VectorSlotPair const& feedback, ConvertReceiverMode convert_mode, | 489 ConvertReceiverMode convert_mode, TailCallMode tail_call_mode) { |
475 TailCallMode tail_call_mode) { | 490 CallFunctionParameters parameters(arity, language_mode, feedback, |
476 CallFunctionParameters parameters(arity, flags, language_mode, feedback, | |
477 tail_call_mode, convert_mode); | 491 tail_call_mode, convert_mode); |
478 return new (zone()) Operator1<CallFunctionParameters>( // -- | 492 return new (zone()) Operator1<CallFunctionParameters>( // -- |
479 IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode | 493 IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode |
480 "JSCallFunction", // name | 494 "JSCallFunction", // name |
481 parameters.arity(), 1, 1, 1, 1, 2, // inputs/outputs | 495 parameters.arity(), 1, 1, 1, 1, 2, // inputs/outputs |
482 parameters); // parameter | 496 parameters); // parameter |
483 } | 497 } |
484 | 498 |
485 | 499 |
486 const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id, | 500 const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id, |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 Handle<ScopeInfo>::hash>( // -- | 720 Handle<ScopeInfo>::hash>( // -- |
707 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode | 721 IrOpcode::kJSCreateScriptContext, Operator::kNoProperties, // opcode |
708 "JSCreateScriptContext", // name | 722 "JSCreateScriptContext", // name |
709 1, 1, 1, 1, 1, 2, // counts | 723 1, 1, 1, 1, 1, 2, // counts |
710 scpope_info); // parameter | 724 scpope_info); // parameter |
711 } | 725 } |
712 | 726 |
713 } // namespace compiler | 727 } // namespace compiler |
714 } // namespace internal | 728 } // namespace internal |
715 } // namespace v8 | 729 } // namespace v8 |
OLD | NEW |