anchor.diff:      // The 'Impl' factoring enables a developer to place a breakpoint at the non-Impl 
       // code just below and get a breakpoint for all error logger implementations.
       abstract DiagnosticSink: phasedError: PhasedDiagnostic * isError: bool -> unit
  -    member this.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging
  +    member __.DebugDisplay() = sprintf "ErrorLogger(%s)" nameForDebugging
   
   let DiscardErrorsLogger = 
       { new ErrorLogger("DiscardErrorsLogger") with 
  
positive.code:     try
          let errorLogger = 
              { new ErrorLogger("suppressErrorReporting") with 
                  member x.DiagnosticSink(_phasedError, _isError) = ()
                  member x.ErrorCount = 0 }
          SetThreadErrorLoggerNoUnwind(errorLogger)
          f()
      finally
  
negative.code:             match exn with
              | StopProcessing | WrappedError(StopProcessing, _) -> () // suppress, so skip error recovery.
              | _ ->
                  try
                      x.ErrorRecovery exn m
                  with
                  | StopProcessing | WrappedError(StopProcessing, _) -> () // catch, e.g. raised by DiagnosticSink.
                  | ReportedError _ | WrappedError(ReportedError _, _)  -> () // catch, but not expected unless ErrorRecovery is changed.
  
          member x.ErrorRecoveryNoRange (exn:exn) =
              x.ErrorRecovery exn range0
  