| 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; }
 | 
| 
 |