| Index: src/isolate.cc
|
| diff --git a/src/isolate.cc b/src/isolate.cc
|
| index 1b031f8a937559306d048d616e59f9955170ce2e..0b2478691bbf347aca4eb847998986ab854cedd4 100644
|
| --- a/src/isolate.cc
|
| +++ b/src/isolate.cc
|
| @@ -2522,21 +2522,29 @@ ISOLATE_INIT_ARRAY_LIST(ISOLATE_FIELD_OFFSET)
|
| #endif
|
|
|
|
|
| +Handle<JSObject> Isolate::SetUpSubregistry(Handle<JSObject> registry,
|
| + Handle<Map> map, const char* cname) {
|
| + Handle<String> name = factory()->InternalizeUtf8String(cname);
|
| + Handle<JSObject> obj = factory()->NewJSObjectFromMap(map);
|
| + JSObject::NormalizeProperties(obj, CLEAR_INOBJECT_PROPERTIES, 0,
|
| + "SetupSymbolRegistry");
|
| + JSObject::AddProperty(registry, name, obj, NONE);
|
| + return obj;
|
| +}
|
| +
|
| +
|
| Handle<JSObject> Isolate::GetSymbolRegistry() {
|
| if (heap()->symbol_registry()->IsSmi()) {
|
| Handle<Map> map = factory()->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
|
| Handle<JSObject> registry = factory()->NewJSObjectFromMap(map);
|
| heap()->set_symbol_registry(*registry);
|
|
|
| - static const char* nested[] = {"for", "for_api", "keyFor", "private_api",
|
| - "private_intern"};
|
| - for (unsigned i = 0; i < arraysize(nested); ++i) {
|
| - Handle<String> name = factory()->InternalizeUtf8String(nested[i]);
|
| - Handle<JSObject> obj = factory()->NewJSObjectFromMap(map);
|
| - JSObject::NormalizeProperties(obj, KEEP_INOBJECT_PROPERTIES, 8,
|
| - "SetupSymbolRegistry");
|
| - JSObject::SetProperty(registry, name, obj, STRICT).Assert();
|
| - }
|
| + SetUpSubregistry(registry, map, "for");
|
| + SetUpSubregistry(registry, map, "for_api");
|
| + SetUpSubregistry(registry, map, "keyFor");
|
| + SetUpSubregistry(registry, map, "private_api");
|
| + heap()->AddPrivateGlobalSymbols(
|
| + SetUpSubregistry(registry, map, "private_intern"));
|
| }
|
| return Handle<JSObject>::cast(factory()->symbol_registry());
|
| }
|
|
|