| Index: src/arm/lithium-arm.cc
|
| diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc
|
| index 12a6290fbcbaef3780f3158d65f5d3c1bcf2541e..cba861b7be278dbf83eb3181d6fee3186f9f440f 100644
|
| --- a/src/arm/lithium-arm.cc
|
| +++ b/src/arm/lithium-arm.cc
|
| @@ -2440,6 +2440,22 @@ LInstruction* LChunkBuilder::DoArgumentsObject(HArgumentsObject* instr) {
|
|
|
|
|
| LInstruction* LChunkBuilder::DoCapturedObject(HCapturedObject* instr) {
|
| + HEnvironment* env = current_block_->last_environment();
|
| + ASSERT(env != NULL);
|
| +
|
| + // Replay captured objects by replacing all captured objects with the
|
| + // same capture id in the current and all outer environments.
|
| + while (env != NULL) {
|
| + for (int i = 0; i < env->length(); ++i) {
|
| + HValue* value = env->values()->at(i);
|
| + if (value->IsCapturedObject() &&
|
| + HCapturedObject::cast(value)->capture_id() == instr->capture_id()) {
|
| + env->SetValueAt(i, instr);
|
| + }
|
| + }
|
| + env = env->outer();
|
| + }
|
| +
|
| // There are no real uses of a captured object.
|
| return NULL;
|
| }
|
|
|