diff options
Diffstat (limited to 'deps/v8/src/ic/handler-compiler.h')
-rw-r--r-- | deps/v8/src/ic/handler-compiler.h | 81 |
1 files changed, 43 insertions, 38 deletions
diff --git a/deps/v8/src/ic/handler-compiler.h b/deps/v8/src/ic/handler-compiler.h index bed65775c8..bd3f788e38 100644 --- a/deps/v8/src/ic/handler-compiler.h +++ b/deps/v8/src/ic/handler-compiler.h @@ -21,11 +21,10 @@ class PropertyHandlerCompiler : public PropertyAccessCompiler { CacheHolderFlag cache_holder, Code::StubType type); protected: - PropertyHandlerCompiler(Isolate* isolate, Code::Kind kind, - Handle<HeapType> type, Handle<JSObject> holder, - CacheHolderFlag cache_holder) + PropertyHandlerCompiler(Isolate* isolate, Code::Kind kind, Handle<Map> map, + Handle<JSObject> holder, CacheHolderFlag cache_holder) : PropertyAccessCompiler(isolate, kind, cache_holder), - type_(type), + map_(map), holder_(holder) {} virtual ~PropertyHandlerCompiler() {} @@ -54,11 +53,13 @@ class PropertyHandlerCompiler : public PropertyAccessCompiler { void DiscardVectorAndSlot(); // TODO(verwaest): Make non-static. - static void GenerateFastApiCall(MacroAssembler* masm, - const CallOptimization& optimization, - Handle<Map> receiver_map, Register receiver, - Register scratch, bool is_store, int argc, - Register* values); + static void GenerateApiAccessorCall(MacroAssembler* masm, + const CallOptimization& optimization, + Handle<Map> receiver_map, + Register receiver, Register scratch, + bool is_store, Register store_parameter, + Register accessor_holder, + int accessor_index); // Helper function used to check that the dictionary doesn't contain // the property. This function may return false negatives, so miss_label @@ -97,23 +98,23 @@ class PropertyHandlerCompiler : public PropertyAccessCompiler { PrototypeCheckType check = CHECK_ALL_MAPS); Handle<Code> GetCode(Code::Kind kind, Code::StubType type, Handle<Name> name); - void set_type_for_object(Handle<Object> object); void set_holder(Handle<JSObject> holder) { holder_ = holder; } - Handle<HeapType> type() const { return type_; } + Handle<Map> map() const { return map_; } + void set_map(Handle<Map> map) { map_ = map; } Handle<JSObject> holder() const { return holder_; } private: - Handle<HeapType> type_; + Handle<Map> map_; Handle<JSObject> holder_; }; class NamedLoadHandlerCompiler : public PropertyHandlerCompiler { public: - NamedLoadHandlerCompiler(Isolate* isolate, Handle<HeapType> type, + NamedLoadHandlerCompiler(Isolate* isolate, Handle<Map> map, Handle<JSObject> holder, CacheHolderFlag cache_holder) - : PropertyHandlerCompiler(isolate, Code::LOAD_IC, type, holder, + : PropertyHandlerCompiler(isolate, Code::LOAD_IC, map, holder, cache_holder) {} virtual ~NamedLoadHandlerCompiler() {} @@ -124,7 +125,8 @@ class NamedLoadHandlerCompiler : public PropertyHandlerCompiler { Handle<ExecutableAccessorInfo> callback); Handle<Code> CompileLoadCallback(Handle<Name> name, - const CallOptimization& call_optimization); + const CallOptimization& call_optimization, + int accessor_index); Handle<Code> CompileLoadConstant(Handle<Name> name, int constant_index); @@ -133,23 +135,24 @@ class NamedLoadHandlerCompiler : public PropertyHandlerCompiler { // inlined. Handle<Code> CompileLoadInterceptor(LookupIterator* it); - Handle<Code> CompileLoadViaGetter(Handle<Name> name, - Handle<JSFunction> getter); + Handle<Code> CompileLoadViaGetter(Handle<Name> name, int accessor_index, + int expected_arguments); Handle<Code> CompileLoadGlobal(Handle<PropertyCell> cell, Handle<Name> name, bool is_configurable); // Static interface static Handle<Code> ComputeLoadNonexistent(Handle<Name> name, - Handle<HeapType> type); + Handle<Map> map); - static void GenerateLoadViaGetter(MacroAssembler* masm, Handle<HeapType> type, - Register receiver, - Handle<JSFunction> getter); + static void GenerateLoadViaGetter(MacroAssembler* masm, Handle<Map> map, + Register receiver, Register holder, + int accessor_index, int expected_arguments, + Register scratch); static void GenerateLoadViaGetterForDeopt(MacroAssembler* masm) { - GenerateLoadViaGetter(masm, Handle<HeapType>::null(), no_reg, - Handle<JSFunction>()); + GenerateLoadViaGetter(masm, Handle<Map>::null(), no_reg, no_reg, -1, -1, + no_reg); } static void GenerateLoadFunctionPrototype(MacroAssembler* masm, @@ -163,10 +166,9 @@ class NamedLoadHandlerCompiler : public PropertyHandlerCompiler { // PushInterceptorArguments and read by LoadPropertyWithInterceptorOnly and // LoadWithInterceptor. static const int kInterceptorArgsNameIndex = 0; - static const int kInterceptorArgsInfoIndex = 1; - static const int kInterceptorArgsThisIndex = 2; - static const int kInterceptorArgsHolderIndex = 3; - static const int kInterceptorArgsLength = 4; + static const int kInterceptorArgsThisIndex = 1; + static const int kInterceptorArgsHolderIndex = 2; + static const int kInterceptorArgsLength = 3; protected: virtual Register FrontendHeader(Register object_reg, Handle<Name> name, @@ -210,9 +212,9 @@ class NamedLoadHandlerCompiler : public PropertyHandlerCompiler { class NamedStoreHandlerCompiler : public PropertyHandlerCompiler { public: - explicit NamedStoreHandlerCompiler(Isolate* isolate, Handle<HeapType> type, + explicit NamedStoreHandlerCompiler(Isolate* isolate, Handle<Map> map, Handle<JSObject> holder) - : PropertyHandlerCompiler(isolate, Code::STORE_IC, type, holder, + : PropertyHandlerCompiler(isolate, Code::STORE_IC, map, holder, kCacheOnReceiver) {} virtual ~NamedStoreHandlerCompiler() {} @@ -223,18 +225,21 @@ class NamedStoreHandlerCompiler : public PropertyHandlerCompiler { Handle<Code> CompileStoreCallback(Handle<JSObject> object, Handle<Name> name, Handle<ExecutableAccessorInfo> callback); Handle<Code> CompileStoreCallback(Handle<JSObject> object, Handle<Name> name, - const CallOptimization& call_optimization); + const CallOptimization& call_optimization, + int accessor_index); Handle<Code> CompileStoreViaSetter(Handle<JSObject> object, Handle<Name> name, - Handle<JSFunction> setter); + int accessor_index, + int expected_arguments); Handle<Code> CompileStoreInterceptor(Handle<Name> name); - static void GenerateStoreViaSetter(MacroAssembler* masm, - Handle<HeapType> type, Register receiver, - Handle<JSFunction> setter); + static void GenerateStoreViaSetter(MacroAssembler* masm, Handle<Map> map, + Register receiver, Register holder, + int accessor_index, int expected_arguments, + Register scratch); static void GenerateStoreViaSetterForDeopt(MacroAssembler* masm) { - GenerateStoreViaSetter(masm, Handle<HeapType>::null(), no_reg, - Handle<JSFunction>()); + GenerateStoreViaSetter(masm, Handle<Map>::null(), no_reg, no_reg, -1, -1, + no_reg); } static void GenerateSlow(MacroAssembler* masm); @@ -278,8 +283,8 @@ class ElementHandlerCompiler : public PropertyHandlerCompiler { public: explicit ElementHandlerCompiler(Isolate* isolate) : PropertyHandlerCompiler(isolate, Code::KEYED_LOAD_IC, - Handle<HeapType>::null(), - Handle<JSObject>::null(), kCacheOnReceiver) {} + Handle<Map>::null(), Handle<JSObject>::null(), + kCacheOnReceiver) {} virtual ~ElementHandlerCompiler() {} |