Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index fb2fbe55df5398d9ed4d7c0351b5a888e9b8d0c3..1832c430068c9ae1916a44776368325ae95f46f9 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -827,6 +827,7 @@ class CallICStub: public PlatformCodeStub { |
} |
int arg_count() const { return state().arg_count(); } |
+ bool is_spread() const { return state().is_spread(); } |
CallICState state() const { |
return CallICState(static_cast<ExtraICState>(minor_key_)); |
@@ -1652,10 +1653,12 @@ class RegExpConstructResultStub FINAL : public HydrogenCodeStub { |
class CallFunctionStub: public PlatformCodeStub { |
public: |
- CallFunctionStub(Isolate* isolate, int argc, CallFunctionFlags flags) |
+ CallFunctionStub(Isolate* isolate, int argc, CallFunctionFlags flags, |
+ bool is_spread = false) |
: PlatformCodeStub(isolate) { |
DCHECK(argc >= 0 && argc <= Code::kMaxArguments); |
- minor_key_ = ArgcBits::encode(argc) | FlagBits::encode(flags); |
+ minor_key_ = ArgcBits::encode(argc) | FlagBits::encode(flags) | |
+ IsSpreadBits::encode(is_spread); |
} |
static int ExtractArgcFromMinorKey(int minor_key) { |
@@ -1670,14 +1673,19 @@ class CallFunctionStub: public PlatformCodeStub { |
return flags() == CALL_AS_METHOD || flags() == WRAP_AND_CALL; |
} |
+ bool is_spread() const { return IsSpreadBits::decode(minor_key_); } |
+ |
bool NeedsChecks() const { return flags() != WRAP_AND_CALL; } |
void PrintName(std::ostream& os) const OVERRIDE; // NOLINT |
// Minor key encoding in 32 bits with Bitfield <Type, shift, size>. |
class FlagBits : public BitField<CallFunctionFlags, 0, 2> {}; |
- class ArgcBits : public BitField<unsigned, 2, Code::kArgumentsBits> {}; |
- STATIC_ASSERT(Code::kArgumentsBits + 2 <= kStubMinorKeyBits); |
+ class IsSpreadBits : public BitField<bool, FlagBits::kNext, 1> {}; |
+ class ArgcBits : public BitField<unsigned, IsSpreadBits::kNext, |
+ Code::kArgumentsBits> {}; |
+ |
+ STATIC_ASSERT(Code::kArgumentsBits + 3 <= kStubMinorKeyBits); |
DEFINE_CALL_INTERFACE_DESCRIPTOR(CallFunction); |
DEFINE_PLATFORM_CODE_STUB(CallFunction, PlatformCodeStub); |