anchor.diff:      saved.merge(locals);
       locals = saved;
       for (Node catchBlock in node.catchBlocks) {
  -      saved = new LocalsHandler.from(locals);
  +      saved = locals;
  +      locals = new LocalsHandler.from(locals);
         visit(catchBlock);
         saved.merge(locals);
         locals = saved;
  
positive.code:         compiler = other.compiler,
          isThisExposed = other.isThisExposed;
  
    TypeMask use(Element local) {
      if (capturedAndBoxed.containsKey(local)) {
        return inferrer.getTypeOfElement(capturedAndBoxed[local]);
  
negative.code:       visit(node.receiver);
        accumulateIsChecks = oldAccumulateIsChecks;
        if (!accumulateIsChecks) isChecks = null;
        LocalsHandler saved = locals;
        locals = new LocalsHandler.from(locals);
        updateIsChecks(isChecks, usePositive: true);
        visit(node.arguments.head);
        saved.merge(locals);
        locals = saved;
        return compiler.typesTask.boolType;
      } else if (const SourceString("||") == op.source) {
        conditionIsSimple = false;
        visit(node.receiver);
        LocalsHandler saved = locals;
        locals = new LocalsHandler.from(locals);
        updateIsChecks(isChecks, usePositive: false);
        bool oldAccumulateIsChecks = accumulateIsChecks;
        accumulateIsChecks = false;
        visit(node.arguments.head);
        accumulateIsChecks = oldAccumulateIsChecks;
        saved.merge(locals);
        locals = saved;
        return compiler.typesTask.boolType;
      } else if (const SourceString("!") == op.source) {
        bool oldAccumulateIsChecks = accumulateIsChecks;
  