| Index: src/compiler/js-operator.cc
|
| diff --git a/src/compiler/js-operator.cc b/src/compiler/js-operator.cc
|
| index 4687e8318d7268c9631de3a0297fbae7cb886009..7913491b46b6688b54da7459e30db3d8e7724729 100644
|
| --- a/src/compiler/js-operator.cc
|
| +++ b/src/compiler/js-operator.cc
|
| @@ -63,6 +63,34 @@ std::ostream& operator<<(std::ostream& os, TailCallMode mode) {
|
| }
|
|
|
|
|
| +bool operator==(CallConstructParameters const& lhs,
|
| + CallConstructParameters const& rhs) {
|
| + return lhs.arity() == rhs.arity() && lhs.feedback() == rhs.feedback();
|
| +}
|
| +
|
| +
|
| +bool operator!=(CallConstructParameters const& lhs,
|
| + CallConstructParameters const& rhs) {
|
| + return !(lhs == rhs);
|
| +}
|
| +
|
| +
|
| +size_t hash_value(CallConstructParameters const& p) {
|
| + return base::hash_combine(p.arity(), p.feedback());
|
| +}
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os, CallConstructParameters const& p) {
|
| + return os << p.arity();
|
| +}
|
| +
|
| +
|
| +CallConstructParameters const& CallConstructParametersOf(Operator const* op) {
|
| + DCHECK_EQ(IrOpcode::kJSCallConstruct, op->opcode());
|
| + return OpParameter<CallConstructParameters>(op);
|
| +}
|
| +
|
| +
|
| std::ostream& operator<<(std::ostream& os, CallFunctionParameters const& p) {
|
| os << p.arity() << ", " << p.language_mode() << ", " << p.convert_mode()
|
| << ", " << p.tail_call_mode();
|
| @@ -322,6 +350,37 @@ const CreateArgumentsParameters& CreateArgumentsParametersOf(
|
| }
|
|
|
|
|
| +bool operator==(CreateArrayParameters const& lhs,
|
| + CreateArrayParameters const& rhs) {
|
| + return lhs.arity() == rhs.arity() &&
|
| + lhs.site().location() == rhs.site().location();
|
| +}
|
| +
|
| +
|
| +bool operator!=(CreateArrayParameters const& lhs,
|
| + CreateArrayParameters const& rhs) {
|
| + return !(lhs == rhs);
|
| +}
|
| +
|
| +
|
| +size_t hash_value(CreateArrayParameters const& p) {
|
| + return base::hash_combine(p.arity(), p.site().location());
|
| +}
|
| +
|
| +
|
| +std::ostream& operator<<(std::ostream& os, CreateArrayParameters const& p) {
|
| + os << p.arity();
|
| + if (!p.site().is_null()) os << ", " << Brief(*p.site());
|
| + return os;
|
| +}
|
| +
|
| +
|
| +const CreateArrayParameters& CreateArrayParametersOf(const Operator* op) {
|
| + DCHECK_EQ(IrOpcode::kJSCreateArray, op->opcode());
|
| + return OpParameter<CreateArrayParameters>(op);
|
| +}
|
| +
|
| +
|
| bool operator==(CreateClosureParameters const& lhs,
|
| CreateClosureParameters const& rhs) {
|
| return lhs.pretenure() == rhs.pretenure() &&
|
| @@ -374,6 +433,7 @@ const CreateClosureParameters& CreateClosureParametersOf(const Operator* op) {
|
| V(LoadMessage, Operator::kNoThrow, 0, 1) \
|
| V(StoreMessage, Operator::kNoThrow, 1, 0) \
|
| V(StackCheck, Operator::kNoProperties, 0, 0) \
|
| + V(LoadNativeContext, Operator::kEliminatable, 1, 1) \
|
| V(CreateWithContext, Operator::kNoProperties, 2, 1) \
|
| V(CreateModuleContext, Operator::kNoProperties, 2, 1)
|
|
|
| @@ -493,12 +553,14 @@ const Operator* JSOperatorBuilder::CallRuntime(Runtime::FunctionId id,
|
| }
|
|
|
|
|
| -const Operator* JSOperatorBuilder::CallConstruct(int arguments) {
|
| - return new (zone()) Operator1<int>( // --
|
| +const Operator* JSOperatorBuilder::CallConstruct(
|
| + size_t arity, VectorSlotPair const& feedback) {
|
| + CallConstructParameters parameters(arity, feedback);
|
| + return new (zone()) Operator1<CallConstructParameters>( // --
|
| IrOpcode::kJSCallConstruct, Operator::kNoProperties, // opcode
|
| "JSCallConstruct", // name
|
| - arguments, 1, 1, 1, 1, 2, // counts
|
| - arguments); // parameter
|
| + parameters.arity(), 1, 1, 1, 1, 2, // counts
|
| + parameters); // parameter
|
| }
|
|
|
|
|
| @@ -637,6 +699,19 @@ const Operator* JSOperatorBuilder::CreateArguments(
|
| }
|
|
|
|
|
| +const Operator* JSOperatorBuilder::CreateArray(size_t arity,
|
| + Handle<AllocationSite> site) {
|
| + // constructor, new_target, arg1, ..., argN
|
| + int const value_input_count = static_cast<int>(arity) + 2;
|
| + CreateArrayParameters parameters(arity, site);
|
| + return new (zone()) Operator1<CreateArrayParameters>( // --
|
| + IrOpcode::kJSCreateArray, Operator::kNoProperties, // opcode
|
| + "JSCreateArray", // name
|
| + value_input_count, 1, 1, 1, 1, 2, // counts
|
| + parameters); // parameter
|
| +}
|
| +
|
| +
|
| const Operator* JSOperatorBuilder::CreateClosure(
|
| Handle<SharedFunctionInfo> shared_info, PretenureFlag pretenure) {
|
| CreateClosureParameters parameters(shared_info, pretenure);
|
|
|