Skip to content
30 changes: 18 additions & 12 deletions src/Compiler/Driver/ParseAndCheckInputs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1389,15 +1389,17 @@ let DiagnosticsLoggerForInput (tcConfig: TcConfig, input: ParsedInput, oldLogger

/// Typecheck a single file (or interactive entry into F# Interactive)
let CheckOneInputEntry (ctok, checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt) tcState input =
// Equip loggers to locally filter w.r.t. scope pragmas in each input
use _ =
UseTransformedDiagnosticsLogger(fun oldLogger -> DiagnosticsLoggerForInput(tcConfig, input, oldLogger))
cancellable {
// Equip loggers to locally filter w.r.t. scope pragmas in each input
use _ =
UseTransformedDiagnosticsLogger(fun oldLogger -> DiagnosticsLoggerForInput(tcConfig, input, oldLogger))

use _ = UseBuildPhase BuildPhase.TypeCheck
use _ = UseBuildPhase BuildPhase.TypeCheck

RequireCompilationThread ctok
RequireCompilationThread ctok

CheckOneInput(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, input)
return! CheckOneInput(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, input)
}
|> Cancellable.runWithoutCancellation

/// Finish checking multiple files (or one interactive entry into F# Interactive)
Expand Down Expand Up @@ -1859,14 +1861,18 @@ let CheckMultipleInputsUsingGraphMode
((input, logger): ParsedInput * DiagnosticsLogger)
((currentTcState, _currentPriorErrors): State)
: Finisher<NodeToTypeCheck, State, PartialResult> =
use _ = UseDiagnosticsLogger logger
let checkForErrors2 () = priorErrors || (logger.ErrorCount > 0)
let tcSink = TcResultsSink.NoSink

let (Finisher(finisher = finisher)) =
CheckOneInputWithCallback
node
(checkForErrors2, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, currentTcState, input, false)
cancellable {
use _ = UseDiagnosticsLogger logger
let checkForErrors2 () = priorErrors || (logger.ErrorCount > 0)
let tcSink = TcResultsSink.NoSink

return!
CheckOneInputWithCallback
node
(checkForErrors2, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, currentTcState, input, false)
}
|> Cancellable.runWithoutCancellation

Finisher(
Expand Down
6 changes: 3 additions & 3 deletions src/Compiler/Driver/fsc.fs
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ let main1
// Now install a delayed logger to hold all errors from flags until after all flags have been parsed (for example, --vserrors)
let delayForFlagsLogger = CapturingDiagnosticsLogger("DelayFlagsLogger")

let _holder = UseDiagnosticsLogger delayForFlagsLogger
SetThreadDiagnosticsLoggerNoUnwind delayForFlagsLogger

// Share intern'd strings across all lexing/parsing
let lexResourceManager = Lexhelp.LexResourceManager()
Expand Down Expand Up @@ -596,7 +596,7 @@ let main1
let diagnosticsLogger = diagnosticsLoggerProvider.CreateLogger(tcConfigB, exiter)

// Install the global error logger and never remove it. This logger does have all command-line flags considered.
let _holder = UseDiagnosticsLogger diagnosticsLogger
SetThreadDiagnosticsLoggerNoUnwind diagnosticsLogger

// Forward all errors from flags
delayForFlagsLogger.CommitDelayedDiagnostics diagnosticsLogger
Expand Down Expand Up @@ -749,7 +749,7 @@ let main2

GetDiagnosticsLoggerFilteringByScopedPragmas(true, scopedPragmas, tcConfig.diagnosticsOptions, oldLogger)

let _holder = UseDiagnosticsLogger diagnosticsLogger
SetThreadDiagnosticsLoggerNoUnwind diagnosticsLogger

// Try to find an AssemblyVersion attribute
let assemVerFromAttrib =
Expand Down