| Index: src/compiler/js-operator.h
|
| diff --git a/src/compiler/js-operator.h b/src/compiler/js-operator.h
|
| index a9cfd6306e0fea11f415fdb2e44d3c09357bfd6b..5ac3b6769e3f7f0491967e7cde69e678273585a6 100644
|
| --- a/src/compiler/js-operator.h
|
| +++ b/src/compiler/js-operator.h
|
| @@ -90,6 +90,40 @@ ConvertReceiverMode ConvertReceiverModeOf(Operator const* op);
|
| // The ToBooleanHints are used as parameter by JSToBoolean operators.
|
| ToBooleanHints ToBooleanHintsOf(Operator const* op);
|
|
|
| +// Defines the flags for a JavaScript call forwarding parameters. This
|
| +// is used as parameter by JSConstructForwardVarargs operators.
|
| +class ConstructForwardVarargsParameters final {
|
| + public:
|
| + ConstructForwardVarargsParameters(size_t arity, uint32_t start_index)
|
| + : bit_field_(ArityField::encode(arity) |
|
| + StartIndexField::encode(start_index)) {}
|
| +
|
| + size_t arity() const { return ArityField::decode(bit_field_); }
|
| + uint32_t start_index() const { return StartIndexField::decode(bit_field_); }
|
| +
|
| + bool operator==(ConstructForwardVarargsParameters const& that) const {
|
| + return this->bit_field_ == that.bit_field_;
|
| + }
|
| + bool operator!=(ConstructForwardVarargsParameters const& that) const {
|
| + return !(*this == that);
|
| + }
|
| +
|
| + private:
|
| + friend size_t hash_value(ConstructForwardVarargsParameters const& p) {
|
| + return p.bit_field_;
|
| + }
|
| +
|
| + typedef BitField<size_t, 0, 16> ArityField;
|
| + typedef BitField<uint32_t, 16, 16> StartIndexField;
|
| +
|
| + uint32_t const bit_field_;
|
| +};
|
| +
|
| +std::ostream& operator<<(std::ostream&,
|
| + ConstructForwardVarargsParameters const&);
|
| +
|
| +ConstructForwardVarargsParameters const& ConstructForwardVarargsParametersOf(
|
| + Operator const*) WARN_UNUSED_RESULT;
|
|
|
| // Defines the arity and the feedback for a JavaScript constructor call. This is
|
| // used as a parameter by JSConstruct operators.
|
| @@ -146,11 +180,13 @@ SpreadWithArityParameter const& SpreadWithArityParameterOf(Operator const*);
|
| // is used as parameter by JSCallForwardVarargs operators.
|
| class CallForwardVarargsParameters final {
|
| public:
|
| - CallForwardVarargsParameters(uint32_t start_index,
|
| + CallForwardVarargsParameters(size_t arity, uint32_t start_index,
|
| TailCallMode tail_call_mode)
|
| - : bit_field_(StartIndexField::encode(start_index) |
|
| + : bit_field_(ArityField::encode(arity) |
|
| + StartIndexField::encode(start_index) |
|
| TailCallModeField::encode(tail_call_mode)) {}
|
|
|
| + size_t arity() const { return ArityField::decode(bit_field_); }
|
| uint32_t start_index() const { return StartIndexField::decode(bit_field_); }
|
| TailCallMode tail_call_mode() const {
|
| return TailCallModeField::decode(bit_field_);
|
| @@ -168,8 +204,9 @@ class CallForwardVarargsParameters final {
|
| return p.bit_field_;
|
| }
|
|
|
| - typedef BitField<uint32_t, 0, 30> StartIndexField;
|
| - typedef BitField<TailCallMode, 31, 1> TailCallModeField;
|
| + typedef BitField<size_t, 0, 15> ArityField;
|
| + typedef BitField<uint32_t, 15, 15> StartIndexField;
|
| + typedef BitField<TailCallMode, 30, 1> TailCallModeField;
|
|
|
| uint32_t const bit_field_;
|
| };
|
| @@ -665,7 +702,7 @@ class V8_EXPORT_PRIVATE JSOperatorBuilder final
|
| const Operator* CreateLiteralRegExp(Handle<String> constant_pattern,
|
| int literal_flags, int literal_index);
|
|
|
| - const Operator* CallForwardVarargs(uint32_t start_index,
|
| + const Operator* CallForwardVarargs(size_t arity, uint32_t start_index,
|
| TailCallMode tail_call_mode);
|
| const Operator* Call(
|
| size_t arity, CallFrequency frequency = CallFrequency(),
|
| @@ -676,6 +713,8 @@ class V8_EXPORT_PRIVATE JSOperatorBuilder final
|
| const Operator* CallRuntime(Runtime::FunctionId id);
|
| const Operator* CallRuntime(Runtime::FunctionId id, size_t arity);
|
| const Operator* CallRuntime(const Runtime::Function* function, size_t arity);
|
| +
|
| + const Operator* ConstructForwardVarargs(size_t arity, uint32_t start_index);
|
| const Operator* Construct(uint32_t arity,
|
| CallFrequency frequency = CallFrequency(),
|
| VectorSlotPair const& feedback = VectorSlotPair());
|
|
|