Index: src/runtime/runtime-symbol.cc |
diff --git a/src/runtime/runtime-symbol.cc b/src/runtime/runtime-symbol.cc |
index 35870fd5ac1d80d959beca229fa0222cf63c710b..2eaef63bbf2bedb4e06df8b9ccae892505f13b00 100644 |
--- a/src/runtime/runtime-symbol.cc |
+++ b/src/runtime/runtime-symbol.cc |
@@ -7,6 +7,7 @@ |
#include "src/arguments.h" |
#include "src/isolate-inl.h" |
#include "src/objects-inl.h" |
+#include "src/string-builder.h" |
namespace v8 { |
namespace internal { |
@@ -15,15 +16,23 @@ |
HandleScope scope(isolate); |
DCHECK_EQ(1, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(Object, name, 0); |
- RETURN_RESULT_OR_FAILURE(isolate, isolate->factory()->NewSymbol(name)); |
+ CHECK(name->IsString() || name->IsUndefined(isolate)); |
+ Handle<Symbol> symbol = isolate->factory()->NewSymbol(); |
+ if (name->IsString()) symbol->set_name(*name); |
+ return *symbol; |
} |
+ |
RUNTIME_FUNCTION(Runtime_CreatePrivateSymbol) { |
HandleScope scope(isolate); |
DCHECK_EQ(1, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(Object, name, 0); |
- RETURN_RESULT_OR_FAILURE(isolate, isolate->factory()->NewPrivateSymbol(name)); |
+ CHECK(name->IsString() || name->IsUndefined(isolate)); |
+ Handle<Symbol> symbol = isolate->factory()->NewPrivateSymbol(); |
+ if (name->IsString()) symbol->set_name(*name); |
+ return *symbol; |
} |
+ |
RUNTIME_FUNCTION(Runtime_SymbolDescription) { |
SealHandleScope shs(isolate); |
@@ -32,12 +41,20 @@ |
return symbol->name(); |
} |
+ |
RUNTIME_FUNCTION(Runtime_SymbolDescriptiveString) { |
HandleScope scope(isolate); |
DCHECK_EQ(1, args.length()); |
CONVERT_ARG_HANDLE_CHECKED(Symbol, symbol, 0); |
- return symbol->descriptive_string(); |
+ IncrementalStringBuilder builder(isolate); |
+ builder.AppendCString("Symbol("); |
+ if (symbol->name()->IsString()) { |
+ builder.AppendString(handle(String::cast(symbol->name()), isolate)); |
+ } |
+ builder.AppendCharacter(')'); |
+ RETURN_RESULT_OR_FAILURE(isolate, builder.Finish()); |
} |
+ |
RUNTIME_FUNCTION(Runtime_SymbolIsPrivate) { |
SealHandleScope shs(isolate); |
@@ -45,6 +62,5 @@ |
CONVERT_ARG_CHECKED(Symbol, symbol, 0); |
return isolate->heap()->ToBoolean(symbol->is_private()); |
} |
- |
} // namespace internal |
} // namespace v8 |