Chromium Code Reviews| Index: src/deoptimizer.cc |
| diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
| index d214aeae354393267182aecefd23f478d6c45313..d890b62ada4ca9c909ca495e06f1b3788a2f6c7f 100644 |
| --- a/src/deoptimizer.cc |
| +++ b/src/deoptimizer.cc |
| @@ -3486,6 +3486,37 @@ Handle<Object> TranslatedState::MaterializeAt(int frame_index, |
| object->set_length(*length); |
| return object; |
| } |
| + case FIXED_ARRAY_TYPE: { |
| + Handle<Object> lengthObject = MaterializeAt(frame_index, value_index); |
| + int32_t length = 0; |
| + CHECK(lengthObject->ToInt32(&length)); |
| + Handle<FixedArray> object = |
| + isolate_->factory()->NewFixedArray(length); |
| + slot->value_ = object; |
| + for (int i = 0; i < length; ++i) { |
| + Handle<Object> value = MaterializeAt(frame_index, value_index); |
| + object->set(i, *value); |
| + } |
| + return object; |
| + } |
| + case FIXED_DOUBLE_ARRAY_TYPE: { |
| + Handle<Object> lengthObject = MaterializeAt(frame_index, value_index); |
| + int32_t length = 0; |
| + CHECK(lengthObject->ToInt32(&length)); |
| + Handle<FixedArrayBase> object = |
| + isolate_->factory()->NewFixedDoubleArray(length); |
| + slot->value_ = object; |
| + if (length > 0) { |
| + Handle<FixedDoubleArray> double_array = |
| + Handle<FixedDoubleArray>::cast(object); |
| + for (int i = 0; i < length; ++i) { |
| + Handle<Object> value = MaterializeAt(frame_index, value_index); |
| + DCHECK(value->IsNumber()); |
|
Jarin
2016/01/05 12:51:19
Perhaps it is better to CHECK here, the deoptimize
sigurds
2016/01/05 13:08:57
Done.
|
| + double_array->set(i, value->Number()); |
| + } |
| + } |
| + return object; |
| + } |
| default: |
| PrintF(stderr, "[couldn't handle instance type %d]\n", |
| map->instance_type()); |