| Index: src/string-stream.cc
|
| diff --git a/src/string-stream.cc b/src/string-stream.cc
|
| index 2801d23cda088b784916aaf3ccdf5c30e7efcab6..43be8f1f1872e3a3581a5a81b51f70fb83ddc155 100644
|
| --- a/src/string-stream.cc
|
| +++ b/src/string-stream.cc
|
| @@ -527,12 +527,18 @@ void StringStream::PrintPrototype(JSFunction* fun, Object* receiver) {
|
| Object* name = fun->shared()->name();
|
| bool print_name = false;
|
| Isolate* isolate = fun->GetIsolate();
|
| - for (PrototypeIterator iter(isolate, receiver,
|
| - PrototypeIterator::START_AT_RECEIVER);
|
| - !iter.IsAtEnd(); iter.Advance()) {
|
| - if (iter.GetCurrent()->IsJSObject()) {
|
| + if (receiver->IsNull() || receiver->IsUndefined() || receiver->IsJSProxy()) {
|
| + print_name = true;
|
| + } else {
|
| + if (!receiver->IsJSObject()) {
|
| + receiver = receiver->GetRootMap(isolate)->prototype();
|
| + }
|
| +
|
| + for (PrototypeIterator iter(isolate, JSObject::cast(receiver),
|
| + PrototypeIterator::START_AT_RECEIVER);
|
| + !iter.IsAtEnd(); iter.Advance()) {
|
| Object* key = iter.GetCurrent<JSObject>()->SlowReverseLookup(fun);
|
| - if (key != isolate->heap()->undefined_value()) {
|
| + if (!key->IsUndefined()) {
|
| if (!name->IsString() ||
|
| !key->IsString() ||
|
| !String::cast(name)->Equals(String::cast(key))) {
|
| @@ -542,9 +548,8 @@ void StringStream::PrintPrototype(JSFunction* fun, Object* receiver) {
|
| print_name = false;
|
| }
|
| name = key;
|
| + break;
|
| }
|
| - } else {
|
| - print_name = true;
|
| }
|
| }
|
| PrintName(name);
|
|
|