anchor.diff:        do {
           changed = false;
           for (Node switchCase in node.cases) {
  -          LocalsHandler saved = new LocalsHandler.from(locals);
  +          LocalsHandler saved = locals;
  +          locals = new LocalsHandler.from(locals);
             visit(switchCase);
             changed = saved.merge(locals, discardIfAborts: false) || changed;
             locals = saved;
  
positive.code:   }
  
    LocalsHandler(this.inferrer, this.compiler)
        : locals = new Map<Element, TypeMask>(),
          capturedAndBoxed = new Map<Element, Element>(),
          fieldsInitializedInConstructor = new Map<Element, TypeMask>(),
          inTryBlock = false,
          isThisExposed = true;
    LocalsHandler.from(LocalsHandler other, {bool inTryBlock: false})
        : locals = new Map<Element, TypeMask>.from(other.locals),
          capturedAndBoxed = new Map<Element, Element>.from(
              other.capturedAndBoxed),
          fieldsInitializedInConstructor = new Map<Element, TypeMask>.from(
  
negative.code:         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]);
  