| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index 46dd5effd2845eb20aba983c7484521043478567..e6fee958b89404085aecd053435ae599f48be851 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -990,13 +990,10 @@ void OptimizedFrame::Summarize(List<FrameSummary>* frames) {
|
| it.Next(); // Skip height.
|
|
|
| // The translation commands are ordered and the receiver is always
|
| - // at the first position. Since we are always at a call when we need
|
| - // to construct a stack trace, the receiver is always in a stack slot.
|
| + // at the first position.
|
| + // If we are at a call, the receiver is always in a stack slot.
|
| + // Otherwise we are not guaranteed to get the receiver value.
|
| opcode = static_cast<Translation::Opcode>(it.Next());
|
| - ASSERT(opcode == Translation::STACK_SLOT ||
|
| - opcode == Translation::LITERAL ||
|
| - opcode == Translation::CAPTURED_OBJECT ||
|
| - opcode == Translation::DUPLICATED_OBJECT);
|
| int index = it.Next();
|
|
|
| // Get the correct receiver in the optimized frame.
|
| @@ -1020,6 +1017,7 @@ void OptimizedFrame::Summarize(List<FrameSummary>* frames) {
|
| : this->GetParameter(parameter_index);
|
| }
|
| } else {
|
| + // The receiver is not in a stack slot nor in a literal. We give up.
|
| // 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
|
|
|