| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 3e8d57d039900ac11fc0311b9a45ba35045f9f43..7aa28da6b916a36be666c6bedd1f860cca47d329 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -633,7 +633,14 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreatePrivateSymbol) {
|
| }
|
|
|
|
|
| -RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolName) {
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_NewSymbolWrapper) {
|
| + ASSERT(args.length() == 1);
|
| + CONVERT_ARG_CHECKED(Symbol, symbol, 0);
|
| + return symbol->ToObject(isolate);
|
| +}
|
| +
|
| +
|
| +RUNTIME_FUNCTION(MaybeObject*, Runtime_SymbolDescription) {
|
| SealHandleScope shs(isolate);
|
| ASSERT(args.length() == 1);
|
| CONVERT_ARG_CHECKED(Symbol, symbol, 0);
|
| @@ -11264,15 +11271,18 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_GetFrameDetails) {
|
| // THIS MUST BE DONE LAST SINCE WE MIGHT ADVANCE
|
| // THE FRAME ITERATOR TO WRAP THE RECEIVER.
|
| Handle<Object> receiver(it.frame()->receiver(), isolate);
|
| - if (!receiver->IsJSObject() &&
|
| - shared->is_classic_mode() &&
|
| - !function->IsBuiltin()) {
|
| + if (receiver->IsSymbol() ||
|
| + (!receiver->IsJSObject() &&
|
| + shared->is_classic_mode() &&
|
| + !function->IsBuiltin())) {
|
| // If the receiver is not a JSObject and the function is not a
|
| // builtin or strict-mode we have hit an optimization where a
|
| // value object is not converted into a wrapped JS objects. To
|
| // hide this optimization from the debugger, we wrap the receiver
|
| // by creating correct wrapper object based on the calling frame's
|
| // native context.
|
| + // Symbol receivers are always exempted as their (strict) builtins
|
| + // only work over the wrapped form.
|
| it.Advance();
|
| if (receiver->IsUndefined()) {
|
| Context* context = function->context();
|
|
|