| Index: src/code-stub-assembler.h
|
| diff --git a/src/code-stub-assembler.h b/src/code-stub-assembler.h
|
| index 7821d35a419c5a758cc63d30ef4eab6f9e9b4e0b..36e7801bdd188c082a16e0a29e594835e56a8741 100644
|
| --- a/src/code-stub-assembler.h
|
| +++ b/src/code-stub-assembler.h
|
| @@ -1108,6 +1108,8 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
| compiler::Node* IsDetachedBuffer(compiler::Node* buffer);
|
|
|
| private:
|
| + friend class CodeStubArguments;
|
| +
|
| enum ElementSupport { kOnlyProperties, kSupportElements };
|
|
|
| void DescriptorLookupLinear(compiler::Node* unique_name,
|
| @@ -1208,6 +1210,53 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
| static const int kElementLoopUnrollThreshold = 8;
|
| };
|
|
|
| +class CodeStubArguments {
|
| + public:
|
| + // |argc| specifies the number of arguments passed to the builtin excluding
|
| + // the receiver.
|
| + CodeStubArguments(CodeStubAssembler* assembler, compiler::Node* argc,
|
| + CodeStubAssembler::ParameterMode mode =
|
| + CodeStubAssembler::INTPTR_PARAMETERS);
|
| +
|
| + compiler::Node* GetReceiver();
|
| +
|
| + // |index| is zero-based and does not include the receiver
|
| + compiler::Node* AtIndex(compiler::Node* index,
|
| + CodeStubAssembler::ParameterMode mode =
|
| + CodeStubAssembler::INTPTR_PARAMETERS);
|
| +
|
| + compiler::Node* AtIndex(int index);
|
| +
|
| + typedef std::function<void(CodeStubAssembler* assembler, compiler::Node* arg)>
|
| + ForEachBodyFunction;
|
| +
|
| + // Iteration doesn't include the receiver. |first| and |last| are zero-based.
|
| + void ForEach(ForEachBodyFunction body, compiler::Node* first = nullptr,
|
| + compiler::Node* last = nullptr,
|
| + CodeStubAssembler::ParameterMode mode =
|
| + CodeStubAssembler::INTPTR_PARAMETERS) {
|
| + CodeStubAssembler::VariableList list(0, assembler_->zone());
|
| + ForEach(list, body, first, last);
|
| + }
|
| +
|
| + // Iteration doesn't include the receiver. |first| and |last| are zero-based.
|
| + void ForEach(const CodeStubAssembler::VariableList& vars,
|
| + ForEachBodyFunction body, compiler::Node* first = nullptr,
|
| + compiler::Node* last = nullptr,
|
| + CodeStubAssembler::ParameterMode mode =
|
| + CodeStubAssembler::INTPTR_PARAMETERS);
|
| +
|
| + void PopAndReturn(compiler::Node* value);
|
| +
|
| + private:
|
| + compiler::Node* GetArguments();
|
| +
|
| + CodeStubAssembler* assembler_;
|
| + compiler::Node* argc_;
|
| + compiler::Node* arguments_;
|
| + compiler::Node* fp_;
|
| +};
|
| +
|
| #define CSA_ASSERT(x) Assert((x), #x, __FILE__, __LINE__)
|
| #ifdef ENABLE_SLOW_DCHECKS
|
| #define CSA_SLOW_ASSERT(x) \
|
|
|