ElementsAccessor's public interface handlification.
R=yangguo@chromium.org Review URL: https://codereview.chromium.org/225933002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20514 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
dd891816d4
commit
1f9f8fe9eb
@ -643,25 +643,11 @@ class ElementsAccessorBase : public ElementsAccessor {
|
|||||||
Object);
|
Object);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(ishell): Temporary wrapper until handlified.
|
|
||||||
MUST_USE_RESULT virtual Handle<Object> Get(
|
|
||||||
Handle<Object> receiver,
|
|
||||||
Handle<JSObject> holder,
|
|
||||||
uint32_t key) V8_FINAL V8_OVERRIDE {
|
|
||||||
CALL_HEAP_FUNCTION(holder->GetIsolate(),
|
|
||||||
Get(*receiver, *holder, key, NULL),
|
|
||||||
Object);
|
|
||||||
}
|
|
||||||
|
|
||||||
MUST_USE_RESULT virtual MaybeObject* Get(
|
MUST_USE_RESULT virtual MaybeObject* Get(
|
||||||
Object* receiver,
|
Object* receiver,
|
||||||
JSObject* holder,
|
JSObject* holder,
|
||||||
uint32_t key,
|
uint32_t key,
|
||||||
FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE {
|
FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE {
|
||||||
if (backing_store == NULL) {
|
|
||||||
backing_store = holder->elements();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsExternalArrayElementsKind(ElementsTraits::Kind) &&
|
if (!IsExternalArrayElementsKind(ElementsTraits::Kind) &&
|
||||||
FLAG_trace_js_array_abuse) {
|
FLAG_trace_js_array_abuse) {
|
||||||
CheckArrayAbuse(holder, "elements read", key);
|
CheckArrayAbuse(holder, "elements read", key);
|
||||||
@ -685,14 +671,21 @@ class ElementsAccessorBase : public ElementsAccessor {
|
|||||||
: backing_store->GetHeap()->the_hole_value();
|
: backing_store->GetHeap()->the_hole_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
||||||
|
Handle<Object> receiver,
|
||||||
|
Handle<JSObject> holder,
|
||||||
|
uint32_t key,
|
||||||
|
Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE {
|
||||||
|
return ElementsAccessorSubclass::GetAttributesImpl(
|
||||||
|
*receiver, *holder, key, *backing_store);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(ishell): To be removed once elements.cc is handlified.
|
||||||
MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
||||||
Object* receiver,
|
Object* receiver,
|
||||||
JSObject* holder,
|
JSObject* holder,
|
||||||
uint32_t key,
|
uint32_t key,
|
||||||
FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE {
|
FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE {
|
||||||
if (backing_store == NULL) {
|
|
||||||
backing_store = holder->elements();
|
|
||||||
}
|
|
||||||
return ElementsAccessorSubclass::GetAttributesImpl(
|
return ElementsAccessorSubclass::GetAttributesImpl(
|
||||||
receiver, holder, key, backing_store);
|
receiver, holder, key, backing_store);
|
||||||
}
|
}
|
||||||
@ -708,14 +701,21 @@ class ElementsAccessorBase : public ElementsAccessor {
|
|||||||
return BackingStore::cast(backing_store)->is_the_hole(key) ? ABSENT : NONE;
|
return BackingStore::cast(backing_store)->is_the_hole(key) ? ABSENT : NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MUST_USE_RESULT virtual PropertyType GetType(
|
||||||
|
Handle<Object> receiver,
|
||||||
|
Handle<JSObject> holder,
|
||||||
|
uint32_t key,
|
||||||
|
Handle<FixedArrayBase> backing_store) V8_FINAL V8_OVERRIDE {
|
||||||
|
return ElementsAccessorSubclass::GetTypeImpl(
|
||||||
|
*receiver, *holder, key, *backing_store);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO(ishell): To be removed once elements.cc is handlified.
|
||||||
MUST_USE_RESULT virtual PropertyType GetType(
|
MUST_USE_RESULT virtual PropertyType GetType(
|
||||||
Object* receiver,
|
Object* receiver,
|
||||||
JSObject* holder,
|
JSObject* holder,
|
||||||
uint32_t key,
|
uint32_t key,
|
||||||
FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE {
|
FixedArrayBase* backing_store) V8_FINAL V8_OVERRIDE {
|
||||||
if (backing_store == NULL) {
|
|
||||||
backing_store = holder->elements();
|
|
||||||
}
|
|
||||||
return ElementsAccessorSubclass::GetTypeImpl(
|
return ElementsAccessorSubclass::GetTypeImpl(
|
||||||
receiver, holder, key, backing_store);
|
receiver, holder, key, backing_store);
|
||||||
}
|
}
|
||||||
|
@ -79,16 +79,12 @@ class ElementsAccessor {
|
|||||||
uint32_t key,
|
uint32_t key,
|
||||||
Handle<FixedArrayBase> backing_store) = 0;
|
Handle<FixedArrayBase> backing_store) = 0;
|
||||||
|
|
||||||
MUST_USE_RESULT virtual Handle<Object> Get(
|
MUST_USE_RESULT inline Handle<Object> Get(
|
||||||
Handle<Object> receiver,
|
Handle<Object> receiver,
|
||||||
Handle<JSObject> holder,
|
Handle<JSObject> holder,
|
||||||
uint32_t key) = 0;
|
uint32_t key) {
|
||||||
|
return Get(receiver, holder, key, handle(holder->elements()));
|
||||||
MUST_USE_RESULT virtual MaybeObject* Get(
|
}
|
||||||
Object* receiver,
|
|
||||||
JSObject* holder,
|
|
||||||
uint32_t key,
|
|
||||||
FixedArrayBase* backing_store = NULL) = 0;
|
|
||||||
|
|
||||||
// Returns an element's attributes, or ABSENT if there is no such
|
// Returns an element's attributes, or ABSENT if there is no such
|
||||||
// element. This method doesn't iterate up the prototype chain. The caller
|
// element. This method doesn't iterate up the prototype chain. The caller
|
||||||
@ -96,10 +92,17 @@ class ElementsAccessor {
|
|||||||
// be compatible with the ElementsKind of the ElementsAccessor. If
|
// be compatible with the ElementsKind of the ElementsAccessor. If
|
||||||
// backing_store is NULL, the holder->elements() is used as the backing store.
|
// backing_store is NULL, the holder->elements() is used as the backing store.
|
||||||
MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
||||||
Object* receiver,
|
Handle<Object> receiver,
|
||||||
JSObject* holder,
|
Handle<JSObject> holder,
|
||||||
uint32_t key,
|
uint32_t key,
|
||||||
FixedArrayBase* backing_store = NULL) = 0;
|
Handle<FixedArrayBase> backing_store) = 0;
|
||||||
|
|
||||||
|
MUST_USE_RESULT inline PropertyAttributes GetAttributes(
|
||||||
|
Handle<Object> receiver,
|
||||||
|
Handle<JSObject> holder,
|
||||||
|
uint32_t key) {
|
||||||
|
return GetAttributes(receiver, holder, key, handle(holder->elements()));
|
||||||
|
}
|
||||||
|
|
||||||
// Returns an element's type, or NONEXISTENT if there is no such
|
// Returns an element's type, or NONEXISTENT if there is no such
|
||||||
// element. This method doesn't iterate up the prototype chain. The caller
|
// element. This method doesn't iterate up the prototype chain. The caller
|
||||||
@ -107,10 +110,17 @@ class ElementsAccessor {
|
|||||||
// be compatible with the ElementsKind of the ElementsAccessor. If
|
// be compatible with the ElementsKind of the ElementsAccessor. If
|
||||||
// backing_store is NULL, the holder->elements() is used as the backing store.
|
// backing_store is NULL, the holder->elements() is used as the backing store.
|
||||||
MUST_USE_RESULT virtual PropertyType GetType(
|
MUST_USE_RESULT virtual PropertyType GetType(
|
||||||
Object* receiver,
|
Handle<Object> receiver,
|
||||||
JSObject* holder,
|
Handle<JSObject> holder,
|
||||||
uint32_t key,
|
uint32_t key,
|
||||||
FixedArrayBase* backing_store = NULL) = 0;
|
Handle<FixedArrayBase> backing_store) = 0;
|
||||||
|
|
||||||
|
MUST_USE_RESULT inline PropertyType GetType(
|
||||||
|
Handle<Object> receiver,
|
||||||
|
Handle<JSObject> holder,
|
||||||
|
uint32_t key) {
|
||||||
|
return GetType(receiver, holder, key, handle(holder->elements()));
|
||||||
|
}
|
||||||
|
|
||||||
// Returns an element's accessors, or NULL if the element does not exist or
|
// Returns an element's accessors, or NULL if the element does not exist or
|
||||||
// is plain. This method doesn't iterate up the prototype chain. The caller
|
// is plain. This method doesn't iterate up the prototype chain. The caller
|
||||||
@ -234,6 +244,26 @@ class ElementsAccessor {
|
|||||||
virtual uint32_t GetKeyForIndex(Handle<FixedArrayBase> backing_store,
|
virtual uint32_t GetKeyForIndex(Handle<FixedArrayBase> backing_store,
|
||||||
uint32_t index) = 0;
|
uint32_t index) = 0;
|
||||||
|
|
||||||
|
// TODO(ishell): Non-handlified versions, used only by accessors'
|
||||||
|
// implementations. To be removed once elements.cc is handlified.
|
||||||
|
MUST_USE_RESULT virtual MaybeObject* Get(
|
||||||
|
Object* receiver,
|
||||||
|
JSObject* holder,
|
||||||
|
uint32_t key,
|
||||||
|
FixedArrayBase* backing_store) = 0;
|
||||||
|
|
||||||
|
MUST_USE_RESULT virtual PropertyAttributes GetAttributes(
|
||||||
|
Object* receiver,
|
||||||
|
JSObject* holder,
|
||||||
|
uint32_t key,
|
||||||
|
FixedArrayBase* backing_store) = 0;
|
||||||
|
|
||||||
|
MUST_USE_RESULT virtual PropertyType GetType(
|
||||||
|
Object* receiver,
|
||||||
|
JSObject* holder,
|
||||||
|
uint32_t key,
|
||||||
|
FixedArrayBase* backing_store) = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ElementsAccessor** elements_accessors_;
|
static ElementsAccessor** elements_accessors_;
|
||||||
const char* name_;
|
const char* name_;
|
||||||
|
@ -4498,7 +4498,7 @@ PropertyAttributes JSObject::GetElementAttributeWithoutInterceptor(
|
|||||||
uint32_t index,
|
uint32_t index,
|
||||||
bool continue_search) {
|
bool continue_search) {
|
||||||
PropertyAttributes attr = object->GetElementsAccessor()->GetAttributes(
|
PropertyAttributes attr = object->GetElementsAccessor()->GetAttributes(
|
||||||
*receiver, *object, index);
|
receiver, object, index);
|
||||||
if (attr != ABSENT) return attr;
|
if (attr != ABSENT) return attr;
|
||||||
|
|
||||||
// Handle [] on String objects.
|
// Handle [] on String objects.
|
||||||
|
Loading…
Reference in New Issue
Block a user