Chromium Code Reviews| Index: src/api.cc |
| diff --git a/src/api.cc b/src/api.cc |
| index 402598f40e3b9fc9ed5b8caad9855ea85f7d2d27..05449f1f36b7cab14c97ccf7e975ad1f13496129 100644 |
| --- a/src/api.cc |
| +++ b/src/api.cc |
| @@ -6136,24 +6136,54 @@ Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer, |
| } |
| -Local<Symbol> v8::Symbol::New(Isolate* isolate, const char* data, int length) { |
| +Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) { |
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| EnsureInitializedForIsolate(i_isolate, "v8::Symbol::New()"); |
| LOG_API(i_isolate, "Symbol::New()"); |
| ENTER_V8(i_isolate); |
| i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol(); |
| - if (data != NULL) { |
| - if (length == -1) length = i::StrLength(data); |
| - i::Handle<i::String> name = i_isolate->factory()->NewStringFromUtf8( |
| - i::Vector<const char>(data, length)); |
| - result->set_name(*name); |
| - } |
| + if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name)); |
| return Utils::ToLocal(result); |
| } |
| -Local<Private> v8::Private::New( |
| - Isolate* isolate, Local<String> name) { |
| +Local<Symbol> v8::Symbol::For(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::handle(i_isolate->heap()->for_string()); |
|
Michael Starzinger
2014/03/24 15:17:19
nit: Just use i_isolate->factory()->for_string() i
rossberg
2014/03/24 15:54:46
Done.
|
| + i::Handle<i::JSObject> symbols = |
| + i::Handle<i::JSObject>::cast(i::JSObject::GetProperty(registry, part)); |
| + i::Handle<i::Object> symbol = i::JSObject::GetProperty(symbols, i_name); |
| + if (!symbol->IsSymbol()) { |
| + ASSERT(symbol->IsUndefined()); |
| + symbol = i_isolate->factory()->NewSymbol(); |
| + i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| + i::JSObject::SetProperty(symbols, i_name, symbol, NONE, i::STRICT); |
| + } |
| + return Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); |
| +} |
| + |
| + |
| +Local<Symbol> v8::Symbol::ForApi(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::handle(i_isolate->heap()->for_api_string()); |
|
Michael Starzinger
2014/03/24 15:17:19
nit: Just use i_isolate->factory()->for_api_string
rossberg
2014/03/24 15:54:46
Done.
|
| + i::Handle<i::JSObject> symbols = |
| + i::Handle<i::JSObject>::cast(i::JSObject::GetProperty(registry, part)); |
| + i::Handle<i::Object> symbol = i::JSObject::GetProperty(symbols, i_name); |
| + if (!symbol->IsSymbol()) { |
| + ASSERT(symbol->IsUndefined()); |
| + symbol = i_isolate->factory()->NewSymbol(); |
| + i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| + i::JSObject::SetProperty(symbols, i_name, symbol, NONE, i::STRICT); |
| + } |
| + 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()"); |
| LOG_API(i_isolate, "Private::New()"); |
| @@ -6165,6 +6195,26 @@ Local<Private> v8::Private::New( |
| } |
| +Local<Private> v8::Private::ForApi(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::handle(i_isolate->heap()->private_api_string()); |
|
Michael Starzinger
2014/03/24 15:17:19
nit: Just use i_isolate->factory()->private_api_st
rossberg
2014/03/24 15:54:46
Done.
|
| + i::Handle<i::JSObject> privates = |
| + i::Handle<i::JSObject>::cast(i::JSObject::GetProperty(registry, part)); |
| + i::Handle<i::Object> symbol = i::JSObject::GetProperty(privates, i_name); |
| + if (!symbol->IsSymbol()) { |
| + ASSERT(symbol->IsUndefined()); |
| + symbol = i_isolate->factory()->NewPrivateSymbol(); |
| + i::Handle<i::Symbol>::cast(symbol)->set_name(*i_name); |
| + i::JSObject::SetProperty(privates, i_name, symbol, NONE, i::STRICT); |
| + } |
| + Local<Symbol> result = Utils::ToLocal(i::Handle<i::Symbol>::cast(symbol)); |
| + return v8::Handle<Private>(reinterpret_cast<Private*>(*result)); |
| +} |
| + |
| + |
| Local<Number> v8::Number::New(Isolate* isolate, double value) { |
| i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); |
| ASSERT(internal_isolate->IsInitialized()); |