| Index: src/frames.cc
 | 
| diff --git a/src/frames.cc b/src/frames.cc
 | 
| index 4402496f1824585c7a87cf66a9642d4a02674068..897421705da4f388fe5c95f879c6e0e7b4b82e5d 100644
 | 
| --- a/src/frames.cc
 | 
| +++ b/src/frames.cc
 | 
| @@ -818,14 +818,11 @@ void OptimizedFrame::Summarize(List<FrameSummary>* frames) {
 | 
|  
 | 
|    // We create the summary in reverse order because the frames
 | 
|    // in the deoptimization translation are ordered bottom-to-top.
 | 
| +  bool is_constructor = IsConstructor();
 | 
|    int i = jsframe_count;
 | 
|    while (i > 0) {
 | 
|      opcode = static_cast<Translation::Opcode>(it.Next());
 | 
|      if (opcode == Translation::JS_FRAME) {
 | 
| -      // We don't inline constructor calls, so only the first, outermost
 | 
| -      // frame can be a constructor frame in case of inlining.
 | 
| -      bool is_constructor = (i == jsframe_count) && IsConstructor();
 | 
| -
 | 
|        i--;
 | 
|        int ast_id = it.Next();
 | 
|        int function_id = it.Next();
 | 
| @@ -875,11 +872,18 @@ void OptimizedFrame::Summarize(List<FrameSummary>* frames) {
 | 
|  
 | 
|        FrameSummary summary(receiver, function, code, pc_offset, is_constructor);
 | 
|        frames->Add(summary);
 | 
| +      is_constructor = false;
 | 
| +    } else if (opcode == Translation::CONSTRUCT_STUB_FRAME) {
 | 
| +      // The next encountered JS_FRAME will be marked as a constructor call.
 | 
| +      it.Skip(Translation::NumberOfOperandsFor(opcode));
 | 
| +      ASSERT(!is_constructor);
 | 
| +      is_constructor = true;
 | 
|      } else {
 | 
|        // Skip over operands to advance to the next opcode.
 | 
|        it.Skip(Translation::NumberOfOperandsFor(opcode));
 | 
|      }
 | 
|    }
 | 
| +  ASSERT(!is_constructor);
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |