Handlify JSObject::FastPropertyAt.
R=ulan@chromium.org Review URL: https://codereview.chromium.org/238583004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20765 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
99fb4fb41a
commit
1a44233cef
@ -294,16 +294,17 @@ bool Object::HasValidElements() {
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* Object::AllocateNewStorageFor(Heap* heap,
|
||||
Representation representation) {
|
||||
if (representation.IsSmi() && IsUninitialized()) {
|
||||
return Smi::FromInt(0);
|
||||
Handle<Object> Object::NewStorageFor(Isolate* isolate,
|
||||
Handle<Object> object,
|
||||
Representation representation) {
|
||||
if (representation.IsSmi() && object->IsUninitialized()) {
|
||||
return handle(Smi::FromInt(0), isolate);
|
||||
}
|
||||
if (!representation.IsDouble()) return this;
|
||||
if (IsUninitialized()) {
|
||||
return heap->AllocateHeapNumber(0);
|
||||
if (!representation.IsDouble()) return object;
|
||||
if (object->IsUninitialized()) {
|
||||
return isolate->factory()->NewHeapNumber(0);
|
||||
}
|
||||
return heap->AllocateHeapNumber(Number());
|
||||
return isolate->factory()->NewHeapNumber(object->Number());
|
||||
}
|
||||
|
||||
|
||||
@ -1988,13 +1989,6 @@ void JSObject::SetInternalField(int index, Smi* value) {
|
||||
}
|
||||
|
||||
|
||||
MaybeObject* JSObject::FastPropertyAt(Representation representation,
|
||||
int index) {
|
||||
Object* raw_value = RawFastPropertyAt(index);
|
||||
return raw_value->AllocateNewStorageFor(GetHeap(), representation);
|
||||
}
|
||||
|
||||
|
||||
// Access fast-case object properties at index. The use of these routines
|
||||
// is needed to correctly distinguish between properties stored in-object and
|
||||
// properties stored in the properties array.
|
||||
|
@ -1824,17 +1824,6 @@ String* JSReceiver::constructor_name() {
|
||||
}
|
||||
|
||||
|
||||
// TODO(mstarzinger): Temporary wrapper until handlified.
|
||||
static Handle<Object> NewStorageFor(Isolate* isolate,
|
||||
Handle<Object> object,
|
||||
Representation representation) {
|
||||
Heap* heap = isolate->heap();
|
||||
CALL_HEAP_FUNCTION(isolate,
|
||||
object->AllocateNewStorageFor(heap, representation),
|
||||
Object);
|
||||
}
|
||||
|
||||
|
||||
void JSObject::AddFastProperty(Handle<JSObject> object,
|
||||
Handle<Name> name,
|
||||
Handle<Object> value,
|
||||
@ -2247,7 +2236,7 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map) {
|
||||
if (old_details.representation().IsNone()) {
|
||||
value = handle(Smi::FromInt(0), isolate);
|
||||
}
|
||||
value = NewStorageFor(isolate, value, details.representation());
|
||||
value = Object::NewStorageFor(isolate, value, details.representation());
|
||||
}
|
||||
ASSERT(!(details.representation().IsDouble() && value->IsSmi()));
|
||||
int target_index = new_descriptors->GetFieldIndex(i) - inobject;
|
||||
@ -5846,8 +5835,8 @@ Handle<Object> JSObject::FastPropertyAt(Handle<JSObject> object,
|
||||
Representation representation,
|
||||
int index) {
|
||||
Isolate* isolate = object->GetIsolate();
|
||||
CALL_HEAP_FUNCTION(isolate,
|
||||
object->FastPropertyAt(representation, index), Object);
|
||||
Handle<Object> raw_value(object->RawFastPropertyAt(index), isolate);
|
||||
return Object::NewStorageFor(isolate, raw_value, representation);
|
||||
}
|
||||
|
||||
|
||||
@ -5947,7 +5936,7 @@ Handle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk(
|
||||
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, value, Handle<JSObject>());
|
||||
} else {
|
||||
Representation representation = details.representation();
|
||||
value = NewStorageFor(isolate, value, representation);
|
||||
value = Object::NewStorageFor(isolate, value, representation);
|
||||
}
|
||||
if (copying) {
|
||||
copy->FastPropertyAtPut(index, *value);
|
||||
|
@ -1511,8 +1511,9 @@ class Object : public MaybeObject {
|
||||
|
||||
Handle<HeapType> OptimalType(Isolate* isolate, Representation representation);
|
||||
|
||||
inline MaybeObject* AllocateNewStorageFor(Heap* heap,
|
||||
Representation representation);
|
||||
inline static Handle<Object> NewStorageFor(Isolate* isolate,
|
||||
Handle<Object> object,
|
||||
Representation representation);
|
||||
|
||||
// Returns true if the object is of the correct type to be used as a
|
||||
// implementation of a JSObject's elements.
|
||||
@ -2608,9 +2609,6 @@ class JSObject: public JSReceiver {
|
||||
int unused_property_fields);
|
||||
|
||||
// Access fast-case object properties at index.
|
||||
MUST_USE_RESULT inline MaybeObject* FastPropertyAt(
|
||||
Representation representation,
|
||||
int index);
|
||||
static Handle<Object> FastPropertyAt(Handle<JSObject> object,
|
||||
Representation representation,
|
||||
int index);
|
||||
|
@ -5023,7 +5023,9 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_KeyedGetProperty) {
|
||||
if (!result.representation().IsDouble()) {
|
||||
keyed_lookup_cache->Update(receiver_map, key, offset);
|
||||
}
|
||||
return receiver->FastPropertyAt(result.representation(), offset);
|
||||
HandleScope scope(isolate);
|
||||
return *JSObject::FastPropertyAt(
|
||||
handle(receiver, isolate), result.representation(), offset);
|
||||
}
|
||||
} else {
|
||||
// Attempt dictionary lookup.
|
||||
|
Loading…
Reference in New Issue
Block a user