| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index 912c822d1789c4b1e9b64133ea4428498c376f93..9549c2db653621210a28c72a050b14950512eb4e 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -984,14 +984,16 @@ void OptimizedFrame::Summarize(List<FrameSummary>* frames) {
|
| // to construct a stack trace, the receiver is always in a stack slot.
|
| opcode = static_cast<Translation::Opcode>(it.Next());
|
| ASSERT(opcode == Translation::STACK_SLOT ||
|
| - opcode == Translation::LITERAL);
|
| + opcode == Translation::LITERAL ||
|
| + opcode == Translation::CAPTURED_OBJECT ||
|
| + opcode == Translation::DUPLICATED_OBJECT);
|
| int index = it.Next();
|
|
|
| // Get the correct receiver in the optimized frame.
|
| Object* receiver = NULL;
|
| if (opcode == Translation::LITERAL) {
|
| receiver = data->LiteralArray()->get(index);
|
| - } else {
|
| + } else if (opcode == Translation::STACK_SLOT) {
|
| // Positive index means the value is spilled to the locals
|
| // area. Negative means it is stored in the incoming parameter
|
| // area.
|
| @@ -1007,6 +1009,12 @@ void OptimizedFrame::Summarize(List<FrameSummary>* frames) {
|
| ? this->receiver()
|
| : this->GetParameter(parameter_index);
|
| }
|
| + } else {
|
| + // TODO(3029): Materializing a captured object (or duplicated
|
| + // object) is hard, we return undefined for now. This breaks the
|
| + // produced stack trace, as constructor frames aren't marked as
|
| + // such anymore.
|
| + receiver = isolate()->heap()->undefined_value();
|
| }
|
|
|
| Code* code = function->shared()->code();
|
|
|