| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef V8_COMPILER_JS_OPERATOR_H_ | 5 #ifndef V8_COMPILER_JS_OPERATOR_H_ |
| 6 #define V8_COMPILER_JS_OPERATOR_H_ | 6 #define V8_COMPILER_JS_OPERATOR_H_ |
| 7 | 7 |
| 8 #include "src/compiler/type-hints.h" | 8 #include "src/compiler/type-hints.h" |
| 9 #include "src/runtime/runtime.h" | 9 #include "src/runtime/runtime.h" |
| 10 | 10 |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 | 73 |
| 74 std::ostream& operator<<(std::ostream&, CallConstructParameters const&); | 74 std::ostream& operator<<(std::ostream&, CallConstructParameters const&); |
| 75 | 75 |
| 76 CallConstructParameters const& CallConstructParametersOf(Operator const*); | 76 CallConstructParameters const& CallConstructParametersOf(Operator const*); |
| 77 | 77 |
| 78 | 78 |
| 79 // Defines the arity and the call flags for a JavaScript function call. This is | 79 // Defines the arity and the call flags for a JavaScript function call. This is |
| 80 // used as a parameter by JSCallFunction operators. | 80 // used as a parameter by JSCallFunction operators. |
| 81 class CallFunctionParameters final { | 81 class CallFunctionParameters final { |
| 82 public: | 82 public: |
| 83 CallFunctionParameters(size_t arity, LanguageMode language_mode, | 83 CallFunctionParameters(size_t arity, VectorSlotPair const& feedback, |
| 84 VectorSlotPair const& feedback, | |
| 85 TailCallMode tail_call_mode, | 84 TailCallMode tail_call_mode, |
| 86 ConvertReceiverMode convert_mode) | 85 ConvertReceiverMode convert_mode) |
| 87 : bit_field_(ArityField::encode(arity) | | 86 : bit_field_(ArityField::encode(arity) | |
| 88 ConvertReceiverModeField::encode(convert_mode) | | 87 ConvertReceiverModeField::encode(convert_mode) | |
| 89 LanguageModeField::encode(language_mode) | | |
| 90 TailCallModeField::encode(tail_call_mode)), | 88 TailCallModeField::encode(tail_call_mode)), |
| 91 feedback_(feedback) {} | 89 feedback_(feedback) {} |
| 92 | 90 |
| 93 size_t arity() const { return ArityField::decode(bit_field_); } | 91 size_t arity() const { return ArityField::decode(bit_field_); } |
| 94 LanguageMode language_mode() const { | |
| 95 return LanguageModeField::decode(bit_field_); | |
| 96 } | |
| 97 ConvertReceiverMode convert_mode() const { | 92 ConvertReceiverMode convert_mode() const { |
| 98 return ConvertReceiverModeField::decode(bit_field_); | 93 return ConvertReceiverModeField::decode(bit_field_); |
| 99 } | 94 } |
| 100 TailCallMode tail_call_mode() const { | 95 TailCallMode tail_call_mode() const { |
| 101 return TailCallModeField::decode(bit_field_); | 96 return TailCallModeField::decode(bit_field_); |
| 102 } | 97 } |
| 103 VectorSlotPair const& feedback() const { return feedback_; } | 98 VectorSlotPair const& feedback() const { return feedback_; } |
| 104 | 99 |
| 105 bool operator==(CallFunctionParameters const& that) const { | 100 bool operator==(CallFunctionParameters const& that) const { |
| 106 return this->bit_field_ == that.bit_field_ && | 101 return this->bit_field_ == that.bit_field_ && |
| 107 this->feedback_ == that.feedback_; | 102 this->feedback_ == that.feedback_; |
| 108 } | 103 } |
| 109 bool operator!=(CallFunctionParameters const& that) const { | 104 bool operator!=(CallFunctionParameters const& that) const { |
| 110 return !(*this == that); | 105 return !(*this == that); |
| 111 } | 106 } |
| 112 | 107 |
| 113 private: | 108 private: |
| 114 friend size_t hash_value(CallFunctionParameters const& p) { | 109 friend size_t hash_value(CallFunctionParameters const& p) { |
| 115 return base::hash_combine(p.bit_field_, p.feedback_); | 110 return base::hash_combine(p.bit_field_, p.feedback_); |
| 116 } | 111 } |
| 117 | 112 |
| 118 typedef BitField<size_t, 0, 27> ArityField; | 113 typedef BitField<size_t, 0, 29> ArityField; |
| 119 typedef BitField<ConvertReceiverMode, 27, 2> ConvertReceiverModeField; | 114 typedef BitField<ConvertReceiverMode, 29, 2> ConvertReceiverModeField; |
| 120 typedef BitField<LanguageMode, 29, 2> LanguageModeField; | |
| 121 typedef BitField<TailCallMode, 31, 1> TailCallModeField; | 115 typedef BitField<TailCallMode, 31, 1> TailCallModeField; |
| 122 | 116 |
| 123 const uint32_t bit_field_; | 117 const uint32_t bit_field_; |
| 124 const VectorSlotPair feedback_; | 118 const VectorSlotPair feedback_; |
| 125 }; | 119 }; |
| 126 | 120 |
| 127 size_t hash_value(CallFunctionParameters const&); | 121 size_t hash_value(CallFunctionParameters const&); |
| 128 | 122 |
| 129 std::ostream& operator<<(std::ostream&, CallFunctionParameters const&); | 123 std::ostream& operator<<(std::ostream&, CallFunctionParameters const&); |
| 130 | 124 |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 PretenureFlag pretenure); | 414 PretenureFlag pretenure); |
| 421 const Operator* CreateIterResultObject(); | 415 const Operator* CreateIterResultObject(); |
| 422 const Operator* CreateLiteralArray(Handle<FixedArray> constant_elements, | 416 const Operator* CreateLiteralArray(Handle<FixedArray> constant_elements, |
| 423 int literal_flags, int literal_index); | 417 int literal_flags, int literal_index); |
| 424 const Operator* CreateLiteralObject(Handle<FixedArray> constant_properties, | 418 const Operator* CreateLiteralObject(Handle<FixedArray> constant_properties, |
| 425 int literal_flags, int literal_index); | 419 int literal_flags, int literal_index); |
| 426 const Operator* CreateLiteralRegExp(Handle<String> constant_pattern, | 420 const Operator* CreateLiteralRegExp(Handle<String> constant_pattern, |
| 427 int literal_flags, int literal_index); | 421 int literal_flags, int literal_index); |
| 428 | 422 |
| 429 const Operator* CallFunction( | 423 const Operator* CallFunction( |
| 430 size_t arity, LanguageMode language_mode, | 424 size_t arity, VectorSlotPair const& feedback = VectorSlotPair(), |
| 431 VectorSlotPair const& feedback = VectorSlotPair(), | |
| 432 ConvertReceiverMode convert_mode = ConvertReceiverMode::kAny, | 425 ConvertReceiverMode convert_mode = ConvertReceiverMode::kAny, |
| 433 TailCallMode tail_call_mode = TailCallMode::kDisallow); | 426 TailCallMode tail_call_mode = TailCallMode::kDisallow); |
| 434 const Operator* CallRuntime(Runtime::FunctionId id); | 427 const Operator* CallRuntime(Runtime::FunctionId id); |
| 435 const Operator* CallRuntime(Runtime::FunctionId id, size_t arity); | 428 const Operator* CallRuntime(Runtime::FunctionId id, size_t arity); |
| 436 const Operator* CallRuntime(const Runtime::Function* function, size_t arity); | 429 const Operator* CallRuntime(const Runtime::Function* function, size_t arity); |
| 437 const Operator* CallConstruct(size_t arity, VectorSlotPair const& feedback); | 430 const Operator* CallConstruct(size_t arity, VectorSlotPair const& feedback); |
| 438 | 431 |
| 439 const Operator* ConvertReceiver(ConvertReceiverMode convert_mode); | 432 const Operator* ConvertReceiver(ConvertReceiverMode convert_mode); |
| 440 | 433 |
| 441 const Operator* LoadProperty(VectorSlotPair const& feedback); | 434 const Operator* LoadProperty(VectorSlotPair const& feedback); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 Zone* const zone_; | 480 Zone* const zone_; |
| 488 | 481 |
| 489 DISALLOW_COPY_AND_ASSIGN(JSOperatorBuilder); | 482 DISALLOW_COPY_AND_ASSIGN(JSOperatorBuilder); |
| 490 }; | 483 }; |
| 491 | 484 |
| 492 } // namespace compiler | 485 } // namespace compiler |
| 493 } // namespace internal | 486 } // namespace internal |
| 494 } // namespace v8 | 487 } // namespace v8 |
| 495 | 488 |
| 496 #endif // V8_COMPILER_JS_OPERATOR_H_ | 489 #endif // V8_COMPILER_JS_OPERATOR_H_ |
| OLD | NEW |