Index: src/stub-cache.h |
diff --git a/src/stub-cache.h b/src/stub-cache.h |
index 9a82785662b03293a8d5727376ca6709d0b543a1..2f78fded7841356c71715788e5310ccac32f4c81 100644 |
--- a/src/stub-cache.h |
+++ b/src/stub-cache.h |
@@ -83,29 +83,21 @@ class StubCache { |
Handle<Code> FindIC(Handle<Name> name, |
Handle<Map> stub_holder_map, |
Code::Kind kind, |
- Code::ExtraICState extra_state = Code::kNoExtraICState); |
- |
- Handle<Code> FindIC(Handle<Name> name, |
- Handle<JSObject> stub_holder, |
- Code::Kind kind, |
- Code::ExtraICState extra_state = Code::kNoExtraICState); |
+ Code::ExtraICState extra_state = Code::kNoExtraICState, |
+ InlineCacheHolderFlag cache_holder = OWN_MAP); |
Handle<Code> FindHandler(Handle<Name> name, |
- Handle<JSObject> receiver, |
+ Handle<HeapObject> stub_holder, |
Code::Kind kind, |
+ InlineCacheHolderFlag cache_holder = OWN_MAP, |
StrictModeFlag strict_mode = kNonStrictMode); |
- Handle<Code> ComputeMonomorphicIC(Handle<HeapObject> receiver, |
+ Handle<Code> ComputeMonomorphicIC(Handle<Name> name, |
+ Handle<HeapObject> receiver, |
Handle<Code> handler, |
- Handle<Name> name, |
StrictModeFlag strict_mode); |
- // Computes the right stub matching. Inserts the result in the |
- // cache before returning. This might compile a stub if needed. |
- Handle<Code> ComputeLoadNonexistent(Handle<Name> name, |
- Handle<JSObject> object); |
- |
- // --- |
+ Handle<Code> ComputeLoadNonexistent(Handle<Name> name, Handle<Object> object); |
Handle<Code> ComputeKeyedLoadElement(Handle<Map> receiver_map); |
@@ -501,6 +493,7 @@ class StubCompiler BASE_EMBEDDED { |
Label* miss, |
PrototypeCheckType check = CHECK_ALL_MAPS); |
+ void GenerateBooleanCheck(Register object, Label* miss); |
protected: |
Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); |
@@ -531,8 +524,10 @@ enum FrontendCheckType { PERFORM_INITIAL_CHECKS, SKIP_INITIAL_CHECKS }; |
class BaseLoadStoreStubCompiler: public StubCompiler { |
public: |
- BaseLoadStoreStubCompiler(Isolate* isolate, Code::Kind kind) |
- : StubCompiler(isolate), kind_(kind) { |
+ BaseLoadStoreStubCompiler(Isolate* isolate, |
+ Code::Kind kind, |
+ InlineCacheHolderFlag cache_holder = OWN_MAP) |
+ : StubCompiler(isolate), kind_(kind), cache_holder_(cache_holder) { |
InitializeRegisters(); |
} |
virtual ~BaseLoadStoreStubCompiler() { } |
@@ -563,21 +558,18 @@ class BaseLoadStoreStubCompiler: public StubCompiler { |
} |
protected: |
- virtual Register HandlerFrontendHeader(Handle<JSObject> object, |
+ virtual Register HandlerFrontendHeader(Handle<Object> object, |
Register object_reg, |
Handle<JSObject> holder, |
Handle<Name> name, |
Label* miss) = 0; |
- virtual void HandlerFrontendFooter(Handle<Name> name, |
- Label* success, |
- Label* miss) = 0; |
+ virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss) = 0; |
- Register HandlerFrontend(Handle<JSObject> object, |
+ Register HandlerFrontend(Handle<Object> object, |
Register object_reg, |
Handle<JSObject> holder, |
- Handle<Name> name, |
- Label* success); |
+ Handle<Name> name); |
Handle<Code> GetCode(Code::Kind kind, |
Code::StubType type, |
@@ -617,42 +609,45 @@ class BaseLoadStoreStubCompiler: public StubCompiler { |
void InitializeRegisters(); |
Code::Kind kind_; |
+ InlineCacheHolderFlag cache_holder_; |
Register* registers_; |
}; |
class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
public: |
- LoadStubCompiler(Isolate* isolate, Code::Kind kind = Code::LOAD_IC) |
- : BaseLoadStoreStubCompiler(isolate, kind) { } |
+ LoadStubCompiler(Isolate* isolate, |
+ InlineCacheHolderFlag cache_holder = OWN_MAP, |
+ Code::Kind kind = Code::LOAD_IC) |
+ : BaseLoadStoreStubCompiler(isolate, kind, cache_holder) { } |
virtual ~LoadStubCompiler() { } |
- Handle<Code> CompileLoadField(Handle<JSObject> object, |
+ Handle<Code> CompileLoadField(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name, |
PropertyIndex index, |
Representation representation); |
- Handle<Code> CompileLoadCallback(Handle<JSObject> object, |
+ Handle<Code> CompileLoadCallback(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name, |
Handle<ExecutableAccessorInfo> callback); |
- Handle<Code> CompileLoadCallback(Handle<JSObject> object, |
+ Handle<Code> CompileLoadCallback(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name, |
const CallOptimization& call_optimization); |
- Handle<Code> CompileLoadConstant(Handle<JSObject> object, |
+ Handle<Code> CompileLoadConstant(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name, |
Handle<Object> value); |
- Handle<Code> CompileLoadInterceptor(Handle<JSObject> object, |
+ Handle<Code> CompileLoadInterceptor(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name); |
- Handle<Code> CompileLoadViaGetter(Handle<JSObject> object, |
+ Handle<Code> CompileLoadViaGetter(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name, |
Handle<JSFunction> getter); |
@@ -661,12 +656,12 @@ class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
Register receiver, |
Handle<JSFunction> getter); |
- Handle<Code> CompileLoadNonexistent(Handle<JSObject> object, |
+ Handle<Code> CompileLoadNonexistent(Handle<Object> object, |
Handle<JSObject> last, |
Handle<Name> name, |
Handle<JSGlobalObject> global); |
- Handle<Code> CompileLoadGlobal(Handle<JSObject> object, |
+ Handle<Code> CompileLoadGlobal(Handle<Object> object, |
Handle<GlobalObject> holder, |
Handle<PropertyCell> cell, |
Handle<Name> name, |
@@ -675,26 +670,22 @@ class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
static Register* registers(); |
protected: |
- virtual Register HandlerFrontendHeader(Handle<JSObject> object, |
+ virtual Register HandlerFrontendHeader(Handle<Object> object, |
Register object_reg, |
Handle<JSObject> holder, |
Handle<Name> name, |
Label* miss); |
- virtual void HandlerFrontendFooter(Handle<Name> name, |
- Label* success, |
- Label* miss); |
+ virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss); |
- Register CallbackHandlerFrontend(Handle<JSObject> object, |
+ Register CallbackHandlerFrontend(Handle<Object> object, |
Register object_reg, |
Handle<JSObject> holder, |
Handle<Name> name, |
- Label* success, |
Handle<Object> callback); |
- void NonexistentHandlerFrontend(Handle<JSObject> object, |
+ void NonexistentHandlerFrontend(Handle<Object> object, |
Handle<JSObject> last, |
Handle<Name> name, |
- Label* success, |
Handle<JSGlobalObject> global); |
void GenerateLoadField(Register reg, |
@@ -706,7 +697,7 @@ class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
Handle<ExecutableAccessorInfo> callback); |
void GenerateLoadCallback(const CallOptimization& call_optimization); |
void GenerateLoadInterceptor(Register holder_reg, |
- Handle<JSObject> object, |
+ Handle<Object> object, |
Handle<JSObject> holder, |
LookupResult* lookup, |
Handle<Name> name); |
@@ -726,8 +717,9 @@ class LoadStubCompiler: public BaseLoadStoreStubCompiler { |
class KeyedLoadStubCompiler: public LoadStubCompiler { |
public: |
- explicit KeyedLoadStubCompiler(Isolate* isolate) |
- : LoadStubCompiler(isolate, Code::KEYED_LOAD_IC) { } |
+ KeyedLoadStubCompiler(Isolate* isolate, |
+ InlineCacheHolderFlag cache_holder = OWN_MAP) |
+ : LoadStubCompiler(isolate, cache_holder, Code::KEYED_LOAD_IC) { } |
Handle<Code> CompileLoadElement(Handle<Map> receiver_map); |
@@ -827,15 +819,13 @@ class StoreStubCompiler: public BaseLoadStoreStubCompiler { |
} |
protected: |
- virtual Register HandlerFrontendHeader(Handle<JSObject> object, |
+ virtual Register HandlerFrontendHeader(Handle<Object> object, |
Register object_reg, |
Handle<JSObject> holder, |
Handle<Name> name, |
Label* miss); |
- virtual void HandlerFrontendFooter(Handle<Name> name, |
- Label* success, |
- Label* miss); |
+ virtual void HandlerFrontendFooter(Handle<Name> name, Label* miss); |
void GenerateRestoreName(MacroAssembler* masm, |
Label* label, |
Handle<Name> name); |
@@ -928,8 +918,7 @@ class CallStubCompiler: public StubCompiler { |
void CompileHandlerFrontend(Handle<Object> object, |
Handle<JSObject> holder, |
Handle<Name> name, |
- CheckType check, |
- Label* success); |
+ CheckType check); |
void CompileHandlerBackend(Handle<JSFunction> function); |