Chromium Code Reviews| Index: src/compiler/js-operator.cc |
| diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc |
| index 2f727ac24f5935c725ecd2a0125f68a8e4cecc62..38dca0ba05ff7656e0be6989499e8c887014a382 100644 |
| --- a/src/compiler/js-operator.cc |
| +++ b/src/compiler/js-operator.cc |
| @@ -40,6 +40,23 @@ size_t hash_value(VectorSlotPair const& p) { |
| } |
| +size_t hash_value(ConvertReceiverMode const& mode) { |
| + return base::hash_value(static_cast<int>(mode)); |
| +} |
| + |
| + |
| +std::ostream& operator<<(std::ostream& os, ConvertReceiverMode const& mode) { |
| + switch (mode) { |
| + case ConvertReceiverMode::kNullOrUndefined: |
| + return os << "NULL_OR_UNDEFINED"; |
| + case ConvertReceiverMode::kNotNullOrUndefined: |
| + return os << "NOT_NULL_OR_UNDEFINED"; |
| + case ConvertReceiverMode::kAny: |
| + return os << "ANY"; |
| + } |
|
Benedikt Meurer
2015/10/27 11:24:42
Nit: UNREACHABLE(); return os;
Michael Starzinger
2015/10/27 11:35:55
Done.
|
| +} |
| + |
| + |
| std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) { |
| os << p.arity() << ", " << p.flags() << ", " << p.language_mode(); |
| if (p.AllowTailCalls()) { |
| @@ -496,13 +513,12 @@ CACHED_OP_LIST_WITH_LANGUAGE_MODE(CACHED_WITH_LANGUAGE_MODE) |
| #undef CACHED_WITH_LANGUAGE_MODE |
| -const Operator* JSOperatorBuilder::CallFunction(size_t arity, |
| - CallFunctionFlags flags, |
| - LanguageMode language_mode, |
| - VectorSlotPair const& feedback, |
| - TailCallMode tail_call_mode) { |
| +const Operator* JSOperatorBuilder::CallFunction( |
| + size_t arity, CallFunctionFlags flags, LanguageMode language_mode, |
| + VectorSlotPair const& feedback, ConvertReceiverMode convert_mode, |
| + TailCallMode tail_call_mode) { |
| CallFunctionParameters parameters(arity, flags, language_mode, feedback, |
| - tail_call_mode); |
| + tail_call_mode, convert_mode); |
| return new (zone()) Operator1<CallFunctionParameters>( // -- |
| IrOpcode::kJSCallFunction, Operator::kNoProperties, // opcode |
| "JSCallFunction", // name |
| @@ -533,6 +549,16 @@ const Operator* JSOperatorBuilder::CallConstruct(int arguments) { |
| } |
| +const Operator* JSOperatorBuilder::ConvertReceiver( |
| + ConvertReceiverMode convert_mode) { |
| + return new (zone()) Operator1<ConvertReceiverMode>( // -- |
| + IrOpcode::kJSConvertReceiver, Operator::kNoThrow, // opcode |
| + "JSConvertReceiver", // name |
| + 1, 1, 1, 1, 1, 0, // counts |
| + convert_mode); // parameter |
| +} |
| + |
| + |
| const Operator* JSOperatorBuilder::LoadNamed(LanguageMode language_mode, |
| Handle<Name> name, |
| const VectorSlotPair& feedback) { |