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:
yangguo@chromium.org 2014-04-15 12:11:39 +00:00
parent 99fb4fb41a
commit 1a44233cef
4 changed files with 19 additions and 36 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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);

View File

@ -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.