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/base/compiler-specific.h" | 8 #include "src/base/compiler-specific.h" |
9 #include "src/globals.h" | 9 #include "src/globals.h" |
10 #include "src/handles.h" | 10 #include "src/handles.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 size_t hash_value(VectorSlotPair const&); | 83 size_t hash_value(VectorSlotPair const&); |
84 | 84 |
85 | 85 |
86 // The ConvertReceiverMode is used as parameter by JSConvertReceiver operators. | 86 // The ConvertReceiverMode is used as parameter by JSConvertReceiver operators. |
87 ConvertReceiverMode ConvertReceiverModeOf(Operator const* op); | 87 ConvertReceiverMode ConvertReceiverModeOf(Operator const* op); |
88 | 88 |
89 | 89 |
90 // The ToBooleanHints are used as parameter by JSToBoolean operators. | 90 // The ToBooleanHints are used as parameter by JSToBoolean operators. |
91 ToBooleanHints ToBooleanHintsOf(Operator const* op); | 91 ToBooleanHints ToBooleanHintsOf(Operator const* op); |
92 | 92 |
| 93 // Defines the flags for a JavaScript call forwarding parameters. This |
| 94 // is used as parameter by JSConstructForwardVarargs operators. |
| 95 class ConstructForwardVarargsParameters final { |
| 96 public: |
| 97 ConstructForwardVarargsParameters(size_t arity, uint32_t start_index) |
| 98 : bit_field_(ArityField::encode(arity) | |
| 99 StartIndexField::encode(start_index)) {} |
| 100 |
| 101 size_t arity() const { return ArityField::decode(bit_field_); } |
| 102 uint32_t start_index() const { return StartIndexField::decode(bit_field_); } |
| 103 |
| 104 bool operator==(ConstructForwardVarargsParameters const& that) const { |
| 105 return this->bit_field_ == that.bit_field_; |
| 106 } |
| 107 bool operator!=(ConstructForwardVarargsParameters const& that) const { |
| 108 return !(*this == that); |
| 109 } |
| 110 |
| 111 private: |
| 112 friend size_t hash_value(ConstructForwardVarargsParameters const& p) { |
| 113 return p.bit_field_; |
| 114 } |
| 115 |
| 116 typedef BitField<size_t, 0, 16> ArityField; |
| 117 typedef BitField<uint32_t, 16, 16> StartIndexField; |
| 118 |
| 119 uint32_t const bit_field_; |
| 120 }; |
| 121 |
| 122 std::ostream& operator<<(std::ostream&, |
| 123 ConstructForwardVarargsParameters const&); |
| 124 |
| 125 ConstructForwardVarargsParameters const& ConstructForwardVarargsParametersOf( |
| 126 Operator const*) WARN_UNUSED_RESULT; |
93 | 127 |
94 // Defines the arity and the feedback for a JavaScript constructor call. This is | 128 // Defines the arity and the feedback for a JavaScript constructor call. This is |
95 // used as a parameter by JSConstruct operators. | 129 // used as a parameter by JSConstruct operators. |
96 class ConstructParameters final { | 130 class ConstructParameters final { |
97 public: | 131 public: |
98 ConstructParameters(uint32_t arity, CallFrequency frequency, | 132 ConstructParameters(uint32_t arity, CallFrequency frequency, |
99 VectorSlotPair const& feedback) | 133 VectorSlotPair const& feedback) |
100 : arity_(arity), frequency_(frequency), feedback_(feedback) {} | 134 : arity_(arity), frequency_(frequency), feedback_(feedback) {} |
101 | 135 |
102 uint32_t arity() const { return arity_; } | 136 uint32_t arity() const { return arity_; } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 size_t hash_value(SpreadWithArityParameter const&); | 173 size_t hash_value(SpreadWithArityParameter const&); |
140 | 174 |
141 std::ostream& operator<<(std::ostream&, SpreadWithArityParameter const&); | 175 std::ostream& operator<<(std::ostream&, SpreadWithArityParameter const&); |
142 | 176 |
143 SpreadWithArityParameter const& SpreadWithArityParameterOf(Operator const*); | 177 SpreadWithArityParameter const& SpreadWithArityParameterOf(Operator const*); |
144 | 178 |
145 // Defines the flags for a JavaScript call forwarding parameters. This | 179 // Defines the flags for a JavaScript call forwarding parameters. This |
146 // is used as parameter by JSCallForwardVarargs operators. | 180 // is used as parameter by JSCallForwardVarargs operators. |
147 class CallForwardVarargsParameters final { | 181 class CallForwardVarargsParameters final { |
148 public: | 182 public: |
149 CallForwardVarargsParameters(uint32_t start_index, | 183 CallForwardVarargsParameters(size_t arity, uint32_t start_index, |
150 TailCallMode tail_call_mode) | 184 TailCallMode tail_call_mode) |
151 : bit_field_(StartIndexField::encode(start_index) | | 185 : bit_field_(ArityField::encode(arity) | |
| 186 StartIndexField::encode(start_index) | |
152 TailCallModeField::encode(tail_call_mode)) {} | 187 TailCallModeField::encode(tail_call_mode)) {} |
153 | 188 |
| 189 size_t arity() const { return ArityField::decode(bit_field_); } |
154 uint32_t start_index() const { return StartIndexField::decode(bit_field_); } | 190 uint32_t start_index() const { return StartIndexField::decode(bit_field_); } |
155 TailCallMode tail_call_mode() const { | 191 TailCallMode tail_call_mode() const { |
156 return TailCallModeField::decode(bit_field_); | 192 return TailCallModeField::decode(bit_field_); |
157 } | 193 } |
158 | 194 |
159 bool operator==(CallForwardVarargsParameters const& that) const { | 195 bool operator==(CallForwardVarargsParameters const& that) const { |
160 return this->bit_field_ == that.bit_field_; | 196 return this->bit_field_ == that.bit_field_; |
161 } | 197 } |
162 bool operator!=(CallForwardVarargsParameters const& that) const { | 198 bool operator!=(CallForwardVarargsParameters const& that) const { |
163 return !(*this == that); | 199 return !(*this == that); |
164 } | 200 } |
165 | 201 |
166 private: | 202 private: |
167 friend size_t hash_value(CallForwardVarargsParameters const& p) { | 203 friend size_t hash_value(CallForwardVarargsParameters const& p) { |
168 return p.bit_field_; | 204 return p.bit_field_; |
169 } | 205 } |
170 | 206 |
171 typedef BitField<uint32_t, 0, 30> StartIndexField; | 207 typedef BitField<size_t, 0, 15> ArityField; |
172 typedef BitField<TailCallMode, 31, 1> TailCallModeField; | 208 typedef BitField<uint32_t, 15, 15> StartIndexField; |
| 209 typedef BitField<TailCallMode, 30, 1> TailCallModeField; |
173 | 210 |
174 uint32_t const bit_field_; | 211 uint32_t const bit_field_; |
175 }; | 212 }; |
176 | 213 |
177 std::ostream& operator<<(std::ostream&, CallForwardVarargsParameters const&); | 214 std::ostream& operator<<(std::ostream&, CallForwardVarargsParameters const&); |
178 | 215 |
179 CallForwardVarargsParameters const& CallForwardVarargsParametersOf( | 216 CallForwardVarargsParameters const& CallForwardVarargsParametersOf( |
180 Operator const*) WARN_UNUSED_RESULT; | 217 Operator const*) WARN_UNUSED_RESULT; |
181 | 218 |
182 // Defines the arity and the call flags for a JavaScript function call. This is | 219 // Defines the arity and the call flags for a JavaScript function call. This is |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 const Operator* CreateKeyValueArray(); | 695 const Operator* CreateKeyValueArray(); |
659 const Operator* CreateLiteralArray(Handle<ConstantElementsPair> constant, | 696 const Operator* CreateLiteralArray(Handle<ConstantElementsPair> constant, |
660 int literal_flags, int literal_index, | 697 int literal_flags, int literal_index, |
661 int number_of_elements); | 698 int number_of_elements); |
662 const Operator* CreateLiteralObject(Handle<BoilerplateDescription> constant, | 699 const Operator* CreateLiteralObject(Handle<BoilerplateDescription> constant, |
663 int literal_flags, int literal_index, | 700 int literal_flags, int literal_index, |
664 int number_of_properties); | 701 int number_of_properties); |
665 const Operator* CreateLiteralRegExp(Handle<String> constant_pattern, | 702 const Operator* CreateLiteralRegExp(Handle<String> constant_pattern, |
666 int literal_flags, int literal_index); | 703 int literal_flags, int literal_index); |
667 | 704 |
668 const Operator* CallForwardVarargs(uint32_t start_index, | 705 const Operator* CallForwardVarargs(size_t arity, uint32_t start_index, |
669 TailCallMode tail_call_mode); | 706 TailCallMode tail_call_mode); |
670 const Operator* Call( | 707 const Operator* Call( |
671 size_t arity, CallFrequency frequency = CallFrequency(), | 708 size_t arity, CallFrequency frequency = CallFrequency(), |
672 VectorSlotPair const& feedback = VectorSlotPair(), | 709 VectorSlotPair const& feedback = VectorSlotPair(), |
673 ConvertReceiverMode convert_mode = ConvertReceiverMode::kAny, | 710 ConvertReceiverMode convert_mode = ConvertReceiverMode::kAny, |
674 TailCallMode tail_call_mode = TailCallMode::kDisallow); | 711 TailCallMode tail_call_mode = TailCallMode::kDisallow); |
675 const Operator* CallWithSpread(uint32_t arity); | 712 const Operator* CallWithSpread(uint32_t arity); |
676 const Operator* CallRuntime(Runtime::FunctionId id); | 713 const Operator* CallRuntime(Runtime::FunctionId id); |
677 const Operator* CallRuntime(Runtime::FunctionId id, size_t arity); | 714 const Operator* CallRuntime(Runtime::FunctionId id, size_t arity); |
678 const Operator* CallRuntime(const Runtime::Function* function, size_t arity); | 715 const Operator* CallRuntime(const Runtime::Function* function, size_t arity); |
| 716 |
| 717 const Operator* ConstructForwardVarargs(size_t arity, uint32_t start_index); |
679 const Operator* Construct(uint32_t arity, | 718 const Operator* Construct(uint32_t arity, |
680 CallFrequency frequency = CallFrequency(), | 719 CallFrequency frequency = CallFrequency(), |
681 VectorSlotPair const& feedback = VectorSlotPair()); | 720 VectorSlotPair const& feedback = VectorSlotPair()); |
682 const Operator* ConstructWithSpread(uint32_t arity); | 721 const Operator* ConstructWithSpread(uint32_t arity); |
683 | 722 |
684 const Operator* ConvertReceiver(ConvertReceiverMode convert_mode); | 723 const Operator* ConvertReceiver(ConvertReceiverMode convert_mode); |
685 | 724 |
686 const Operator* LoadProperty(VectorSlotPair const& feedback); | 725 const Operator* LoadProperty(VectorSlotPair const& feedback); |
687 const Operator* LoadNamed(Handle<Name> name, VectorSlotPair const& feedback); | 726 const Operator* LoadNamed(Handle<Name> name, VectorSlotPair const& feedback); |
688 | 727 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 Zone* const zone_; | 792 Zone* const zone_; |
754 | 793 |
755 DISALLOW_COPY_AND_ASSIGN(JSOperatorBuilder); | 794 DISALLOW_COPY_AND_ASSIGN(JSOperatorBuilder); |
756 }; | 795 }; |
757 | 796 |
758 } // namespace compiler | 797 } // namespace compiler |
759 } // namespace internal | 798 } // namespace internal |
760 } // namespace v8 | 799 } // namespace v8 |
761 | 800 |
762 #endif // V8_COMPILER_JS_OPERATOR_H_ | 801 #endif // V8_COMPILER_JS_OPERATOR_H_ |
OLD | NEW |