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. |