Chromium Code Reviews| Index: src/frames.cc |
| =================================================================== |
| --- src/frames.cc (revision 11527) |
| +++ src/frames.cc (working copy) |
| @@ -818,12 +818,23 @@ |
| } |
| +JSFunction* OptimizedFrame::LiteralAt(FixedArray* literal_array, |
| + int literal_id) { |
| + if (literal_id == Translation::kSelfLiteralId) { |
| + return JSFunction::cast(function()); |
| + } |
| + |
| + return JSFunction::cast(literal_array->get(literal_id)); |
| +} |
| + |
| + |
| void OptimizedFrame::Summarize(List<FrameSummary>* frames) { |
| ASSERT(frames->length() == 0); |
| ASSERT(is_optimized()); |
| int deopt_index = Safepoint::kNoDeoptimizationIndex; |
| DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); |
| + FixedArray* literal_array = data->LiteralArray(); |
|
Michael Starzinger
2012/05/23 11:16:29
I know this is not part of your change, but for co
|
| // BUG(3243555): Since we don't have a lazy-deopt registered at |
| // throw-statements, we can't use the translation at the call-site of |
| @@ -851,10 +862,8 @@ |
| if (opcode == Translation::JS_FRAME) { |
| i--; |
| int ast_id = it.Next(); |
| - int function_id = it.Next(); |
| + JSFunction* function = LiteralAt(literal_array, it.Next()); |
| it.Next(); // Skip height. |
| - JSFunction* function = |
| - JSFunction::cast(data->LiteralArray()->get(function_id)); |
| // The translation commands are ordered and the receiver is always |
| // at the first position. Since we are always at a call when we need |
| @@ -961,6 +970,7 @@ |
| int deopt_index = Safepoint::kNoDeoptimizationIndex; |
| DeoptimizationInputData* data = GetDeoptimizationData(&deopt_index); |
| + FixedArray* literal_array = data->LiteralArray(); |
| TranslationIterator it(data->TranslationByteArray(), |
| data->TranslationIndex(deopt_index)->value()); |
| @@ -976,10 +986,8 @@ |
| if (opcode == Translation::JS_FRAME) { |
| jsframe_count--; |
| it.Next(); // Skip ast id. |
| - int function_id = it.Next(); |
| + JSFunction* function = LiteralAt(literal_array, it.Next()); |
| it.Next(); // Skip height. |
| - JSFunction* function = |
| - JSFunction::cast(data->LiteralArray()->get(function_id)); |
| functions->Add(function); |
| } else { |
| // Skip over operands to advance to the next opcode. |