anchor.diff:      JumpCollector join = new ForwardJumpCollector(environment);
       IrBuilder tryCatchBuilder = makeDelimitedBuilder();
   
  -    // Variables that are boxed due to being captured in a closure are boxed
  -    // for their entire lifetime, and so they do not need to be boxed on
  -    // entry to any try block.  They are not filtered out before this because
  -    // we can not identify all of them in the same pass where we identify the
  -    // variables assigned in the try (they may be captured by a closure after
  -    // the try statement).
  +    // Variables treated as mutable in a try are not mutable outside of it.
  +    // Work with a copy of the outer builder's mutable variables.
  +    tryCatchBuilder.mutableVariables =
  +        new Map<Local, ir.MutableVariable>.from(mutableVariables);
       for (LocalVariableElement variable in tryStatementInfo.boxedOnEntry) {
         assert(!tryCatchBuilder.isInMutableVariable(variable));
         ir.Primitive value = tryCatchBuilder.buildLocalVariableGet(variable);
  
positive.code: }
  
  /// Shared state between delimited IrBuilders within the same function.
  class IrBuilderDelimitedState {
    final ConstantSystem constantSystem;
  
    /// A stack of collectors for breaks.
  
negative.code:       add(new ir.SetField(environment.lookup(location.box),
                            location.field,
                            initialValue));
      } else if (isInMutableVariable(variableElement)) {
        add(new ir.LetMutable(getMutableVariable(variableElement),
                              initialValue));
      } else {
        initialValue.useElementAsHint(variableElement);
        environment.extend(variableElement, initialValue);
  