Chromium Code Reviews| Index: src/code-stub-assembler.h |
| diff --git a/src/code-stub-assembler.h b/src/code-stub-assembler.h |
| index 7821d35a419c5a758cc63d30ef4eab6f9e9b4e0b..2315390492c7630398f24f7181d5902f9a0005d6 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,48 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler { |
| static const int kElementLoopUnrollThreshold = 8; |
| }; |
| +class CodeStubArguments { |
| + public: |
| + CodeStubArguments(CodeStubAssembler* assembler, compiler::Node* argc, |
|
Igor Sheludko
2016/11/03 11:52:20
Please add a comment that argc does not include re
danno
2016/11/03 15:01:48
Done.
|
| + CodeStubAssembler::ParameterMode mode = |
| + CodeStubAssembler::INTPTR_PARAMETERS); |
| + |
| + compiler::Node* GetReceiver(); |
| + |
| + compiler::Node* AtIndex(compiler::Node* index, |
|
Igor Sheludko
2016/11/03 11:52:20
index is zero-based, not including receiver.
danno
2016/11/03 15:01:48
Done.
|
| + CodeStubAssembler::ParameterMode mode = |
| + CodeStubAssembler::INTPTR_PARAMETERS); |
| + |
| + compiler::Node* AtIndex(int index); |
| + |
| + typedef std::function<void(CodeStubAssembler* assembler, compiler::Node* arg)> |
| + ForEachBodyFunction; |
| + |
| + void ForEach(ForEachBodyFunction body, compiler::Node* first = nullptr, |
|
Igor Sheludko
2016/11/03 11:52:20
Please mention that this iteration does not includ
danno
2016/11/03 15:01:48
Done.
|
| + compiler::Node* last = nullptr, |
| + CodeStubAssembler::ParameterMode mode = |
| + CodeStubAssembler::INTPTR_PARAMETERS) { |
| + CodeStubAssembler::VariableList list(0, assembler_->zone()); |
| + ForEach(list, body, first, last); |
| + } |
| + |
| + void ForEach(const CodeStubAssembler::VariableList& vars, |
|
Igor Sheludko
2016/11/03 11:52:20
Same here.
danno
2016/11/03 15:01:48
Done.
|
| + 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) \ |