未验证 提交 2b391ff2 编写于 作者: V Vlad Zarytovskii 提交者: GitHub

Add name and depth fo the stackguard threads (#13859)

Co-authored-by: NDon Syme <dsyme@users.noreply.github.com>
上级 9b9c0fdc
......@@ -1037,6 +1037,6 @@ let rec pushShadowedLocals (stackGuard: StackGuard) (localsToPush: PdbLocalVar[]
// adding the text " (shadowed)" to the names of those with name conflicts.
let unshadowScopes rootScope =
// Avoid stack overflow when writing linearly nested scopes
let stackGuard = StackGuard(100)
let stackGuard = StackGuard(100, "ILPdbWriter.unshadowScopes")
let result, _ = pushShadowedLocals stackGuard [||] rootScope
result
......@@ -341,7 +341,7 @@ type TcFileState =
{ g = g
amap = amap
recUses = ValMultiMap<_>.Empty
stackGuard = StackGuard(TcStackGuardDepth)
stackGuard = StackGuard(TcStackGuardDepth, "TcFileState")
createsGeneratedProvidedTypes = false
thisCcu = thisCcu
isScript = isScript
......
......@@ -527,7 +527,7 @@ type IncrClassReprInfo =
PostTransform = (fun _ -> None)
PreInterceptBinding = None
RewriteQuotations = true
StackGuard = StackGuard(TcClassRewriteStackGuardDepth) } expr
StackGuard = StackGuard(TcClassRewriteStackGuardDepth, "FixupIncrClassExprPhase2C") } expr
type IncrClassConstructionBindingsPhase2C =
| Phase2CBindings of IncrClassBindingGroup list
......
......@@ -285,7 +285,7 @@ let UnsolvedTyparsOfModuleDef g amap denv mdef extraAttribs =
amap=amap
denv=denv
unsolved = []
stackGuard = StackGuard(FindUnsolvedStackGuardDepth) }
stackGuard = StackGuard(FindUnsolvedStackGuardDepth, "UnsolvedTyparsOfModuleDef") }
accModuleOrNamespaceDef cenv NoEnv mdef
accAttribs cenv NoEnv extraAttribs
List.rev cenv.unsolved
......
......@@ -2615,7 +2615,7 @@ let CheckImplFile (g, amap, reportErrors, infoReader, internalsVisibleToPaths, v
reportErrors = reportErrors
boundVals = Dictionary<_, _>(100, HashIdentity.Structural)
limitVals = Dictionary<_, _>(100, HashIdentity.Structural)
stackGuard = StackGuard(PostInferenceChecksStackGuardDepth)
stackGuard = StackGuard(PostInferenceChecksStackGuardDepth, "CheckImplFile")
potentialUnboundUsesOfVals = Map.empty
anonRecdTypes = StampMap.Empty
usesQuotations = false
......
......@@ -11863,7 +11863,7 @@ type IlxAssemblyGenerator(amap: ImportMap, tcGlobals: TcGlobals, tcVal: Constrai
intraAssemblyInfo = intraAssemblyInfo
optionsOpt = None
optimizeDuringCodeGen = (fun _flag expr -> expr)
stackGuard = StackGuard(IlxGenStackGuardDepth)
stackGuard = StackGuard(IlxGenStackGuardDepth, "IlxAssemblyGenerator")
}
/// Register a set of referenced assemblies with the ILX code generator
......
......@@ -813,7 +813,7 @@ let internal languageFeatureNotSupportedInLibraryError (langFeature: LanguageFea
error (Error(FSComp.SR.chkFeatureNotSupportedInLibrary (featureStr, suggestedVersionStr), m))
/// Guard against depth of expression nesting, by moving to new stack when a maximum depth is reached
type StackGuard(maxDepth: int) =
type StackGuard(maxDepth: int, name: string) =
let mutable depth = 1
......@@ -828,7 +828,7 @@ type StackGuard(maxDepth: int) =
async {
do! Async.SwitchToNewThread()
Thread.CurrentThread.Name <- "F# Extra Compilation Thread"
Thread.CurrentThread.Name <- $"F# Extra Compilation Thread for {name} (depth {depth})"
use _scope = new CompilationGlobalsScope(diagnosticsLogger, buildPhase)
return f ()
}
......
......@@ -389,7 +389,7 @@ val tryLanguageFeatureErrorOption:
val languageFeatureNotSupportedInLibraryError: langFeature: LanguageFeature -> m: range -> 'T
type StackGuard =
new: maxDepth: int -> StackGuard
new: maxDepth: int * name: string -> StackGuard
/// Execute the new function, on a new thread if necessary
member Guard: f: (unit -> 'T) -> 'T
......
......@@ -864,7 +864,7 @@ let passImplFile penv assembly =
PreInterceptBinding = None
PostTransform = postTransformExpr penv
RewriteQuotations = false
StackGuard = StackGuard(DetupleRewriteStackGuardDepth) }
StackGuard = StackGuard(DetupleRewriteStackGuardDepth, "RewriteImplFile") }
assembly |> RewriteImplFile rwenv
//-------------------------------------------------------------------------
......
......@@ -1366,7 +1366,7 @@ let MakeTopLevelRepresentationDecisions ccu g expr =
recShortCallS = recShortCallS
envPackM = envPackM
fHatM = fHatM
stackGuard = StackGuard(InnerLambdasToTopLevelFunctionsStackGuardDepth) }
stackGuard = StackGuard(InnerLambdasToTopLevelFunctionsStackGuardDepth, "InnerLambdasToTopLevelFunctionsStackGuardDepth") }
let z = Pass4_RewriteAssembly.rewriteState0
Pass4_RewriteAssembly.TransImplFile penv z expr
......
......@@ -49,5 +49,5 @@ let LowerImplFile g assembly =
PreInterceptBinding=None
PostTransform= (fun _ -> None)
RewriteQuotations=false
StackGuard = StackGuard(LowerCallsRewriteStackGuardDepth) }
StackGuard = StackGuard(LowerCallsRewriteStackGuardDepth, "LowerCallsRewriteStackGuardDepth") }
assembly |> RewriteImplFile rwenv
......@@ -196,6 +196,6 @@ let TransformImplFile g amap implFile =
PreInterceptBinding = Some(TransformBinding g heapValMap)
PostTransform = (fun _ -> None)
RewriteQuotations = true
StackGuard = StackGuard(AutoboxRewriteStackGuardDepth) }
StackGuard = StackGuard(AutoboxRewriteStackGuardDepth, "AutoboxRewriteStackGuardDepth") }
......@@ -358,7 +358,7 @@ type LowerStateMachine(g: TcGlobals) =
PostTransform = (fun _ -> None)
PreInterceptBinding = None
RewriteQuotations=true
StackGuard = StackGuard(LowerStateMachineStackGuardDepth) }
StackGuard = StackGuard(LowerStateMachineStackGuardDepth, "LowerStateMachineStackGuardDepth") }
let ConvertStateMachineLeafExpression (env: env) expr =
if sm_verbose then printfn "ConvertStateMachineLeafExpression for %A..." expr
......
......@@ -4325,7 +4325,7 @@ let OptimizeImplFile (settings, ccu, tcGlobals, tcVal, importMap, optEnv, isIncr
localInternalVals=Dictionary<Stamp, ValInfo>(10000)
emitTailcalls=emitTailcalls
casApplied=Dictionary<Stamp, bool>()
stackGuard = StackGuard(OptimizerStackGuardDepth)
stackGuard = StackGuard(OptimizerStackGuardDepth, "OptimizerStackGuardDepth")
}
let env, _, _, _ as results = OptimizeImplFileInternal cenv optEnv isIncrementalFragment fsiMultiAssemblyEmit hidden mimpls
......
......@@ -2209,7 +2209,7 @@ let CollectTypars = CollectTyparsAndLocals
let CollectLocals = CollectTyparsAndLocals
let CollectTyparsAndLocalsWithStackGuard() =
let stackGuard = StackGuard(AccFreeVarsStackGuardDepth)
let stackGuard = StackGuard(AccFreeVarsStackGuardDepth, "AccFreeVarsStackGuardDepth")
CollectTyparsAndLocalsImpl (Some stackGuard)
let CollectLocalsWithStackGuard() = CollectTyparsAndLocalsWithStackGuard()
......@@ -6248,31 +6248,31 @@ and remapImplFile ctxt compgen tmenv implFile =
// Entry points
let remapAttrib g tmenv attrib =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapAttribImpl ctxt tmenv attrib
let remapExpr g (compgen: ValCopyFlag) (tmenv: Remap) expr =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapExprImpl ctxt compgen tmenv expr
let remapPossibleForallTy g tmenv ty =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapPossibleForallTyImpl ctxt tmenv ty
let copyModuleOrNamespaceType g compgen mtyp =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
copyAndRemapAndBindModTy ctxt compgen Remap.Empty mtyp |> fst
let copyExpr g compgen e =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapExprImpl ctxt compgen Remap.Empty e
let copyImplFile g compgen e =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapImplFile ctxt compgen Remap.Empty e |> fst
let instExpr g tpinst e =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapExprImpl ctxt CloneAll (mkInstRemap tpinst) e
//--------------------------------------------------------------------------
......@@ -7162,7 +7162,7 @@ let ExprFolder0 =
type ExprFolders<'State> (folders: ExprFolder<'State>) =
let mutable exprFClosure = Unchecked.defaultof<'State -> Expr -> 'State> // prevent reallocation of closure
let mutable exprNoInterceptFClosure = Unchecked.defaultof<'State -> Expr -> 'State> // prevent reallocation of closure
let stackGuard = StackGuard(FoldExprStackGuardDepth)
let stackGuard = StackGuard(FoldExprStackGuardDepth, "FoldExprStackGuardDepth")
let rec exprsF z xs =
List.fold exprFClosure z xs
......@@ -9493,7 +9493,7 @@ and remapValToNonLocal ctxt tmenv inp =
inp |> Construct.NewModifiedVal (remapValData ctxt tmenv)
let ApplyExportRemappingToEntity g tmenv x =
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth) }
let ctxt = { g = g; stackGuard = StackGuard(RemapExprStackGuardDepth, "RemapExprStackGuardDepth") }
remapTyconToNonLocal ctxt tmenv x
(* Which constraints actually get compiled to .NET constraints? *)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册