Revision: 20738
Author: yang...@chromium.org
Date: Mon Apr 14 19:37:51 2014 UTC
Log: Reland "Handlify Runtime::InitializeIntrinsicFunctionNames."
R=mstarzin...@chromium.org
Review URL: https://codereview.chromium.org/236823003
http://code.google.com/p/v8/source/detail?r=20738
Modified:
/branches/bleeding_edge/src/factory.cc
/branches/bleeding_edge/src/heap.cc
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/src/runtime.h
=======================================
--- /branches/bleeding_edge/src/factory.cc Mon Apr 14 16:05:19 2014 UTC
+++ /branches/bleeding_edge/src/factory.cc Mon Apr 14 19:37:51 2014 UTC
@@ -1330,17 +1330,6 @@
module->set_scope_info(*scope_info);
return module;
}
-
-
-// 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);
-}
static Handle<GlobalObject> NewGlobalObjectFromMap(Isolate* isolate,
@@ -1385,7 +1374,7 @@
Handle<Name> name(descs->GetKey(i));
Handle<Object> value(descs->GetCallbacksObject(i), isolate());
Handle<PropertyCell> cell = NewPropertyCell(value);
- NameDictionaryAdd(dictionary, name, cell, d);
+ NameDictionary::AddNameEntry(dictionary, name, cell, d);
}
// Allocate the global object and initialize it with the backing store.
=======================================
--- /branches/bleeding_edge/src/heap.cc Mon Apr 14 16:05:19 2014 UTC
+++ /branches/bleeding_edge/src/heap.cc Mon Apr 14 19:37:51 2014 UTC
@@ -2996,10 +2996,6 @@
NameDictionary::Allocate(this, Runtime::kNumFunctions);
if (!maybe_obj->ToObject(&obj)) return false;
}
- { MaybeObject* maybe_obj =
Runtime::InitializeIntrinsicFunctionNames(this,
-
obj);
- if (!maybe_obj->ToObject(&obj)) return false;
- }
set_intrinsic_function_names(NameDictionary::cast(obj));
{ MaybeObject* maybe_obj = AllocateInitialNumberStringCache();
@@ -6113,6 +6109,11 @@
array_buffers_list_ = undefined_value();
allocation_sites_list_ = undefined_value();
weak_object_to_code_table_ = undefined_value();
+
+ HandleScope scope(isolate());
+ Runtime::InitializeIntrinsicFunctionNames(
+ isolate(), handle(intrinsic_function_names(), isolate()));
+
return true;
}
=======================================
--- /branches/bleeding_edge/src/objects.cc Mon Apr 14 16:21:38 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Mon Apr 14 19:37:51 2014 UTC
@@ -632,17 +632,6 @@
property_dictionary->ValueAtPut(result->GetDictionaryEntry(), *value);
}
}
-
-
-// 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);
-}
void JSObject::SetNormalizedProperty(Handle<JSObject> object,
@@ -664,8 +653,8 @@
store_value =
object->GetIsolate()->factory()->NewPropertyCell(value);
}
- property_dictionary =
- NameDictionaryAdd(property_dictionary, name, store_value, details);
+ property_dictionary = NameDictionary::AddNameEntry(
+ property_dictionary, name, store_value, details);
object->set_properties(*property_dictionary);
return;
}
@@ -1914,7 +1903,8 @@
value = cell;
}
PropertyDetails details = PropertyDetails(attributes, NORMAL, 0);
- Handle<NameDictionary> result = NameDictionaryAdd(dict, name, value,
details);
+ Handle<NameDictionary> result =
+ NameDictionary::AddNameEntry(dict, name, value, details);
if (*dict != *result) object->set_properties(*result);
}
@@ -4473,7 +4463,7 @@
Handle<Object> value(descs->GetConstant(i), isolate);
PropertyDetails d = PropertyDetails(
details.attributes(), NORMAL, i + 1);
- dictionary = NameDictionaryAdd(dictionary, key, value, d);
+ dictionary = NameDictionary::AddNameEntry(dictionary, key, value,
d);
break;
}
case FIELD: {
@@ -4482,7 +4472,7 @@
object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate);
PropertyDetails d =
PropertyDetails(details.attributes(), NORMAL, i + 1);
- dictionary = NameDictionaryAdd(dictionary, key, value, d);
+ dictionary = NameDictionary::AddNameEntry(dictionary, key, value,
d);
break;
}
case CALLBACKS: {
@@ -4490,7 +4480,7 @@
Handle<Object> value(descs->GetCallbacksObject(i), isolate);
PropertyDetails d = PropertyDetails(
details.attributes(), CALLBACKS, i + 1);
- dictionary = NameDictionaryAdd(dictionary, key, value, d);
+ dictionary = NameDictionary::AddNameEntry(dictionary, key, value,
d);
break;
}
case INTERCEPTOR:
@@ -14318,6 +14308,16 @@
template
int HashTable<SeededNumberDictionary, SeededNumberDictionaryShape,
uint32_t>::
FindEntry(uint32_t);
+
+
+Handle<NameDictionary> NameDictionary::AddNameEntry(Handle<NameDictionary>
dict,
+ Handle<Name> name,
+ Handle<Object> value,
+ PropertyDetails
details) {
+ CALL_HEAP_FUNCTION(dict->GetIsolate(),
+ dict->Add(*name, *value, details),
+ NameDictionary);
+}
Handle<Object> JSObject::PrepareSlowElementsForSort(
@@ -14851,7 +14851,7 @@
isolate->factory()->the_hole_value());
PropertyDetails details(NONE, NORMAL, 0);
details = details.AsDeleted();
- Handle<NameDictionary> dictionary = NameDictionaryAdd(
+ Handle<NameDictionary> dictionary = NameDictionary::AddNameEntry(
handle(global->property_dictionary()), name, cell, details);
global->set_properties(*dictionary);
return cell;
=======================================
--- /branches/bleeding_edge/src/objects.h Mon Apr 14 16:21:38 2014 UTC
+++ /branches/bleeding_edge/src/objects.h Mon Apr 14 19:37:51 2014 UTC
@@ -4107,6 +4107,12 @@
// Find entry for key, otherwise return kNotFound. Optimized version of
// HashTable::FindEntry.
int FindEntry(Name* key);
+
+ // TODO(mstarzinger): Temporary wrapper until handlified.
+ static Handle<NameDictionary> AddNameEntry(Handle<NameDictionary> dict,
+ Handle<Name> name,
+ Handle<Object> value,
+ PropertyDetails details);
};
=======================================
--- /branches/bleeding_edge/src/runtime.cc Mon Apr 14 14:34:37 2014 UTC
+++ /branches/bleeding_edge/src/runtime.cc Mon Apr 14 19:37:51 2014 UTC
@@ -15084,31 +15084,21 @@
#undef F
-MaybeObject* Runtime::InitializeIntrinsicFunctionNames(Heap* heap,
- Object* dictionary)
{
- ASSERT(dictionary != NULL);
- ASSERT(NameDictionary::cast(dictionary)->NumberOfElements() == 0);
+void Runtime::InitializeIntrinsicFunctionNames(Isolate* isolate,
+ Handle<NameDictionary>
dict) {
+ ASSERT(dict->NumberOfElements() == 0);
+ HandleScope scope(isolate);
for (int i = 0; i < kNumFunctions; ++i) {
const char* name = kIntrinsicFunctions[i].name;
if (name == NULL) continue;
- Object* name_string;
- { MaybeObject* maybe_name_string =
- heap->InternalizeUtf8String(name);
- if (!maybe_name_string->ToObject(&name_string)) return
maybe_name_string;
- }
- NameDictionary* name_dictionary = NameDictionary::cast(dictionary);
- { MaybeObject* maybe_dictionary = name_dictionary->Add(
- String::cast(name_string),
- Smi::FromInt(i),
- PropertyDetails(NONE, NORMAL, Representation::None()));
- if (!maybe_dictionary->ToObject(&dictionary)) {
- // Non-recoverable failure. Calling code must restart heap
- // initialization.
- return maybe_dictionary;
- }
- }
+ Handle<NameDictionary> new_dict = NameDictionary::AddNameEntry(
+ dict,
+ isolate->factory()->InternalizeUtf8String(name),
+ Handle<Smi>(Smi::FromInt(i), isolate),
+ PropertyDetails(NONE, NORMAL, Representation::None()));
+ // The dictionary does not need to grow.
+ CHECK(new_dict.is_identical_to(dict));
}
- return dictionary;
}
=======================================
--- /branches/bleeding_edge/src/runtime.h Mon Apr 14 11:43:40 2014 UTC
+++ /branches/bleeding_edge/src/runtime.h Mon Apr 14 19:37:51 2014 UTC
@@ -798,11 +798,8 @@
// Add internalized strings for all the intrinsic function names to a
// StringDictionary.
- // Returns failure if an allocation fails. In this case, it must be
- // retried with a new, empty StringDictionary, not with the same one.
- // Alternatively, heap initialization can be completely restarted.
- MUST_USE_RESULT static MaybeObject* InitializeIntrinsicFunctionNames(
- Heap* heap, Object* dictionary);
+ static void InitializeIntrinsicFunctionNames(Isolate* isolate,
+ Handle<NameDictionary>
dict);
// Get the intrinsic function with the given name, which must be
internalized.
static const Function* FunctionForName(Handle<String> name);
--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.