Handlify GlobalObject::EnsurePropertyCell method.

R=rossberg@chromium.org

Review URL: https://codereview.chromium.org/18348013

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15508 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
mstarzinger@chromium.org 2013-07-05 09:38:29 +00:00
parent d00a14392d
commit 328191d093
3 changed files with 30 additions and 30 deletions

View File

@ -106,6 +106,13 @@ inline Handle<T> handle(T* t, Isolate* isolate) {
}
// Convenience wrapper.
template<class T>
inline Handle<T> handle(T* t) {
return Handle<T>(t, t->GetIsolate());
}
class DeferredHandles;
class HandleScopeImplementer;

View File

@ -14243,39 +14243,36 @@ PropertyCell* GlobalObject::GetPropertyCell(LookupResult* result) {
}
Handle<PropertyCell> GlobalObject::EnsurePropertyCell(
Handle<GlobalObject> global,
Handle<Name> name) {
Isolate* isolate = global->GetIsolate();
CALL_HEAP_FUNCTION(isolate,
global->EnsurePropertyCell(*name),
PropertyCell);
// TODO(mstarzinger): Temporary wrapper until handlified.
static Handle<NameDictionary> NameDictionaryAdd(Handle<NameDictionary> dict,
Handle<Name> name,
Handle<Object> value,
PropertyDetails details) {
CALL_HEAP_FUNCTION(dict->GetIsolate(),
dict->Add(*name, *value, details),
NameDictionary);
}
MaybeObject* GlobalObject::EnsurePropertyCell(Name* name) {
ASSERT(!HasFastProperties());
int entry = property_dictionary()->FindEntry(name);
Handle<PropertyCell> GlobalObject::EnsurePropertyCell(
Handle<GlobalObject> global,
Handle<Name> name) {
ASSERT(!global->HasFastProperties());
int entry = global->property_dictionary()->FindEntry(*name);
if (entry == NameDictionary::kNotFound) {
Heap* heap = GetHeap();
Object* cell;
{ MaybeObject* maybe_cell =
heap->AllocatePropertyCell(heap->the_hole_value());
if (!maybe_cell->ToObject(&cell)) return maybe_cell;
}
Isolate* isolate = global->GetIsolate();
Handle<PropertyCell> cell = isolate->factory()->NewPropertyCell(
isolate->factory()->the_hole_value());
PropertyDetails details(NONE, NORMAL, 0);
details = details.AsDeleted();
Object* dictionary;
{ MaybeObject* maybe_dictionary =
property_dictionary()->Add(name, cell, details);
if (!maybe_dictionary->ToObject(&dictionary)) return maybe_dictionary;
}
set_properties(NameDictionary::cast(dictionary));
Handle<NameDictionary> dictionary = NameDictionaryAdd(
handle(global->property_dictionary()), name, cell, details);
global->set_properties(*dictionary);
return cell;
} else {
Object* value = property_dictionary()->ValueAt(entry);
Object* value = global->property_dictionary()->ValueAt(entry);
ASSERT(value->IsPropertyCell());
return value;
return handle(PropertyCell::cast(value));
}
}

View File

@ -6820,12 +6820,8 @@ class GlobalObject: public JSObject {
}
// Ensure that the global object has a cell for the given property name.
static Handle<PropertyCell> EnsurePropertyCell(
Handle<GlobalObject> global,
Handle<Name> name);
// TODO(kmillikin): This function can be eliminated once the stub cache is
// fully handlified (and the static helper can be written directly).
MUST_USE_RESULT MaybeObject* EnsurePropertyCell(Name* name);
static Handle<PropertyCell> EnsurePropertyCell(Handle<GlobalObject> global,
Handle<Name> name);
// Casting.
static inline GlobalObject* cast(Object* obj);