Chromium Code Reviews| Index: src/api.cc |
| diff --git a/src/api.cc b/src/api.cc |
| index 9093f4dd30d1c1023468da715d84a212953cbd26..ef0e4f2d28654c4a4c5fe331c028b0be6608fe49 100644 |
| --- a/src/api.cc |
| +++ b/src/api.cc |
| @@ -6192,6 +6192,25 @@ Local<Symbol> v8::Symbol::ForApi(Isolate* isolate, Local<String> name) { |
| } |
| +Local<Symbol> v8::Symbol::ForInternal(Isolate* isolate, Local<String> name) { |
| + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| + i::Handle<i::String> i_name = Utils::OpenHandle(*name); |
| + i::Handle<i::JSObject> registry = i_isolate->GetSymbolRegistry(); |
| + i::Handle<i::String> part = i_isolate->factory()->for_intern_string(); |
|
arv (Not doing code reviews)
2014/08/19 02:02:25
Maybe it is time to refactor this into a function
yhirano
2014/08/19 02:17:55
Done.
|
| + i::Handle<i::JSObject> symbols = i::Handle<i::JSObject>::cast( |
| + i::Object::GetPropertyOrElement(registry, part).ToHandleChecked()); |
| + i::Handle<i::Object> symbol = |
| + i::Object::GetPropertyOrElement(symbols, i_name).ToHandleChecked(); |
| + if (!symbol->IsSymbol()) { |
| + DCHECK(symbol->IsUndefined()); |
| + symbol = i_isolate->factory()->NewSymbol(); |
| + i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| + i::JSObject::SetProperty(symbols, i_name, symbol, i::STRICT).Assert(); |
| + } |
| + return Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); |
| +} |
| + |
| + |
| Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) { |
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| EnsureInitializedForIsolate(i_isolate, "v8::Private::New()"); |