Chromium Code Reviews| Index: src/isolate.cc |
| diff --git a/src/isolate.cc b/src/isolate.cc |
| index 16696e2c98a1c49bde521d55c068a57a96ba9428..8467989e31ee963062a5b0ac5c3829d8e8e65612 100644 |
| --- a/src/isolate.cc |
| +++ b/src/isolate.cc |
| @@ -432,6 +432,17 @@ class StackTraceHelper { |
| bool encountered_strict_function_; |
| }; |
| +namespace { |
| + |
| +// TODO(jgruber): Fix all cases in which frames give us a hole value (e.g. the |
| +// receiver in RegExp constructor frames. |
| +Handle<Object> HoleToUndefined(Isolate* isolate, Handle<Object> in) { |
|
Yang
2016/08/01 06:49:18
Let's call this TheHoleToUndefined.
jgruber
2016/08/01 10:52:55
Done.
|
| + return (in->IsTheHole(isolate)) |
| + ? Handle<Object>::cast(isolate->factory()->undefined_value()) |
| + : in; |
| +} |
| +} |
| + |
| Handle<Object> Isolate::CaptureSimpleStackTrace(Handle<JSReceiver> error_object, |
| FrameSkipMode mode, |
| Handle<Object> caller) { |
| @@ -491,7 +502,7 @@ Handle<Object> Isolate::CaptureSimpleStackTrace(Handle<JSReceiver> error_object, |
| Handle<Smi> offset(Smi::FromInt(frames[i].code_offset()), this); |
| elements = MaybeGrow(this, elements, cursor, cursor + 4); |
| - elements->set(cursor++, *recv); |
| + elements->set(cursor++, *HoleToUndefined(this, recv)); |
| elements->set(cursor++, *fun); |
| elements->set(cursor++, *abstract_code); |
| elements->set(cursor++, *offset); |