Index: src/code-stubs.h |
diff --git a/src/code-stubs.h b/src/code-stubs.h |
index fd0c0390b396e309b5e690035a1b67891645c068..c28812c63e3978e08e0231369cc402912e1a6454 100644 |
--- a/src/code-stubs.h |
+++ b/src/code-stubs.h |
@@ -174,6 +174,7 @@ class CodeStub BASE_EMBEDDED { |
static const char* MajorName(Major major_key, bool allow_unknown_keys); |
+ explicit CodeStub(Isolate* isolate) : isolate_(isolate) { } |
virtual ~CodeStub() {} |
static void GenerateStubsAheadOfTime(Isolate* isolate); |
@@ -209,6 +210,8 @@ class CodeStub BASE_EMBEDDED { |
// Returns a name for logging/debugging purposes. |
SmartArrayPointer<const char> GetName(); |
+ Isolate* isolate() const { return isolate_; } |
+ |
protected: |
static bool CanUseFPRegisters(); |
@@ -265,11 +268,15 @@ class CodeStub BASE_EMBEDDED { |
kStubMajorKeyBits, kStubMinorKeyBits> {}; // NOLINT |
friend class BreakPointIterator; |
+ |
+ Isolate* isolate_; |
}; |
class PlatformCodeStub : public CodeStub { |
public: |
+ explicit PlatformCodeStub(Isolate* isolate) : CodeStub(isolate) { } |
+ |
// Retrieve the code for the stub. Generate the code if needed. |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -385,7 +392,8 @@ class HydrogenCodeStub : public CodeStub { |
INITIALIZED |
}; |
- explicit HydrogenCodeStub(InitializationState state = INITIALIZED) { |
+ HydrogenCodeStub(Isolate* isolate, InitializationState state = INITIALIZED) |
+ : CodeStub(isolate) { |
is_uninitialized_ = (state == UNINITIALIZED); |
} |
@@ -493,7 +501,7 @@ class NopRuntimeCallHelper : public RuntimeCallHelper { |
class ToNumberStub: public HydrogenCodeStub { |
public: |
- ToNumberStub() { } |
+ explicit ToNumberStub(Isolate* isolate) : HydrogenCodeStub(isolate) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -502,7 +510,7 @@ class ToNumberStub: public HydrogenCodeStub { |
CodeStubInterfaceDescriptor* descriptor); |
static void InstallDescriptors(Isolate* isolate) { |
- ToNumberStub stub; |
+ ToNumberStub stub(isolate); |
stub.InitializeInterfaceDescriptor( |
isolate, |
isolate->code_stub_interface_descriptor(CodeStub::ToNumber)); |
@@ -516,7 +524,7 @@ class ToNumberStub: public HydrogenCodeStub { |
class NumberToStringStub V8_FINAL : public HydrogenCodeStub { |
public: |
- NumberToStringStub() {} |
+ explicit NumberToStringStub(Isolate* isolate) : HydrogenCodeStub(isolate) {} |
virtual Handle<Code> GenerateCode(Isolate* isolate) V8_OVERRIDE; |
@@ -537,9 +545,12 @@ class NumberToStringStub V8_FINAL : public HydrogenCodeStub { |
class FastNewClosureStub : public HydrogenCodeStub { |
public: |
- explicit FastNewClosureStub(StrictMode strict_mode, bool is_generator) |
- : strict_mode_(strict_mode), |
- is_generator_(is_generator) { } |
+ FastNewClosureStub(Isolate* isolate, |
+ StrictMode strict_mode, |
+ bool is_generator) |
+ : HydrogenCodeStub(isolate), |
+ strict_mode_(strict_mode), |
+ is_generator_(is_generator) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -571,7 +582,8 @@ class FastNewContextStub V8_FINAL : public HydrogenCodeStub { |
public: |
static const int kMaximumSlots = 64; |
- explicit FastNewContextStub(int slots) : slots_(slots) { |
+ FastNewContextStub(Isolate* isolate, int slots) |
+ : HydrogenCodeStub(isolate), slots_(slots) { |
ASSERT(slots_ > 0 && slots_ <= kMaximumSlots); |
} |
@@ -610,10 +622,12 @@ class FastCloneShallowArrayStub : public HydrogenCodeStub { |
static const int kFastCloneModeCount = LAST_CLONE_MODE + 1; |
- FastCloneShallowArrayStub(Mode mode, |
+ FastCloneShallowArrayStub(Isolate* isolate, |
+ Mode mode, |
AllocationSiteMode allocation_site_mode, |
int length) |
- : mode_(mode), |
+ : HydrogenCodeStub(isolate), |
+ mode_(mode), |
allocation_site_mode_(allocation_site_mode), |
length_((mode == COPY_ON_WRITE_ELEMENTS) ? 0 : length) { |
ASSERT_GE(length_, 0); |
@@ -674,7 +688,8 @@ class FastCloneShallowObjectStub : public HydrogenCodeStub { |
// Maximum number of properties in copied object. |
static const int kMaximumClonedProperties = 6; |
- explicit FastCloneShallowObjectStub(int length) : length_(length) { |
+ FastCloneShallowObjectStub(Isolate* isolate, int length) |
+ : HydrogenCodeStub(isolate), length_(length) { |
ASSERT_GE(length_, 0); |
ASSERT_LE(length_, kMaximumClonedProperties); |
} |
@@ -699,7 +714,8 @@ class FastCloneShallowObjectStub : public HydrogenCodeStub { |
class CreateAllocationSiteStub : public HydrogenCodeStub { |
public: |
- explicit CreateAllocationSiteStub() { } |
+ explicit CreateAllocationSiteStub(Isolate* isolate) |
+ : HydrogenCodeStub(isolate) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -726,7 +742,8 @@ class InstanceofStub: public PlatformCodeStub { |
kReturnTrueFalseObject = 1 << 2 |
}; |
- explicit InstanceofStub(Flags flags) : flags_(flags) { } |
+ InstanceofStub(Isolate* isolate, Flags flags) |
+ : PlatformCodeStub(isolate), flags_(flags) { } |
static Register left(); |
static Register right(); |
@@ -800,8 +817,8 @@ class MathPowStub: public PlatformCodeStub { |
public: |
enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK }; |
- explicit MathPowStub(ExponentType exponent_type) |
- : exponent_type_(exponent_type) { } |
+ MathPowStub(Isolate* isolate, ExponentType exponent_type) |
+ : PlatformCodeStub(isolate), exponent_type_(exponent_type) { } |
virtual void Generate(MacroAssembler* masm); |
private: |
@@ -814,7 +831,8 @@ class MathPowStub: public PlatformCodeStub { |
class ICStub: public PlatformCodeStub { |
public: |
- explicit ICStub(Code::Kind kind) : kind_(kind) { } |
+ ICStub(Isolate* isolate, Code::Kind kind) |
+ : PlatformCodeStub(isolate), kind_(kind) { } |
virtual Code::Kind GetCodeKind() const { return kind_; } |
virtual InlineCacheState GetICState() { return MONOMORPHIC; } |
@@ -840,7 +858,8 @@ class ICStub: public PlatformCodeStub { |
class FunctionPrototypeStub: public ICStub { |
public: |
- explicit FunctionPrototypeStub(Code::Kind kind) : ICStub(kind) { } |
+ FunctionPrototypeStub(Isolate* isolate, Code::Kind kind) |
+ : ICStub(isolate, kind) { } |
virtual void Generate(MacroAssembler* masm); |
private: |
@@ -850,8 +869,8 @@ class FunctionPrototypeStub: public ICStub { |
class StoreICStub: public ICStub { |
public: |
- StoreICStub(Code::Kind kind, StrictMode strict_mode) |
- : ICStub(kind), strict_mode_(strict_mode) { } |
+ StoreICStub(Isolate* isolate, Code::Kind kind, StrictMode strict_mode) |
+ : ICStub(isolate, kind), strict_mode_(strict_mode) { } |
protected: |
virtual ExtraICState GetExtraICState() { |
@@ -871,6 +890,7 @@ class StoreICStub: public ICStub { |
class HICStub: public HydrogenCodeStub { |
public: |
+ explicit HICStub(Isolate* isolate) : HydrogenCodeStub(isolate) { } |
virtual Code::Kind GetCodeKind() const { return kind(); } |
virtual InlineCacheState GetICState() { return MONOMORPHIC; } |
@@ -886,7 +906,7 @@ class HandlerStub: public HICStub { |
virtual ExtraICState GetExtraICState() { return kind(); } |
protected: |
- HandlerStub() : HICStub() { } |
+ explicit HandlerStub(Isolate* isolate) : HICStub(isolate) { } |
virtual int NotMissMinorKey() { return bit_field_; } |
int bit_field_; |
}; |
@@ -894,7 +914,10 @@ class HandlerStub: public HICStub { |
class LoadFieldStub: public HandlerStub { |
public: |
- LoadFieldStub(bool inobject, int index, Representation representation) { |
+ LoadFieldStub(Isolate* isolate, |
+ bool inobject, |
+ int index, Representation representation) |
+ : HandlerStub(isolate) { |
Initialize(Code::LOAD_IC, inobject, index, representation); |
} |
@@ -931,7 +954,7 @@ class LoadFieldStub: public HandlerStub { |
virtual Code::StubType GetStubType() { return Code::FAST; } |
protected: |
- LoadFieldStub() : HandlerStub() { } |
+ explicit LoadFieldStub(Isolate* isolate) : HandlerStub(isolate) { } |
void Initialize(Code::Kind kind, |
bool inobject, |
@@ -954,7 +977,7 @@ class LoadFieldStub: public HandlerStub { |
class StringLengthStub: public HandlerStub { |
public: |
- explicit StringLengthStub() : HandlerStub() { |
+ explicit StringLengthStub(Isolate* isolate) : HandlerStub(isolate) { |
Initialize(Code::LOAD_IC); |
} |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -978,7 +1001,7 @@ class StringLengthStub: public HandlerStub { |
class KeyedStringLengthStub: public StringLengthStub { |
public: |
- explicit KeyedStringLengthStub() : StringLengthStub() { |
+ explicit KeyedStringLengthStub(Isolate* isolate) : StringLengthStub(isolate) { |
Initialize(Code::KEYED_LOAD_IC); |
} |
virtual void InitializeInterfaceDescriptor( |
@@ -992,7 +1015,8 @@ class KeyedStringLengthStub: public StringLengthStub { |
class StoreGlobalStub : public HandlerStub { |
public: |
- explicit StoreGlobalStub(bool is_constant, bool check_global) { |
+ StoreGlobalStub(Isolate* isolate, bool is_constant, bool check_global) |
+ : HandlerStub(isolate) { |
bit_field_ = IsConstantBits::encode(is_constant) | |
CheckGlobalBits::encode(check_global); |
} |
@@ -1055,9 +1079,10 @@ class StoreGlobalStub : public HandlerStub { |
class CallApiFunctionStub : public PlatformCodeStub { |
public: |
- CallApiFunctionStub(bool is_store, |
+ CallApiFunctionStub(Isolate* isolate, |
+ bool is_store, |
bool call_data_undefined, |
- int argc) { |
+ int argc) : PlatformCodeStub(isolate) { |
bit_field_ = |
IsStoreBits::encode(is_store) | |
CallDataUndefinedBits::encode(call_data_undefined) | |
@@ -1082,7 +1107,7 @@ class CallApiFunctionStub : public PlatformCodeStub { |
class CallApiGetterStub : public PlatformCodeStub { |
public: |
- CallApiGetterStub() {} |
+ explicit CallApiGetterStub(Isolate* isolate) : PlatformCodeStub(isolate) {} |
private: |
virtual void Generate(MacroAssembler* masm) V8_OVERRIDE; |
@@ -1095,8 +1120,10 @@ class CallApiGetterStub : public PlatformCodeStub { |
class KeyedLoadFieldStub: public LoadFieldStub { |
public: |
- KeyedLoadFieldStub(bool inobject, int index, Representation representation) |
- : LoadFieldStub() { |
+ KeyedLoadFieldStub(Isolate* isolate, |
+ bool inobject, |
+ int index, Representation representation) |
+ : LoadFieldStub(isolate) { |
Initialize(Code::KEYED_LOAD_IC, inobject, index, representation); |
} |
@@ -1111,10 +1138,11 @@ class KeyedLoadFieldStub: public LoadFieldStub { |
class BinaryOpICStub : public HydrogenCodeStub { |
public: |
- BinaryOpICStub(Token::Value op, OverwriteMode mode) |
- : HydrogenCodeStub(UNINITIALIZED), state_(op, mode) {} |
+ BinaryOpICStub(Isolate* isolate, Token::Value op, OverwriteMode mode) |
+ : HydrogenCodeStub(isolate, UNINITIALIZED), state_(op, mode) {} |
- explicit BinaryOpICStub(const BinaryOpIC::State& state) : state_(state) {} |
+ BinaryOpICStub(Isolate* isolate, const BinaryOpIC::State& state) |
+ : HydrogenCodeStub(isolate), state_(state) {} |
static void GenerateAheadOfTime(Isolate* isolate); |
@@ -1168,8 +1196,9 @@ class BinaryOpICStub : public HydrogenCodeStub { |
// call support for stubs in Hydrogen. |
class BinaryOpICWithAllocationSiteStub V8_FINAL : public PlatformCodeStub { |
public: |
- explicit BinaryOpICWithAllocationSiteStub(const BinaryOpIC::State& state) |
- : state_(state) {} |
+ BinaryOpICWithAllocationSiteStub(Isolate* isolate, |
+ const BinaryOpIC::State& state) |
+ : PlatformCodeStub(isolate), state_(state) {} |
static void GenerateAheadOfTime(Isolate* isolate); |
@@ -1215,11 +1244,14 @@ class BinaryOpICWithAllocationSiteStub V8_FINAL : public PlatformCodeStub { |
class BinaryOpWithAllocationSiteStub V8_FINAL : public BinaryOpICStub { |
public: |
- BinaryOpWithAllocationSiteStub(Token::Value op, OverwriteMode mode) |
- : BinaryOpICStub(op, mode) {} |
+ BinaryOpWithAllocationSiteStub(Isolate* isolate, |
+ Token::Value op, |
+ OverwriteMode mode) |
+ : BinaryOpICStub(isolate, op, mode) {} |
- explicit BinaryOpWithAllocationSiteStub(const BinaryOpIC::State& state) |
- : BinaryOpICStub(state) {} |
+ BinaryOpWithAllocationSiteStub(Isolate* isolate, |
+ const BinaryOpIC::State& state) |
+ : BinaryOpICStub(isolate, state) {} |
virtual void InitializeInterfaceDescriptor( |
Isolate* isolate, CodeStubInterfaceDescriptor* descriptor) V8_OVERRIDE; |
@@ -1257,8 +1289,11 @@ enum StringAddFlags { |
class StringAddStub V8_FINAL : public HydrogenCodeStub { |
public: |
- StringAddStub(StringAddFlags flags, PretenureFlag pretenure_flag) |
- : bit_field_(StringAddFlagsBits::encode(flags) | |
+ StringAddStub(Isolate* isolate, |
+ StringAddFlags flags, |
+ PretenureFlag pretenure_flag) |
+ : HydrogenCodeStub(isolate), |
+ bit_field_(StringAddFlagsBits::encode(flags) | |
PretenureFlagBits::encode(pretenure_flag)) {} |
StringAddFlags flags() const { |
@@ -1301,11 +1336,13 @@ class StringAddStub V8_FINAL : public HydrogenCodeStub { |
class ICCompareStub: public PlatformCodeStub { |
public: |
- ICCompareStub(Token::Value op, |
+ ICCompareStub(Isolate* isolate, |
+ Token::Value op, |
CompareIC::State left, |
CompareIC::State right, |
CompareIC::State handler) |
- : op_(op), |
+ : PlatformCodeStub(isolate), |
+ op_(op), |
left_(left), |
right_(right), |
state_(handler) { |
@@ -1369,18 +1406,20 @@ class CompareNilICStub : public HydrogenCodeStub { |
Type* GetType(Zone* zone, Handle<Map> map = Handle<Map>()); |
Type* GetInputType(Zone* zone, Handle<Map> map); |
- explicit CompareNilICStub(NilValue nil) : nil_value_(nil) { } |
+ CompareNilICStub(Isolate* isolate, NilValue nil) |
+ : HydrogenCodeStub(isolate), nil_value_(nil) { } |
- CompareNilICStub(ExtraICState ic_state, |
+ CompareNilICStub(Isolate* isolate, |
+ ExtraICState ic_state, |
InitializationState init_state = INITIALIZED) |
- : HydrogenCodeStub(init_state), |
+ : HydrogenCodeStub(isolate, init_state), |
nil_value_(NilValueField::decode(ic_state)), |
state_(State(TypesField::decode(ic_state))) { |
} |
static Handle<Code> GetUninitialized(Isolate* isolate, |
NilValue nil) { |
- return CompareNilICStub(nil, UNINITIALIZED).GetCode(isolate); |
+ return CompareNilICStub(isolate, nil, UNINITIALIZED).GetCode(isolate); |
} |
virtual void InitializeInterfaceDescriptor( |
@@ -1388,7 +1427,7 @@ class CompareNilICStub : public HydrogenCodeStub { |
CodeStubInterfaceDescriptor* descriptor); |
static void InstallDescriptors(Isolate* isolate) { |
- CompareNilICStub compare_stub(kNullValue, UNINITIALIZED); |
+ CompareNilICStub compare_stub(isolate, kNullValue, UNINITIALIZED); |
compare_stub.InitializeInterfaceDescriptor( |
isolate, |
isolate->code_stub_interface_descriptor(CodeStub::CompareNilIC)); |
@@ -1446,8 +1485,10 @@ class CompareNilICStub : public HydrogenCodeStub { |
void Print(StringStream* stream) const; |
}; |
- CompareNilICStub(NilValue nil, InitializationState init_state) |
- : HydrogenCodeStub(init_state), nil_value_(nil) { } |
+ CompareNilICStub(Isolate* isolate, |
+ NilValue nil, |
+ InitializationState init_state) |
+ : HydrogenCodeStub(isolate, init_state), nil_value_(nil) { } |
class NilValueField : public BitField<NilValue, 0, 1> {}; |
class TypesField : public BitField<byte, 1, NUMBER_OF_TYPES> {}; |
@@ -1464,9 +1505,12 @@ class CompareNilICStub : public HydrogenCodeStub { |
class CEntryStub : public PlatformCodeStub { |
public: |
- explicit CEntryStub(int result_size, |
- SaveFPRegsMode save_doubles = kDontSaveFPRegs) |
- : result_size_(result_size), save_doubles_(save_doubles) { } |
+ CEntryStub(Isolate* isolate, |
+ int result_size, |
+ SaveFPRegsMode save_doubles = kDontSaveFPRegs) |
+ : PlatformCodeStub(isolate), |
+ result_size_(result_size), |
+ save_doubles_(save_doubles) { } |
void Generate(MacroAssembler* masm); |
@@ -1496,7 +1540,7 @@ class CEntryStub : public PlatformCodeStub { |
class JSEntryStub : public PlatformCodeStub { |
public: |
- JSEntryStub() { } |
+ explicit JSEntryStub(Isolate* isolate) : PlatformCodeStub(isolate) { } |
void Generate(MacroAssembler* masm) { GenerateBody(masm, false); } |
@@ -1515,7 +1559,7 @@ class JSEntryStub : public PlatformCodeStub { |
class JSConstructEntryStub : public JSEntryStub { |
public: |
- JSConstructEntryStub() { } |
+ explicit JSConstructEntryStub(Isolate* isolate) : JSEntryStub(isolate) { } |
void Generate(MacroAssembler* masm) { GenerateBody(masm, true); } |
@@ -1537,7 +1581,8 @@ class ArgumentsAccessStub: public PlatformCodeStub { |
NEW_STRICT |
}; |
- explicit ArgumentsAccessStub(Type type) : type_(type) { } |
+ ArgumentsAccessStub(Isolate* isolate, Type type) |
+ : PlatformCodeStub(isolate), type_(type) { } |
private: |
Type type_; |
@@ -1557,7 +1602,7 @@ class ArgumentsAccessStub: public PlatformCodeStub { |
class RegExpExecStub: public PlatformCodeStub { |
public: |
- RegExpExecStub() { } |
+ explicit RegExpExecStub(Isolate* isolate) : PlatformCodeStub(isolate) { } |
private: |
Major MajorKey() { return RegExpExec; } |
@@ -1569,7 +1614,8 @@ class RegExpExecStub: public PlatformCodeStub { |
class RegExpConstructResultStub V8_FINAL : public HydrogenCodeStub { |
public: |
- RegExpConstructResultStub() { } |
+ explicit RegExpConstructResultStub(Isolate* isolate) |
+ : HydrogenCodeStub(isolate) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate) V8_OVERRIDE; |
@@ -1594,8 +1640,8 @@ class RegExpConstructResultStub V8_FINAL : public HydrogenCodeStub { |
class CallFunctionStub: public PlatformCodeStub { |
public: |
- CallFunctionStub(int argc, CallFunctionFlags flags) |
- : argc_(argc), flags_(flags) { } |
+ CallFunctionStub(Isolate* isolate, int argc, CallFunctionFlags flags) |
+ : PlatformCodeStub(isolate), argc_(argc), flags_(flags) { } |
void Generate(MacroAssembler* masm); |
@@ -1639,7 +1685,8 @@ class CallFunctionStub: public PlatformCodeStub { |
class CallConstructStub: public PlatformCodeStub { |
public: |
- explicit CallConstructStub(CallFunctionFlags flags) : flags_(flags) {} |
+ CallConstructStub(Isolate* isolate, CallFunctionFlags flags) |
+ : PlatformCodeStub(isolate), flags_(flags) {} |
void Generate(MacroAssembler* masm); |
@@ -1841,7 +1888,8 @@ class StringCharAtGenerator { |
class KeyedLoadDictionaryElementStub : public HydrogenCodeStub { |
public: |
- KeyedLoadDictionaryElementStub() {} |
+ explicit KeyedLoadDictionaryElementStub(Isolate* isolate) |
+ : HydrogenCodeStub(isolate) {} |
virtual Handle<Code> GenerateCode(Isolate* isolate) V8_OVERRIDE; |
@@ -1859,7 +1907,8 @@ class KeyedLoadDictionaryElementStub : public HydrogenCodeStub { |
class KeyedLoadDictionaryElementPlatformStub : public PlatformCodeStub { |
public: |
- KeyedLoadDictionaryElementPlatformStub() {} |
+ explicit KeyedLoadDictionaryElementPlatformStub(Isolate* isolate) |
+ : PlatformCodeStub(isolate) {} |
void Generate(MacroAssembler* masm); |
@@ -1873,11 +1922,13 @@ class KeyedLoadDictionaryElementPlatformStub : public PlatformCodeStub { |
class DoubleToIStub : public PlatformCodeStub { |
public: |
- DoubleToIStub(Register source, |
+ DoubleToIStub(Isolate* isolate, |
+ Register source, |
Register destination, |
int offset, |
bool is_truncating, |
- bool skip_fastpath = false) : bit_field_(0) { |
+ bool skip_fastpath = false) |
+ : PlatformCodeStub(isolate), bit_field_(0) { |
bit_field_ = SourceRegisterBits::encode(source.code()) | |
DestinationRegisterBits::encode(destination.code()) | |
OffsetBits::encode(offset) | |
@@ -1944,7 +1995,10 @@ class DoubleToIStub : public PlatformCodeStub { |
class KeyedLoadFastElementStub : public HydrogenCodeStub { |
public: |
- KeyedLoadFastElementStub(bool is_js_array, ElementsKind elements_kind) { |
+ KeyedLoadFastElementStub(Isolate* isolate, |
+ bool is_js_array, |
+ ElementsKind elements_kind) |
+ : HydrogenCodeStub(isolate) { |
bit_field_ = ElementsKindBits::encode(elements_kind) | |
IsJSArrayBits::encode(is_js_array); |
} |
@@ -1977,9 +2031,11 @@ class KeyedLoadFastElementStub : public HydrogenCodeStub { |
class KeyedStoreFastElementStub : public HydrogenCodeStub { |
public: |
- KeyedStoreFastElementStub(bool is_js_array, |
+ KeyedStoreFastElementStub(Isolate* isolate, |
+ bool is_js_array, |
ElementsKind elements_kind, |
- KeyedAccessStoreMode mode) { |
+ KeyedAccessStoreMode mode) |
+ : HydrogenCodeStub(isolate) { |
bit_field_ = ElementsKindBits::encode(elements_kind) | |
IsJSArrayBits::encode(is_js_array) | |
StoreModeBits::encode(mode); |
@@ -2018,9 +2074,10 @@ class KeyedStoreFastElementStub : public HydrogenCodeStub { |
class TransitionElementsKindStub : public HydrogenCodeStub { |
public: |
- TransitionElementsKindStub(ElementsKind from_kind, |
+ TransitionElementsKindStub(Isolate* isolate, |
+ ElementsKind from_kind, |
ElementsKind to_kind, |
- bool is_js_array) { |
+ bool is_js_array) : HydrogenCodeStub(isolate) { |
bit_field_ = FromKindBits::encode(from_kind) | |
ToKindBits::encode(to_kind) | |
IsJSArrayBits::encode(is_js_array); |
@@ -2059,8 +2116,10 @@ class TransitionElementsKindStub : public HydrogenCodeStub { |
class ArrayConstructorStubBase : public HydrogenCodeStub { |
public: |
- ArrayConstructorStubBase(ElementsKind kind, |
- AllocationSiteOverrideMode override_mode) { |
+ ArrayConstructorStubBase(Isolate* isolate, |
+ ElementsKind kind, |
+ AllocationSiteOverrideMode override_mode) |
+ : HydrogenCodeStub(isolate) { |
// It only makes sense to override local allocation site behavior |
// if there is a difference between the global allocation site policy |
// for an ElementsKind and the desired usage of the stub. |
@@ -2106,9 +2165,10 @@ class ArrayConstructorStubBase : public HydrogenCodeStub { |
class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase { |
public: |
ArrayNoArgumentConstructorStub( |
+ Isolate* isolate, |
ElementsKind kind, |
AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
- : ArrayConstructorStubBase(kind, override_mode) { |
+ : ArrayConstructorStubBase(isolate, kind, override_mode) { |
} |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -2131,9 +2191,10 @@ class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase { |
class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase { |
public: |
ArraySingleArgumentConstructorStub( |
+ Isolate* isolate, |
ElementsKind kind, |
AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
- : ArrayConstructorStubBase(kind, override_mode) { |
+ : ArrayConstructorStubBase(isolate, kind, override_mode) { |
} |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -2156,9 +2217,10 @@ class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase { |
class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
public: |
ArrayNArgumentsConstructorStub( |
+ Isolate* isolate, |
ElementsKind kind, |
AllocationSiteOverrideMode override_mode = DONT_OVERRIDE) |
- : ArrayConstructorStubBase(kind, override_mode) { |
+ : ArrayConstructorStubBase(isolate, kind, override_mode) { |
} |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -2180,7 +2242,8 @@ class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { |
class InternalArrayConstructorStubBase : public HydrogenCodeStub { |
public: |
- explicit InternalArrayConstructorStubBase(ElementsKind kind) { |
+ InternalArrayConstructorStubBase(Isolate* isolate, ElementsKind kind) |
+ : HydrogenCodeStub(isolate) { |
kind_ = kind; |
} |
@@ -2204,8 +2267,9 @@ class InternalArrayConstructorStubBase : public HydrogenCodeStub { |
class InternalArrayNoArgumentConstructorStub : public |
InternalArrayConstructorStubBase { |
public: |
- explicit InternalArrayNoArgumentConstructorStub(ElementsKind kind) |
- : InternalArrayConstructorStubBase(kind) { } |
+ InternalArrayNoArgumentConstructorStub(Isolate* isolate, |
+ ElementsKind kind) |
+ : InternalArrayConstructorStubBase(isolate, kind) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -2223,8 +2287,9 @@ class InternalArrayNoArgumentConstructorStub : public |
class InternalArraySingleArgumentConstructorStub : public |
InternalArrayConstructorStubBase { |
public: |
- explicit InternalArraySingleArgumentConstructorStub(ElementsKind kind) |
- : InternalArrayConstructorStubBase(kind) { } |
+ InternalArraySingleArgumentConstructorStub(Isolate* isolate, |
+ ElementsKind kind) |
+ : InternalArrayConstructorStubBase(isolate, kind) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -2242,8 +2307,8 @@ class InternalArraySingleArgumentConstructorStub : public |
class InternalArrayNArgumentsConstructorStub : public |
InternalArrayConstructorStubBase { |
public: |
- explicit InternalArrayNArgumentsConstructorStub(ElementsKind kind) |
- : InternalArrayConstructorStubBase(kind) { } |
+ InternalArrayNArgumentsConstructorStub(Isolate* isolate, ElementsKind kind) |
+ : InternalArrayConstructorStubBase(isolate, kind) { } |
virtual Handle<Code> GenerateCode(Isolate* isolate); |
@@ -2260,10 +2325,12 @@ class InternalArrayNArgumentsConstructorStub : public |
class KeyedStoreElementStub : public PlatformCodeStub { |
public: |
- KeyedStoreElementStub(bool is_js_array, |
+ KeyedStoreElementStub(Isolate* isolate, |
+ bool is_js_array, |
ElementsKind elements_kind, |
KeyedAccessStoreMode store_mode) |
- : is_js_array_(is_js_array), |
+ : PlatformCodeStub(isolate), |
+ is_js_array_(is_js_array), |
elements_kind_(elements_kind), |
store_mode_(store_mode), |
fp_registers_(CanUseFPRegisters()) { } |
@@ -2326,10 +2393,10 @@ class ToBooleanStub: public HydrogenCodeStub { |
static Types Generic() { return Types((1 << NUMBER_OF_TYPES) - 1); } |
}; |
- explicit ToBooleanStub(Types types = Types()) |
- : types_(types) { } |
- explicit ToBooleanStub(ExtraICState state) |
- : types_(static_cast<byte>(state)) { } |
+ ToBooleanStub(Isolate* isolate, Types types = Types()) |
+ : HydrogenCodeStub(isolate), types_(types) { } |
+ ToBooleanStub(Isolate* isolate, ExtraICState state) |
+ : HydrogenCodeStub(isolate), types_(static_cast<byte>(state)) { } |
bool UpdateStatus(Handle<Object> object); |
Types GetTypes() { return types_; } |
@@ -2345,14 +2412,14 @@ class ToBooleanStub: public HydrogenCodeStub { |
virtual bool SometimesSetsUpAFrame() { return false; } |
static void InstallDescriptors(Isolate* isolate) { |
- ToBooleanStub stub; |
+ ToBooleanStub stub(isolate); |
stub.InitializeInterfaceDescriptor( |
isolate, |
isolate->code_stub_interface_descriptor(CodeStub::ToBoolean)); |
} |
static Handle<Code> GetUninitialized(Isolate* isolate) { |
- return ToBooleanStub(UNINITIALIZED).GetCode(isolate); |
+ return ToBooleanStub(isolate, UNINITIALIZED).GetCode(isolate); |
} |
virtual ExtraICState GetExtraICState() { |
@@ -2371,8 +2438,8 @@ class ToBooleanStub: public HydrogenCodeStub { |
Major MajorKey() { return ToBoolean; } |
int NotMissMinorKey() { return GetExtraICState(); } |
- explicit ToBooleanStub(InitializationState init_state) : |
- HydrogenCodeStub(init_state) {} |
+ ToBooleanStub(Isolate* isolate, InitializationState init_state) : |
+ HydrogenCodeStub(isolate, init_state) {} |
Types types_; |
}; |
@@ -2380,11 +2447,13 @@ class ToBooleanStub: public HydrogenCodeStub { |
class ElementsTransitionAndStoreStub : public HydrogenCodeStub { |
public: |
- ElementsTransitionAndStoreStub(ElementsKind from_kind, |
+ ElementsTransitionAndStoreStub(Isolate* isolate, |
+ ElementsKind from_kind, |
ElementsKind to_kind, |
bool is_jsarray, |
KeyedAccessStoreMode store_mode) |
- : from_kind_(from_kind), |
+ : HydrogenCodeStub(isolate), |
+ from_kind_(from_kind), |
to_kind_(to_kind), |
is_jsarray_(is_jsarray), |
store_mode_(store_mode) {} |
@@ -2425,8 +2494,8 @@ class ElementsTransitionAndStoreStub : public HydrogenCodeStub { |
class StoreArrayLiteralElementStub : public PlatformCodeStub { |
public: |
- StoreArrayLiteralElementStub() |
- : fp_registers_(CanUseFPRegisters()) { } |
+ explicit StoreArrayLiteralElementStub(Isolate* isolate) |
+ : PlatformCodeStub(isolate), fp_registers_(CanUseFPRegisters()) { } |
private: |
class FPRegisters: public BitField<bool, 0, 1> {}; |
@@ -2444,8 +2513,10 @@ class StoreArrayLiteralElementStub : public PlatformCodeStub { |
class StubFailureTrampolineStub : public PlatformCodeStub { |
public: |
- explicit StubFailureTrampolineStub(StubFunctionMode function_mode) |
- : fp_registers_(CanUseFPRegisters()), function_mode_(function_mode) {} |
+ StubFailureTrampolineStub(Isolate* isolate, StubFunctionMode function_mode) |
+ : PlatformCodeStub(isolate), |
+ fp_registers_(CanUseFPRegisters()), |
+ function_mode_(function_mode) {} |
static void GenerateAheadOfTime(Isolate* isolate); |
@@ -2470,7 +2541,7 @@ class StubFailureTrampolineStub : public PlatformCodeStub { |
class ProfileEntryHookStub : public PlatformCodeStub { |
public: |
- explicit ProfileEntryHookStub() {} |
+ explicit ProfileEntryHookStub(Isolate* isolate) : PlatformCodeStub(isolate) {} |
// The profile entry hook function is not allowed to cause a GC. |
virtual bool SometimesSetsUpAFrame() { return false; } |