| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index fa16f31481bdc63dc5ed553cbdf63abf6f063746..1d714aff8330225dd2748c6024e06238919f6788 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -3606,6 +3606,13 @@ bool v8::Object::ForceSet(v8::Local<Value> key, v8::Local<Value> value,
|
| }
|
|
|
|
|
| +Maybe<bool> v8::Object::SetPrivate(Local<Context> context, Local<Private> key,
|
| + Local<Value> value) {
|
| + return DefineOwnProperty(context, Local<Name>(reinterpret_cast<Name*>(*key)),
|
| + value, DontEnum);
|
| +}
|
| +
|
| +
|
| MaybeLocal<Value> v8::Object::Get(Local<v8::Context> context,
|
| Local<Value> key) {
|
| PREPARE_FOR_EXECUTION(context, "v8::Object::Get()", Value);
|
| @@ -3642,6 +3649,12 @@ Local<Value> v8::Object::Get(uint32_t index) {
|
| }
|
|
|
|
|
| +MaybeLocal<Value> v8::Object::GetPrivate(Local<Context> context,
|
| + Local<Private> key) {
|
| + return Get(context, Local<Value>(reinterpret_cast<Value*>(*key)));
|
| +}
|
| +
|
| +
|
| Maybe<PropertyAttribute> v8::Object::GetPropertyAttributes(
|
| Local<Context> context, Local<Value> key) {
|
| PREPARE_FOR_EXECUTION_PRIMITIVE(
|
| @@ -3878,6 +3891,12 @@ bool v8::Object::Delete(v8::Local<Value> key) {
|
| }
|
|
|
|
|
| +Maybe<bool> v8::Object::DeletePrivate(Local<Context> context,
|
| + Local<Private> key) {
|
| + return Delete(context, Local<Value>(reinterpret_cast<Value*>(*key)));
|
| +}
|
| +
|
| +
|
| Maybe<bool> v8::Object::Has(Local<Context> context, Local<Value> key) {
|
| PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::Get()", bool);
|
| auto self = Utils::OpenHandle(this);
|
| @@ -3906,6 +3925,11 @@ bool v8::Object::Has(v8::Local<Value> key) {
|
| }
|
|
|
|
|
| +Maybe<bool> v8::Object::HasPrivate(Local<Context> context, Local<Private> key) {
|
| + return HasOwnProperty(context, Local<Name>(reinterpret_cast<Name*>(*key)));
|
| +}
|
| +
|
| +
|
| Maybe<bool> v8::Object::Delete(Local<Context> context, uint32_t index) {
|
| PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Object::DeleteProperty()",
|
| bool);
|
| @@ -4238,13 +4262,16 @@ int v8::Object::GetIdentityHash() {
|
| bool v8::Object::SetHiddenValue(v8::Local<v8::String> key,
|
| v8::Local<v8::Value> value) {
|
| i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate();
|
| - if (value.IsEmpty()) return DeleteHiddenValue(key);
|
| ENTER_V8(isolate);
|
| i::HandleScope scope(isolate);
|
| i::Handle<i::JSObject> self = Utils::OpenHandle(this);
|
| i::Handle<i::String> key_obj = Utils::OpenHandle(*key);
|
| i::Handle<i::String> key_string =
|
| isolate->factory()->InternalizeString(key_obj);
|
| + if (value.IsEmpty()) {
|
| + i::JSObject::DeleteHiddenProperty(self, key_string);
|
| + return true;
|
| + }
|
| i::Handle<i::Object> value_obj = Utils::OpenHandle(*value);
|
| i::Handle<i::Object> result =
|
| i::JSObject::SetHiddenProperty(self, key_string, value_obj);
|
| @@ -5249,6 +5276,11 @@ Local<Value> Symbol::Name() const {
|
| }
|
|
|
|
|
| +Local<Value> Private::Name() const {
|
| + return reinterpret_cast<const Symbol*>(this)->Name();
|
| +}
|
| +
|
| +
|
| double Number::Value() const {
|
| i::Handle<i::Object> obj = Utils::OpenHandle(this);
|
| return obj->Number();
|
| @@ -6821,7 +6853,8 @@ Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) {
|
|
|
| static i::Handle<i::Symbol> SymbolFor(i::Isolate* isolate,
|
| i::Handle<i::String> name,
|
| - i::Handle<i::String> part) {
|
| + i::Handle<i::String> part,
|
| + bool private_symbol) {
|
| i::Handle<i::JSObject> registry = isolate->GetSymbolRegistry();
|
| i::Handle<i::JSObject> symbols =
|
| i::Handle<i::JSObject>::cast(
|
| @@ -6830,7 +6863,10 @@ static i::Handle<i::Symbol> SymbolFor(i::Isolate* isolate,
|
| i::Object::GetPropertyOrElement(symbols, name).ToHandleChecked();
|
| if (!symbol->IsSymbol()) {
|
| DCHECK(symbol->IsUndefined());
|
| - symbol = isolate->factory()->NewSymbol();
|
| + if (private_symbol)
|
| + symbol = isolate->factory()->NewPrivateSymbol();
|
| + else
|
| + symbol = isolate->factory()->NewSymbol();
|
| i::Handle<i::Symbol>::cast(symbol)->set_name(*name);
|
| i::JSObject::SetProperty(symbols, name, symbol, i::STRICT).Assert();
|
| }
|
| @@ -6842,7 +6878,7 @@ 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::String> part = i_isolate->factory()->for_string();
|
| - return Utils::ToLocal(SymbolFor(i_isolate, i_name, part));
|
| + return Utils::ToLocal(SymbolFor(i_isolate, i_name, part, false));
|
| }
|
|
|
|
|
| @@ -6850,7 +6886,7 @@ 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::String> part = i_isolate->factory()->for_api_string();
|
| - return Utils::ToLocal(SymbolFor(i_isolate, i_name, part));
|
| + return Utils::ToLocal(SymbolFor(i_isolate, i_name, part, false));
|
| }
|
|
|
|
|
| @@ -6878,6 +6914,27 @@ Local<Symbol> v8::Symbol::GetIsConcatSpreadable(Isolate* isolate) {
|
| }
|
|
|
|
|
| +Local<Private> v8::Private::New(Isolate* isolate, Local<String> name) {
|
| + i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| + LOG_API(i_isolate, "Private::New()");
|
| + ENTER_V8(i_isolate);
|
| + i::Handle<i::Symbol> symbol = i_isolate->factory()->NewPrivateSymbol();
|
| + if (!name.IsEmpty()) symbol->set_name(*Utils::OpenHandle(*name));
|
| + Local<Symbol> result = Utils::ToLocal(symbol);
|
| + return v8::Local<Private>(reinterpret_cast<Private*>(*result));
|
| +}
|
| +
|
| +
|
| +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::String> part = i_isolate->factory()->private_api_string();
|
| + Local<Symbol> result =
|
| + Utils::ToLocal(SymbolFor(i_isolate, i_name, part, true));
|
| + return v8::Local<Private>(reinterpret_cast<Private*>(*result));
|
| +}
|
| +
|
| +
|
| Local<Number> v8::Number::New(Isolate* isolate, double value) {
|
| i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| if (std::isnan(value)) {
|
|
|