Commit 9a0d5d97 authored by Toon Verwaest's avatar Toon Verwaest Committed by Commit Bot

[ic] Move handler construction code from ic to handler-configuration

Bug: 
Change-Id: I91b08ad6d95e60f84cb083b444bf0eb2fff10e27
Reviewed-on: https://chromium-review.googlesource.com/663864Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
Commit-Queue: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/master@{#47998}
parent 9c3dc33e
This diff is collapsed.
...@@ -132,15 +132,22 @@ class LoadHandler { ...@@ -132,15 +132,22 @@ class LoadHandler {
// dictionary. // dictionary.
static inline Handle<Smi> LoadModuleExport(Isolate* isolate, int index); static inline Handle<Smi> LoadModuleExport(Isolate* isolate, int index);
// Sets DoAccessCheckOnReceiverBits in given Smi-handler. The receiver // Creates a data handler that represents a load of a non-existent property.
// check is a part of a prototype chain check. // {holder} is the object from which the property is loaded. If no holder is
static inline Handle<Smi> EnableAccessCheckOnReceiver( // needed (e.g., for "nonexistent"), null_value() may be passed in.
Isolate* isolate, Handle<Smi> smi_handler); static Handle<Object> LoadFullChain(Isolate* isolate,
Handle<Map> receiver_map,
// Sets LookupOnReceiverBits in given Smi-handler. The receiver Handle<Object> holder, Handle<Name> name,
// check is a part of a prototype chain check. Handle<Smi> smi_handler);
static inline Handle<Smi> EnableLookupOnReceiver(Isolate* isolate,
Handle<Smi> smi_handler); // Creates a data handler that represents a prototype chain check followed
// by given Smi-handler that encoded a load from the holder.
// Can be used only if GetPrototypeCheckCount() returns non negative value.
static Handle<Object> LoadFromPrototype(Isolate* isolate,
Handle<Map> receiver_map,
Handle<JSReceiver> holder,
Handle<Name> name,
Handle<Smi> smi_handler);
// Creates a Smi-handler for loading a non-existent property. Works only as // Creates a Smi-handler for loading a non-existent property. Works only as
// a part of prototype chain check. // a part of prototype chain check.
...@@ -151,6 +158,17 @@ class LoadHandler { ...@@ -151,6 +158,17 @@ class LoadHandler {
ElementsKind elements_kind, ElementsKind elements_kind,
bool convert_hole_to_undefined, bool convert_hole_to_undefined,
bool is_js_array); bool is_js_array);
private:
// Sets DoAccessCheckOnReceiverBits in given Smi-handler. The receiver
// check is a part of a prototype chain check.
static inline Handle<Smi> EnableAccessCheckOnReceiver(
Isolate* isolate, Handle<Smi> smi_handler);
// Sets LookupOnReceiverBits in given Smi-handler. The receiver
// check is a part of a prototype chain check.
static inline Handle<Smi> EnableLookupOnReceiver(Isolate* isolate,
Handle<Smi> smi_handler);
}; };
// A set of bit fields representing Smi handlers for stores. // A set of bit fields representing Smi handlers for stores.
...@@ -226,12 +244,29 @@ class StoreHandler { ...@@ -226,12 +244,29 @@ class StoreHandler {
PropertyConstness constness, PropertyConstness constness,
Representation representation); Representation representation);
static Handle<Object> StoreTransition(Isolate* isolate,
Handle<Map> receiver_map,
Handle<JSObject> holder,
Handle<Map> transition,
Handle<Name> name);
static Handle<Object> StoreProxy(Isolate* isolate, Handle<Map> receiver_map,
Handle<JSProxy> proxy,
Handle<JSReceiver> receiver,
Handle<Name> name);
// Creates a Smi-handler for storing a property to a slow object. // Creates a Smi-handler for storing a property to a slow object.
static inline Handle<Smi> StoreNormal(Isolate* isolate); static inline Handle<Smi> StoreNormal(Isolate* isolate);
// Creates a Smi-handler for storing a property on a proxy. // Creates a Smi-handler for storing a property on a proxy.
static inline Handle<Smi> StoreProxy(Isolate* isolate); static inline Handle<Smi> StoreProxy(Isolate* isolate);
private:
static inline Handle<Smi> StoreField(Isolate* isolate, Kind kind,
int descriptor, FieldIndex field_index,
Representation representation,
bool extend_storage);
// Creates a Smi-handler for transitioning store to a field. // Creates a Smi-handler for transitioning store to a field.
static inline Handle<Smi> TransitionToField(Isolate* isolate, int descriptor, static inline Handle<Smi> TransitionToField(Isolate* isolate, int descriptor,
FieldIndex field_index, FieldIndex field_index,
...@@ -242,12 +277,6 @@ class StoreHandler { ...@@ -242,12 +277,6 @@ class StoreHandler {
// case the only thing that needs to be done is an update of a map). // case the only thing that needs to be done is an update of a map).
static inline Handle<Smi> TransitionToConstant(Isolate* isolate, static inline Handle<Smi> TransitionToConstant(Isolate* isolate,
int descriptor); int descriptor);
private:
static inline Handle<Smi> StoreField(Isolate* isolate, Kind kind,
int descriptor, FieldIndex field_index,
Representation representation,
bool extend_storage);
}; };
} // namespace internal } // namespace internal
......
This diff is collapsed.
...@@ -271,19 +271,6 @@ class LoadIC : public IC { ...@@ -271,19 +271,6 @@ class LoadIC : public IC {
// Creates a data handler that represents a load of a field by given index. // Creates a data handler that represents a load of a field by given index.
static Handle<Smi> SimpleFieldLoad(Isolate* isolate, FieldIndex index); static Handle<Smi> SimpleFieldLoad(Isolate* isolate, FieldIndex index);
// Creates a data handler that represents a prototype chain check followed
// by given Smi-handler that encoded a load from the holder.
// Can be used only if GetPrototypeCheckCount() returns non negative value.
Handle<Object> LoadFromPrototype(Handle<Map> receiver_map,
Handle<JSReceiver> holder, Handle<Name> name,
Handle<Smi> smi_handler);
// Creates a data handler that represents a load of a non-existent property.
// {holder} is the object from which the property is loaded. If no holder is
// needed (e.g., for "nonexistent"), null_value() may be passed in.
Handle<Object> LoadFullChain(Handle<Map> receiver_map, Handle<Object> holder,
Handle<Name> name, Handle<Smi> smi_handler);
friend class IC; friend class IC;
friend class NamedLoadHandlerCompiler; friend class NamedLoadHandlerCompiler;
}; };
...@@ -360,13 +347,6 @@ class StoreIC : public IC { ...@@ -360,13 +347,6 @@ class StoreIC : public IC {
Handle<Code> CompileHandler(LookupIterator* lookup) override; Handle<Code> CompileHandler(LookupIterator* lookup) override;
private: private:
Handle<Object> StoreTransition(Handle<Map> receiver_map,
Handle<JSObject> holder,
Handle<Map> transition, Handle<Name> name);
Handle<Object> StoreProxy(Handle<Map> receiver_map, Handle<JSProxy> proxy,
Handle<JSReceiver> receiver, Handle<Name> name);
friend class IC; friend class IC;
bool created_new_transition_ = false; bool created_new_transition_ = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment