diff options
Diffstat (limited to 'src/3rdparty/v8/src/stub-cache.h')
-rw-r--r-- | src/3rdparty/v8/src/stub-cache.h | 81 |
1 files changed, 62 insertions, 19 deletions
diff --git a/src/3rdparty/v8/src/stub-cache.h b/src/3rdparty/v8/src/stub-cache.h index 206dddd..ec9274b 100644 --- a/src/3rdparty/v8/src/stub-cache.h +++ b/src/3rdparty/v8/src/stub-cache.h @@ -90,6 +90,11 @@ class StubCache { Handle<JSObject> holder, Handle<AccessorInfo> callback); + Handle<Code> ComputeLoadViaGetter(Handle<String> name, + Handle<JSObject> receiver, + Handle<JSObject> holder, + Handle<JSFunction> getter); + Handle<Code> ComputeLoadConstant(Handle<String> name, Handle<JSObject> receiver, Handle<JSObject> holder, @@ -154,9 +159,16 @@ class StubCache { Handle<Code> ComputeStoreCallback(Handle<String> name, Handle<JSObject> receiver, + Handle<JSObject> holder, Handle<AccessorInfo> callback, StrictModeFlag strict_mode); + Handle<Code> ComputeStoreViaSetter(Handle<String> name, + Handle<JSObject> receiver, + Handle<JSObject> holder, + Handle<JSFunction> setter, + StrictModeFlag strict_mode); + Handle<Code> ComputeStoreInterceptor(Handle<String> name, Handle<JSObject> receiver, StrictModeFlag strict_mode); @@ -169,7 +181,7 @@ class StubCache { Handle<Map> transition, StrictModeFlag strict_mode); - Handle<Code> ComputeKeyedLoadOrStoreElement(Handle<JSObject> receiver, + Handle<Code> ComputeKeyedLoadOrStoreElement(Handle<Map> receiver_map, KeyedIC::StubKind stub_kind, StrictModeFlag strict_mode); @@ -251,7 +263,8 @@ class StubCache { void CollectMatchingMaps(SmallMapList* types, String* name, Code::Flags flags, - Handle<Context> global_context); + Handle<Context> native_context, + Zone* zone); // Generate code for probing the stub cache table. // Arguments extra, extra2 and extra3 may be used to pass additional scratch @@ -303,7 +316,7 @@ class StubCache { Factory* factory() { return isolate()->factory(); } private: - explicit StubCache(Isolate* isolate); + StubCache(Isolate* isolate, Zone* zone); Handle<Code> ComputeCallInitialize(int argc, RelocInfo::Mode mode, @@ -461,14 +474,16 @@ class StubCompiler BASE_EMBEDDED { Register scratch2, Label* miss_label); - static void GenerateStoreField(MacroAssembler* masm, - Handle<JSObject> object, - int index, - Handle<Map> transition, - Register receiver_reg, - Register name_reg, - Register scratch, - Label* miss_label); + void GenerateStoreField(MacroAssembler* masm, + Handle<JSObject> object, + int index, + Handle<Map> transition, + Handle<String> name, + Register receiver_reg, + Register name_reg, + Register scratch1, + Register scratch2, + Label* miss_label); static void GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind); @@ -512,6 +527,7 @@ class StubCompiler BASE_EMBEDDED { int save_at_depth, Label* miss); + protected: Handle<Code> GetCodeWithFlags(Code::Flags flags, const char* name); Handle<Code> GetCodeWithFlags(Code::Flags flags, Handle<String> name); @@ -536,10 +552,20 @@ class StubCompiler BASE_EMBEDDED { Register scratch1, Register scratch2, Register scratch3, + Register scratch4, Handle<AccessorInfo> callback, Handle<String> name, Label* miss); + void GenerateDictionaryLoadCallback(Register receiver, + Register name_reg, + Register scratch1, + Register scratch2, + Register scratch3, + Handle<AccessorInfo> callback, + Handle<String> name, + Label* miss); + void GenerateLoadConstant(Handle<JSObject> object, Handle<JSObject> holder, Register receiver, @@ -594,6 +620,14 @@ class LoadStubCompiler: public StubCompiler { Handle<JSObject> holder, Handle<AccessorInfo> callback); + static void GenerateLoadViaGetter(MacroAssembler* masm, + Handle<JSFunction> getter); + + Handle<Code> CompileLoadViaGetter(Handle<String> name, + Handle<JSObject> receiver, + Handle<JSObject> holder, + Handle<JSFunction> getter); + Handle<Code> CompileLoadConstant(Handle<JSObject> object, Handle<JSObject> holder, Handle<JSFunction> value, @@ -610,7 +644,7 @@ class LoadStubCompiler: public StubCompiler { bool is_dont_delete); private: - Handle<Code> GetCode(PropertyType type, Handle<String> name); + Handle<Code> GetCode(Code::StubType type, Handle<String> name); }; @@ -658,7 +692,7 @@ class KeyedLoadStubCompiler: public StubCompiler { static void GenerateLoadDictionaryElement(MacroAssembler* masm); private: - Handle<Code> GetCode(PropertyType type, + Handle<Code> GetCode(Code::StubType type, Handle<String> name, InlineCacheState state = MONOMORPHIC); }; @@ -675,9 +709,18 @@ class StoreStubCompiler: public StubCompiler { Handle<Map> transition, Handle<String> name); - Handle<Code> CompileStoreCallback(Handle<JSObject> object, - Handle<AccessorInfo> callback, - Handle<String> name); + Handle<Code> CompileStoreCallback(Handle<String> name, + Handle<JSObject> receiver, + Handle<JSObject> holder, + Handle<AccessorInfo> callback); + + static void GenerateStoreViaSetter(MacroAssembler* masm, + Handle<JSFunction> setter); + + Handle<Code> CompileStoreViaSetter(Handle<String> name, + Handle<JSObject> receiver, + Handle<JSObject> holder, + Handle<JSFunction> setter); Handle<Code> CompileStoreInterceptor(Handle<JSObject> object, Handle<String> name); @@ -687,7 +730,7 @@ class StoreStubCompiler: public StubCompiler { Handle<String> name); private: - Handle<Code> GetCode(PropertyType type, Handle<String> name); + Handle<Code> GetCode(Code::StubType type, Handle<String> name); StrictModeFlag strict_mode_; }; @@ -728,7 +771,7 @@ class KeyedStoreStubCompiler: public StubCompiler { static void GenerateStoreDictionaryElement(MacroAssembler* masm); private: - Handle<Code> GetCode(PropertyType type, + Handle<Code> GetCode(Code::StubType type, Handle<String> name, InlineCacheState state = MONOMORPHIC); @@ -808,7 +851,7 @@ class CallStubCompiler: public StubCompiler { Handle<JSFunction> function, Handle<String> name); - Handle<Code> GetCode(PropertyType type, Handle<String> name); + Handle<Code> GetCode(Code::StubType type, Handle<String> name); Handle<Code> GetCode(Handle<JSFunction> function); const ParameterCount& arguments() { return arguments_; } |