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) \ |