| Index: src/ic.h
|
| diff --git a/src/ic.h b/src/ic.h
|
| index 7e40131edf108aeee18fd9b3469f75ff54dce7fe..eff9b548962c6f5823d4871af9c965b5dab6c335 100644
|
| --- a/src/ic.h
|
| +++ b/src/ic.h
|
| @@ -173,6 +173,18 @@ class IC {
|
| static inline void SetTargetAtAddress(Address address, Code* target);
|
| static void PostPatching(Address address, Code* target, Code* old_target);
|
|
|
| + // Compute the handler either by compiling or by retrieving a cached version.
|
| + Handle<Code> ComputeHandler(LookupResult* lookup,
|
| + Handle<JSObject> receiver,
|
| + Handle<String> name,
|
| + Handle<Object> value = Handle<Code>::null());
|
| + virtual Handle<Code> CompileHandler(LookupResult* lookup,
|
| + Handle<JSObject> receiver,
|
| + Handle<String> name,
|
| + Handle<Object> value) {
|
| + UNREACHABLE();
|
| + return Handle<Code>::null();
|
| + }
|
| void UpdateMonomorphicIC(Handle<HeapObject> receiver,
|
| Handle<Code> handler,
|
| Handle<String> name);
|
| @@ -187,6 +199,14 @@ class IC {
|
| Handle<String> name,
|
| Handle<Code> code);
|
| virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code);
|
| + virtual Code::Kind kind() const {
|
| + UNREACHABLE();
|
| + return Code::STUB;
|
| + }
|
| + virtual Handle<Code> slow_stub() const {
|
| + UNREACHABLE();
|
| + return Handle<Code>::null();
|
| + }
|
| virtual Handle<Code> megamorphic_stub() {
|
| UNREACHABLE();
|
| return Handle<Code>::null();
|
| @@ -395,12 +415,10 @@ class LoadIC: public IC {
|
| Handle<Object> object,
|
| Handle<String> name);
|
|
|
| - Handle<Code> ComputeLoadHandler(LookupResult* lookup,
|
| - Handle<JSObject> receiver,
|
| - Handle<String> name);
|
| - virtual Handle<Code> CompileLoadHandler(LookupResult* lookup,
|
| - Handle<JSObject> receiver,
|
| - Handle<String> name);
|
| + virtual Handle<Code> CompileHandler(LookupResult* lookup,
|
| + Handle<JSObject> receiver,
|
| + Handle<String> name,
|
| + Handle<Object> unused);
|
|
|
| private:
|
| // Stub accessors.
|
| @@ -475,9 +493,10 @@ class KeyedLoadIC: public LoadIC {
|
| return isolate()->builtins()->KeyedLoadIC_Slow();
|
| }
|
|
|
| - virtual Handle<Code> CompileLoadHandler(LookupResult* lookup,
|
| - Handle<JSObject> receiver,
|
| - Handle<String> name);
|
| + virtual Handle<Code> CompileHandler(LookupResult* lookup,
|
| + Handle<JSObject> receiver,
|
| + Handle<String> name,
|
| + Handle<Object> unused);
|
| virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code) { }
|
|
|
| private:
|
| @@ -590,17 +609,10 @@ class StoreIC: public IC {
|
| Handle<JSObject> receiver,
|
| Handle<String> name,
|
| Handle<Object> value);
|
| - // Compute the code stub for this store; used for rewriting to
|
| - // monomorphic state and making sure that the code stub is in the
|
| - // stub cache.
|
| - Handle<Code> ComputeStoreHandler(LookupResult* lookup,
|
| - Handle<JSObject> receiver,
|
| - Handle<String> name,
|
| - Handle<Object> value);
|
| - virtual Handle<Code> CompileStoreHandler(LookupResult* lookup,
|
| - Handle<JSObject> receiver,
|
| - Handle<String> name,
|
| - Handle<Object> value);
|
| + virtual Handle<Code> CompileHandler(LookupResult* lookup,
|
| + Handle<JSObject> receiver,
|
| + Handle<String> name,
|
| + Handle<Object> value);
|
|
|
| private:
|
| void set_target(Code* code) {
|
| @@ -668,10 +680,10 @@ class KeyedStoreIC: public StoreIC {
|
| protected:
|
| virtual Code::Kind kind() const { return Code::KEYED_STORE_IC; }
|
|
|
| - virtual Handle<Code> CompileStoreHandler(LookupResult* lookup,
|
| - Handle<JSObject> receiver,
|
| - Handle<String> name,
|
| - Handle<Object> value);
|
| + virtual Handle<Code> CompileHandler(LookupResult* lookup,
|
| + Handle<JSObject> receiver,
|
| + Handle<String> name,
|
| + Handle<Object> value);
|
| virtual void UpdateMegamorphicCache(Map* map, Name* name, Code* code) { }
|
|
|
| virtual Handle<Code> pre_monomorphic_stub() {
|
|
|