Chromium Code Reviews| Index: src/runtime.cc |
| diff --git a/src/runtime.cc b/src/runtime.cc |
| index 15cfc854bfad6501cab80faed3743f81663fc629..026add89bb1464bf8a5f38e1ecefeec19cc3b742 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); |
| + if (name.is_null()) return Failure::Exception(); |
|
Michael Starzinger
2013/11/05 14:54:21
nit: Please use RETURN_IF_EMPTY_HANDLE here.
rossberg
2013/11/11 15:20:06
Done.
|
| 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); |
| + if (name.is_null()) return Failure::Exception(); |
|
Michael Starzinger
2013/11/05 14:54:21
nit: Please use RETURN_IF_EMPTY_HANDLE here.
rossberg
2013/11/11 15:20:06
Done.
|
| // Check if the name is trivially convertible to an index and get |
| // the element if so. |