| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 15cfc854bfad6501cab80faed3743f81663fc629..bc7106af6c3620161edfa1218a2f6f47d37e1820 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -614,6 +614,19 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateSymbol) {
|
| }
|
|
|
|
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_CreatePrivateSymbol) {
|
| + HandleScope scope(isolate);
|
| + ASSERT(args.length() == 1);
|
| + Handle<Object> name(args[0], isolate);
|
| + RUNTIME_ASSERT(name->IsString() || name->IsUndefined());
|
| + Symbol* symbol;
|
| + MaybeObject* maybe = isolate->heap()->AllocatePrivateSymbol();
|
| + if (!maybe->To(&symbol)) return maybe;
|
| + if (name->IsString()) symbol->set_name(*name);
|
| + return symbol;
|
| +}
|
| +
|
| +
|
| RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolName) {
|
| SealHandleScope shs(isolate);
|
| ASSERT(args.length() == 1);
|
| @@ -622,6 +635,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolName) {
|
| }
|
|
|
|
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolIsPrivate) {
|
| + SealHandleScope shs(isolate);
|
| + ASSERT(args.length() == 1);
|
| + CONVERT_ARG_CHECKED(Symbol, symbol, 0);
|
| + return isolate->heap()->ToBoolean(symbol->is_private());
|
| +}
|
| +
|
| +
|
| RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateJSProxy) {
|
| SealHandleScope shs(isolate);
|
| ASSERT(args.length() == 2);
|
| @@ -4818,6 +4839,19 @@ MaybeObject* Runtime::GetElementOrCharAt(Isolate* isolate,
|
| }
|
|
|
|
|
| +static Handle<Name> ToName(Isolate* isolate, Handle<Object> key) {
|
| + if (key->IsName()) {
|
| + return Handle<Name>::cast(key);
|
| + } else {
|
| + bool has_pending_exception = false;
|
| + Handle<Object> converted =
|
| + Execution::ToString(isolate, key, &has_pending_exception);
|
| + if (has_pending_exception) return Handle<Name>();
|
| + return Handle<Name>::cast(converted);
|
| + }
|
| +}
|
| +
|
| +
|
| MaybeObject* Runtime::HasObjectProperty(Isolate* isolate,
|
| Handle<JSReceiver> object,
|
| Handle<Object> key) {
|
| @@ -4830,16 +4864,8 @@ MaybeObject* Runtime::HasObjectProperty(Isolate* isolate,
|
| }
|
|
|
| // Convert the key to a name - possibly by calling back into JavaScript.
|
| - Handle<Name> name;
|
| - if (key->IsName()) {
|
| - name = Handle<Name>::cast(key);
|
| - } else {
|
| - bool has_pending_exception = false;
|
| - Handle<Object> converted =
|
| - Execution::ToString(isolate, key, &has_pending_exception);
|
| - if (has_pending_exception) return Failure::Exception();
|
| - name = Handle<Name>::cast(converted);
|
| - }
|
| + Handle<Name> name = ToName(isolate, key);
|
| + RETURN_IF_EMPTY_HANDLE(isolate, name);
|
|
|
| return isolate->heap()->ToBoolean(JSReceiver::HasProperty(object, name));
|
| }
|
| @@ -4872,16 +4898,8 @@ MaybeObject* Runtime::GetObjectProperty(Isolate* isolate,
|
| }
|
|
|
| // Convert the key to a name - possibly by calling back into JavaScript.
|
| - Handle<Name> name;
|
| - if (key->IsName()) {
|
| - name = Handle<Name>::cast(key);
|
| - } else {
|
| - bool has_pending_exception = false;
|
| - Handle<Object> converted =
|
| - Execution::ToString(isolate, key, &has_pending_exception);
|
| - if (has_pending_exception) return Failure::Exception();
|
| - name = Handle<Name>::cast(converted);
|
| - }
|
| + Handle<Name> name = ToName(isolate, key);
|
| + RETURN_IF_EMPTY_HANDLE(isolate, name);
|
|
|
| // Check if the name is trivially convertible to an index and get
|
| // the element if so.
|
|
|