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()"); |