anchor.diff:          compiler = other.compiler,
           isThisExposed = other.isThisExposed;
   
  +  LocalsHandler.deepCopyOf(LocalsHandler other)
  +      : locals = new VariableScope.deepCopyOf(other.locals),
  +        capturedAndBoxed = new Map<Element, Element>.from(
  +            other.capturedAndBoxed),
  +        fieldsInitializedInConstructor = new Map<Element, TypeMask>.from(
  +            other.fieldsInitializedInConstructor),
  +        inTryBlock = other.inTryBlock,
  +        inferrer = other.inferrer,
  +        compiler = other.compiler,
  +        isThisExposed = other.isThisExposed;
  +
     TypeMask use(Element local) {
       if (capturedAndBoxed.containsKey(local)) {
         return inferrer.getTypeOfElement(capturedAndBoxed[local]);
  
positive.code:     saved.merge(locals);
      locals = saved;
      for (Node catchBlock in node.catchBlocks) {
        saved = new LocalsHandler.from(locals);
        visit(catchBlock);
        saved.merge(locals);
        locals = saved;
  
negative.code:   TypeMask visitConditional(Conditional node) {
      List<Send> tests = <Send>[];
      bool simpleCondition = handleCondition(node.condition, tests);
      LocalsHandler saved = locals;
      locals = new LocalsHandler.from(locals);
      updateIsChecks(tests, usePositive: true);
      TypeMask firstType = visit(node.thenExpression);
      LocalsHandler thenLocals = locals;
  