| Index: src/jump-target.cc | 
| =================================================================== | 
| --- src/jump-target.cc	(revision 1906) | 
| +++ src/jump-target.cc	(working copy) | 
| @@ -195,13 +195,17 @@ | 
| entry_frame_ = new VirtualFrame(cgen_); | 
| int index = 0; | 
| for (; index < entry_frame_->elements_.length(); index++) { | 
| -    // If the element is determined, set it now and count registers. | 
| -    // Undetermined elements are initially recorded as if in memory. | 
| +    // If the element is determined, set it now.  Count registers. | 
| +    // Mark elements as copied exactly if they are.  Undetermined | 
| +    // elements are initially recorded as if in memory. | 
| if (elements[index] != NULL) { | 
| entry_frame_->elements_[index] = *elements[index]; | 
| +      entry_frame_->elements_[index].clear_copied(); | 
| if (elements[index]->is_register()) { | 
| entry_frame_->register_locations_[elements[index]->reg().code()] = | 
| index; | 
| +      } else if (elements[index]->is_copy()) { | 
| +        entry_frame_->elements_[elements[index]->index()].set_copied(); | 
| } | 
| } | 
| } | 
| @@ -211,9 +215,12 @@ | 
| entry_frame_->elements_.Add(FrameElement::MemoryElement()); | 
| } else { | 
| entry_frame_->elements_.Add(*elements[index]); | 
| +      entry_frame_->elements_[index].clear_copied(); | 
| if (elements[index]->is_register()) { | 
| entry_frame_->register_locations_[elements[index]->reg().code()] = | 
| index; | 
| +      } else if (elements[index]->is_copy()) { | 
| +        entry_frame_->elements_[elements[index]->index()].set_copied(); | 
| } | 
| } | 
| } | 
| @@ -261,27 +268,25 @@ | 
| } | 
| } | 
|  | 
| -      // If there was a register choice, use it.  If not do nothing | 
| -      // (the element is already recorded as in memory) | 
| if (best_reg_code != no_reg.code_) { | 
| +        // If there was a register choice, use it.  Preserve the copied | 
| +        // flag on the element. | 
| +        bool is_copied = entry_frame_->elements_[i].is_copied(); | 
| Register reg = { best_reg_code }; | 
| entry_frame_->elements_[i] = | 
| FrameElement::RegisterElement(reg, | 
| FrameElement::NOT_SYNCED); | 
| +        if (is_copied) entry_frame_->elements_[i].set_copied(); | 
| entry_frame_->register_locations_[best_reg_code] = i; | 
| } | 
| +      // If there was no register found, the element is already | 
| +      // recorded as in memory. | 
| } | 
| } | 
|  | 
| -  // Set the copied flags in the frame to be exact.  This assumes that | 
| -  // the backing store of copies is always lower in the frame. | 
| +  // Set the static type of frame elements. | 
| for (int i = 0; i < length; i++) { | 
| FrameElement* current = &entry_frame_->elements_[i]; | 
| -    current->clear_copied(); | 
| -    if (current->is_copy()) { | 
| -      entry_frame_->elements_[current->index()].set_copied(); | 
| -    } | 
| - | 
| if (direction_ == BIDIRECTIONAL && i >= high_water_mark) { | 
| current->set_static_type(StaticType::unknown()); | 
| } else { | 
|  |