Skip to content

Commit 56933a4

Browse files
T-GroCopilot
andcommitted
Merge main: pick up #19851, #19892, #19897 etc
Branch was behind main again. Auto-merge resolved IlxGen.fs, Optimizer.fs, TypedTreeOps.ExprConstruction.fs, and one baseline cleanly. Verified post-merge: SEQ=PAR FCS.dll byte-identical, sin/abs quotation passes. (#19928) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2 parents 4ce0c0e + 9bc13b3 commit 56933a4

107 files changed

Lines changed: 1858 additions & 274 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/release-notes/.FSharp.Compiler.Service/11.0.100.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
### Fixed
22

33
* Stabilize codegen order under `--parallelcompilation+` so `--deterministic` Release builds produce byte-identical IL across rebuilds: optimizer Val iteration, IlxGen type/method/field/event emit order, anonymous-record extra-binding drain, and `FileIndex` assignment now follow source position rather than thread-scheduling order. Compiler-generated names are also bucketed by the file being optimized/emitted (per-file naming scope) rather than by inlined source location, so parallel optimization and code generation no longer race on a shared name counter. ([Issue #19732](https://github.com/dotnet/fsharp/issues/19732), [PR #19810](https://github.com/dotnet/fsharp/pull/19810))
4+
* Fix internal error (FS0193) when calling an indexed property setter with a named argument that matches an indexer parameter. ([Issue #16034](https://github.com/dotnet/fsharp/issues/16034), [PR #19851](https://github.com/dotnet/fsharp/pull/19851))
45
* Fix missing FS1182 ("unused binding") warning for unused `let` function bindings inside class types. ([Issue #13849](https://github.com/dotnet/fsharp/issues/13849), [PR #19805](https://github.com/dotnet/fsharp/pull/19805))
56
* Fix inner mutually-recursive `let rec ... and ...` functions under `--realsig+` not being lifted to top-level static methods (TLR), causing `FSharpFunc` closure allocations and loss of `tail.` opcodes — the large struct-mutual-recursion perf regression reported in [Issue #17607](https://github.com/dotnet/fsharp/issues/17607). ([PR #19882](https://github.com/dotnet/fsharp/pull/19882))
67
* Fix `TypeLoadException` ("Specialize tried to implicitly override a method with weaker type parameter constraints") and the related CLR crash with constrained inline calls by stripping constraints from closure-class typars in `EraseClosures.convIlxClosureDef`. ([Issue #14492](https://github.com/dotnet/fsharp/issues/14492), [Issue #19075](https://github.com/dotnet/fsharp/issues/19075), [PR #19882](https://github.com/dotnet/fsharp/pull/19882))
@@ -89,8 +90,10 @@
8990

9091
* Added warning FS3884 when a function or delegate value is used as an interpolated string argument. ([PR #19289](https://github.com/dotnet/fsharp/pull/19289))
9192
* Symbols: add ObsoleteDiagnosticInfo ([PR #19359](https://github.com/dotnet/fsharp/pull/19359))
93+
* FCS: add FSharpCheckFileResults.HasErrors ([PR #19892](https://github.com/dotnet/fsharp/pull/19892))
9294
* Add `#version;;` directive to F# Interactive to display version and environment information. ([Issue #13307](https://github.com/dotnet/fsharp/issues/13307), [PR #19332](https://github.com/dotnet/fsharp/pull/19332))
9395
* Debug: rework for expressions stepping ([PR #19894](https://github.com/dotnet/fsharp/pull/19894))
96+
* Debug: rework conditional erasure, fix stepping over literals ([PR #19897](https://github.com/dotnet/fsharp/pull/19897))
9497

9598
### Changed
9699

docs/release-notes/.VisualStudio/18.vNext.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414
### Changed
1515

1616
* Rename "inline hints" to "inlay hints" in VS options for consistency with industry terminology. ([PR #19318](https://github.com/dotnet/fsharp/pull/19318))
17+
* Unused analyzers: disable in VS when file has errors ([PR #19892](https://github.com/dotnet/fsharp/pull/19892))

src/Compiler/Checking/CheckIncrementalClasses.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,7 @@ let MakeCtorForIncrClassConstructionPhase2C(
802802
// Extend the range of any immediate debug point to include the 'do'
803803
let doExpr =
804804
match doExpr with
805-
| Expr.DebugPoint(_, innerExpr) -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes mFull, innerExpr)
805+
| Expr.DebugPoint(_, innerExpr) -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFull), innerExpr)
806806
| e -> e
807807
let binder = (fun e -> mkSequential mFull doExpr e)
808808
let isPriorToSuperInit = false
@@ -940,7 +940,7 @@ let MakeCtorForIncrClassConstructionPhase2C(
940940
// Add the debug point
941941
let inheritsExpr =
942942
if inheritsIsVisible then
943-
Expr.DebugPoint(DebugPointAtLeafExpr.Yes inheritsExpr.Range, inheritsExpr)
943+
Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, inheritsExpr.Range), inheritsExpr)
944944
else
945945
inheritsExpr
946946

src/Compiler/Checking/Expressions/CheckComputationExpressions.fs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ let inline arbKeySelectors m =
8181
// Flag that a debug point should get emitted prior to both the evaluation of 'rhsExpr' and the call to Using
8282
let inline addBindDebugPoint spBind e =
8383
match spBind with
84-
| DebugPointAtBinding.Yes m -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes m, false, e)
84+
| DebugPointAtBinding.Yes m -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, m), false, e)
8585
| _ -> e
8686

8787
let inline mkSynDelay2 (e: SynExpr) = mkSynDelay (e.Range.MakeSynthetic()) e
@@ -1345,7 +1345,7 @@ let rec TryTranslateComputationExpression
13451345

13461346
let forCall =
13471347
match spFor with
1348-
| DebugPointAtFor.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mFor, false, forCall)
1348+
| DebugPointAtFor.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFor), false, forCall)
13491349
| DebugPointAtFor.No -> forCall
13501350

13511351
translatedCtxt forCall)
@@ -1389,7 +1389,7 @@ let rec TryTranslateComputationExpression
13891389
// 'while' is hit just before each time the guard is called
13901390
let guardExpr =
13911391
match spWhile with
1392-
| DebugPointAtWhile.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mWhile, false, guardExpr)
1392+
| DebugPointAtWhile.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mWhile), false, guardExpr)
13931393
| DebugPointAtWhile.No -> guardExpr
13941394

13951395
Some(
@@ -1419,7 +1419,7 @@ let rec TryTranslateComputationExpression
14191419
// 'while!' is hit just before each time the guard is called
14201420
let guardExpr =
14211421
match spWhile with
1422-
| DebugPointAtWhile.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mWhile, false, guardExpr)
1422+
| DebugPointAtWhile.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mWhile), false, guardExpr)
14231423
| DebugPointAtWhile.No -> guardExpr
14241424

14251425
let rewrittenWhileExpr =
@@ -1557,7 +1557,7 @@ let rec TryTranslateComputationExpression
15571557
// Put down a debug point for the 'finally'
15581558
let unwindExpr2 =
15591559
match spFinally with
1560-
| DebugPointAtFinally.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mFinally, true, unwindExpr)
1560+
| DebugPointAtFinally.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFinally), true, unwindExpr)
15611561
| DebugPointAtFinally.No -> unwindExpr
15621562

15631563
if ceenv.isQuery then
@@ -1571,7 +1571,7 @@ let rec TryTranslateComputationExpression
15711571

15721572
let innerExpr =
15731573
match spTry with
1574-
| DebugPointAtTry.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mTry, true, innerExpr)
1574+
| DebugPointAtTry.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mTry), true, innerExpr)
15751575
| _ -> innerExpr
15761576

15771577
Some(
@@ -2308,7 +2308,7 @@ let rec TryTranslateComputationExpression
23082308

23092309
let innerExpr =
23102310
match spTry with
2311-
| DebugPointAtTry.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mTry, true, innerExpr)
2311+
| DebugPointAtTry.Yes _ -> SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mTry), true, innerExpr)
23122312
| _ -> innerExpr
23132313

23142314
let callExpr =
@@ -2345,7 +2345,7 @@ let rec TryTranslateComputationExpression
23452345
if IsControlFlowExpression synYieldExpr then
23462346
yieldFromCall
23472347
else
2348-
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mFull, false, yieldFromCall)
2348+
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFull), false, yieldFromCall)
23492349

23502350
Some(translatedCtxt yieldFromCall)
23512351

@@ -2374,7 +2374,7 @@ let rec TryTranslateComputationExpression
23742374
if IsControlFlowExpression synReturnExpr then
23752375
returnFromCall
23762376
else
2377-
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mFull, false, returnFromCall)
2377+
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFull), false, returnFromCall)
23782378

23792379
Some(translatedCtxt returnFromCall)
23802380

@@ -2393,7 +2393,7 @@ let rec TryTranslateComputationExpression
23932393
if IsControlFlowExpression synYieldOrReturnExpr then
23942394
yieldOrReturnCall
23952395
else
2396-
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes mFull, false, yieldOrReturnCall)
2396+
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFull), false, yieldOrReturnCall)
23972397

23982398
Some(translatedCtxt yieldOrReturnCall)
23992399

@@ -2704,7 +2704,9 @@ and TranslateComputationExpressionBind
27042704
and convertSimpleReturnToExpr (ceenv: ComputationExpressionContext<'a>) comp varSpace innerComp =
27052705
match innerComp with
27062706
| SynExpr.YieldOrReturn((false, _), returnExpr, m, _) ->
2707-
let returnExpr = SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes m, false, returnExpr)
2707+
let returnExpr =
2708+
SynExpr.DebugPoint(DebugPointAtLeafExpr.Yes(false, m), false, returnExpr)
2709+
27082710
Some(returnExpr, None)
27092711

27102712
| SynExpr.Match(spMatch, expr, clauses, m, trivia) ->

src/Compiler/Checking/Expressions/CheckExpressions.fs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3103,7 +3103,7 @@ let BuildPossiblyConditionalMethodCall (cenv: cenv) env isMutable m isProp minfo
31033103
if shouldEraseCall then
31043104
// Methods marked with 'Conditional' must return 'unit'
31053105
UnifyTypes cenv env m g.unit_ty (minfo.GetFSharpReturnType(cenv.amap, m, minst))
3106-
mkUnit g m, g.unit_ty
3106+
Expr.DebugPoint(DebugPointAtLeafExpr.Yes(isHidden = true, range = m), mkUnit g m), g.unit_ty
31073107
else
31083108
#if !NO_TYPEPROVIDERS
31093109
match minfo with
@@ -5903,6 +5903,7 @@ and TcNonControlFlowExpr (env: TcEnv) f =
59035903
let res2 =
59045904
match res with
59055905
| IfThenElseExpr _ -> res
5906+
| Expr.DebugPoint(DebugPointAtLeafExpr.Yes(isHidden = true), _) -> res
59065907
| _ -> mkDebugPoint res.Range res
59075908
res2, tpenv
59085909
else
@@ -10578,7 +10579,11 @@ and TcMethodApplication
1057810579

1057910580
TcAdhocChecksOnLibraryMethods cenv env isInstance finalCalledMeth finalCalledMethInfo objArgs mMethExpr mItem
1058010581

10582+
// Indexer setters: when index args are named, the remaining unnamed args'
10583+
// position values won't form a prefix (the 'value' arg has a non-zero j).
10584+
// Without named args the check passes naturally, so blanket skip is safe.
1058110585
if not finalCalledMeth.IsIndexParamArraySetter &&
10586+
not finalCalledMeth.IsIndexerSetter &&
1058210587
(finalCalledMeth.ArgSets |> List.existsi (fun i argSet -> argSet.UnnamedCalledArgs |> List.existsi (fun j ca -> ca.Position <> (i, j)))) then
1058310588
errorR(Deprecated(FSComp.SR.tcUnnamedArgumentsDoNotFormPrefix(), mMethExpr))
1058410589

src/Compiler/Checking/MethodCalls.fs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -658,19 +658,21 @@ type CalledMeth<'T>
658658

659659
let nUnnamedCallerArgs = unnamedCallerArgs.Length
660660
let nUnnamedCalledArgs = unnamedCalledArgs.Length
661+
// x.Item(i, value = v) — named arg removes 'i' from unnamed, leaving < 2 unnamed called args.
662+
let useIndexerSetterShape = isIndexerSetter && nUnnamedCalledArgs >= 2
661663
let supportsParamArgs =
662664
allowParamArgs &&
663665
nUnnamedCalledArgs >= 1 &&
664666
nUnnamedCallerArgs >= nUnnamedCalledArgs-1 &&
665667
let possibleParamArg =
666-
if isIndexerSetter then
668+
if useIndexerSetterShape then
667669
unnamedCalledArgs[nUnnamedCalledArgs-2]
668670
else
669671
unnamedCalledArgs[nUnnamedCalledArgs-1]
670672
possibleParamArg.IsParamArray && isArray1DTy g possibleParamArg.CalledArgumentType
671673

672674
if supportsParamArgs then
673-
if isIndexerSetter then
675+
if useIndexerSetterShape then
674676
// Note, for an indexer setter nUnnamedCalledArgs will be at least two, and normally exactly 2
675677
let unnamedCalledArgs2 =
676678
unnamedCalledArgs[0..unnamedCalledArgs.Length-3] @
@@ -808,6 +810,8 @@ type CalledMeth<'T>
808810

809811
member x.IsIndexParamArraySetter = isIndexerSetter && x.UsesParamArrayConversion
810812

813+
member x.IsIndexerSetter = isIndexerSetter
814+
811815
member x.ParamArrayCalledArgOpt = x.ArgSets |> List.tryPick (fun argSet -> argSet.ParamArrayCalledArgOpt)
812816

813817
member x.ParamArrayCallerArgs = x.ArgSets |> List.tryPick (fun argSet -> if Option.isSome argSet.ParamArrayCalledArgOpt then Some argSet.ParamArrayCallerArgs else None )

src/Compiler/Checking/MethodCalls.fsi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,9 @@ type CalledMeth<'T> =
271271

272272
member IsIndexParamArraySetter: bool
273273

274+
/// True when this method call is for a property indexer setter (set_Item or named indexer set).
275+
member IsIndexerSetter: bool
276+
274277
/// The method we're attempting to call
275278
member Method: MethInfo
276279

src/Compiler/CodeGen/IlxGen.fs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3356,8 +3356,8 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv expr (sequel: sequel) =
33563356
| LinearOpExpr _
33573357
| Expr.Match _ -> GenLinearExpr cenv cgbuf eenv expr sequel false id |> ignore<FakeUnit>
33583358

3359-
| Expr.DebugPoint(DebugPointAtLeafExpr.Yes m, innerExpr) ->
3360-
if Range.equals m range0 then
3359+
| Expr.DebugPoint(DebugPointAtLeafExpr.Yes(isHidden, m), innerExpr) ->
3360+
if isHidden then
33613361
cgbuf.EmitStartOfHiddenCode()
33623362
else
33633363
CG.EmitDebugPoint cgbuf m
@@ -3921,8 +3921,8 @@ and GenLinearExpr cenv cgbuf eenv expr sequel preSteps (contf: FakeUnit -> FakeU
39213921
GenSequel cenv eenv.cloc cgbuf sequelAfterJoin
39223922
Fake))
39233923

3924-
| Expr.DebugPoint(DebugPointAtLeafExpr.Yes m, innerExpr) ->
3925-
if Range.equals m range0 then
3924+
| Expr.DebugPoint(DebugPointAtLeafExpr.Yes(isHidden, m), innerExpr) ->
3925+
if isHidden then
39263926
cgbuf.EmitStartOfHiddenCode()
39273927
else
39283928
CG.EmitDebugPoint cgbuf m
@@ -10860,10 +10860,21 @@ and CodeGenInitMethod cenv (cgbuf: CodeGenBuffer) eenv tref (codeGenInitFunc: Co
1086010860
let _, body =
1086110861
CodeGenMethod cenv cgbuf.mgbuf ([], eenv.staticInitializationName, eenv, 0, None, codeGenInitFunc, m)
1086210862

10863-
if CheckCodeDoesSomething body.Code then
10863+
let codeDoesSomething = CheckCodeDoesSomething body.Code
10864+
10865+
// Keep the init method if it carries a visible debug point, so steppable bindings like 'let i = ()' survive.
10866+
let hasVisibleDebugPoint =
10867+
not cenv.options.localOptimizationsEnabled
10868+
&& body.Code.Instrs
10869+
|> Array.exists (function
10870+
| I_seqpoint sp -> sp.Line <> FeeFee cenv
10871+
| _ -> false)
10872+
10873+
if codeDoesSomething || hasVisibleDebugPoint then
1086410874
// We are here because the module we just grabbed has an interesting static initializer
1086510875
let feefee, seqpt =
10866-
if body.Code.Instrs.Length > 0 then
10876+
// Without real init code, the .cctor's FeeFee marker would just add a stray hidden sequence point.
10877+
if codeDoesSomething && body.Code.Instrs.Length > 0 then
1086710878
match body.Code.Instrs[0] with
1086810879
| I_seqpoint sp as i -> [ FeeFeeInstr cenv sp.Document ], [ i ]
1086910880
| _ -> [], []

src/Compiler/Optimize/LowerComputedCollections.fs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ let LowerComputedListOrArraySeqExpr tcVal g amap m collectorTy overallSeqExpr =
114114
let cleanupE = BuildDisposableCleanup tcVal g infoReader m enumv
115115

116116
// A debug point should get emitted prior to both the evaluation of 'inp' and the call to GetEnumerator
117-
let addForDebugPoint e = Expr.DebugPoint(DebugPointAtLeafExpr.Yes mFor, e)
117+
let addForDebugPoint e = Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFor), e)
118118

119119
let spInAsWhile = match spIn with DebugPointAtInOrTo.Yes m -> DebugPointAtWhile.Yes m | DebugPointAtInOrTo.No -> DebugPointAtWhile.No
120120

@@ -289,7 +289,7 @@ module List =
289289
match body with
290290
| Expr.Let(TBind(v, rhs, DebugPointAtBinding.Yes spBind), innerBody, m, flags) ->
291291
let bodyForAdd = Expr.Let(TBind(v, rhs, DebugPointAtBinding.NoneAtInvisible), innerBody, m, flags)
292-
Expr.DebugPoint(DebugPointAtLeafExpr.Yes spBind, mkCallCollectorAdd tcVal g reader mBody collector bodyForAdd)
292+
Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, spBind), mkCallCollectorAdd tcVal g reader mBody collector bodyForAdd)
293293
| _ ->
294294
mkCallCollectorAdd tcVal g reader mIn collector body
295295

@@ -342,7 +342,7 @@ module List =
342342
match body with
343343
| Some (loopVal, body) ->
344344
mkInvisibleLet m loopVal loopVar
345-
(Expr.DebugPoint (DebugPointAtLeafExpr.Yes mFor, mkCallCollectorAdd tcVal g reader mBody collector body))
345+
(Expr.DebugPoint (DebugPointAtLeafExpr.Yes(false, mFor), mkCallCollectorAdd tcVal g reader mBody collector body))
346346
| None ->
347347
mkCallCollectorAdd tcVal g reader mBody collector loopVar)
348348

@@ -447,7 +447,7 @@ module Array =
447447
)
448448

449449
// Add a debug point at the `for`, before anything gets evaluated.
450-
Expr.DebugPoint (DebugPointAtLeafExpr.Yes mFor, mapping)
450+
Expr.DebugPoint (DebugPointAtLeafExpr.Yes(false, mFor), mapping)
451451
)
452452

453453
/// Whether to check for overflow when converting a value to a native int.
@@ -508,7 +508,7 @@ module Array =
508508

509509
match body with
510510
| Some (loopVal, body) ->
511-
mkInvisibleLet mBody loopVal loopVar (Expr.DebugPoint (DebugPointAtLeafExpr.Yes mFor, mkStore body))
511+
mkInvisibleLet mBody loopVal loopVar (Expr.DebugPoint (DebugPointAtLeafExpr.Yes(false, mFor), mkStore body))
512512
| None ->
513513
mkStore loopVar)
514514

src/Compiler/Optimize/LowerSequences.fs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ let ConvertSequenceExprToObject g amap overallExpr =
118118
let (TBind(v, e, sp)) = bind
119119
let addDebugPoint e =
120120
match sp with
121-
| DebugPointAtBinding.Yes m -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes m, e)
121+
| DebugPointAtBinding.Yes m -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, m), e)
122122
| _ -> e
123123
let vref = mkLocalValRef v
124124
{ resBody with
@@ -262,7 +262,7 @@ let ConvertSequenceExprToObject g amap overallExpr =
262262
// body ]]
263263

264264
// A debug point should get emitted prior to both the evaluation of 'inp' and the call to GetEnumerator
265-
let addForDebugPoint e = Expr.DebugPoint(DebugPointAtLeafExpr.Yes mFor, e)
265+
let addForDebugPoint e = Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, mFor), e)
266266

267267
// The 'in' debug point is put back into the TypedTree at the right place for SeqWhile
268268
let mIn = match spIn with DebugPointAtInOrTo.Yes m -> m.NoteSourceConstruct(NotedSourceConstruct.While) | DebugPointAtInOrTo.No -> mIn
@@ -293,11 +293,11 @@ let ConvertSequenceExprToObject g amap overallExpr =
293293
let asyncVars = unionFreeVars res1.asyncVars (freeInExpr CollectLocals compensation)
294294
let addTryDebugPoint e =
295295
match spTry with
296-
| DebugPointAtTry.Yes m -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes m, e)
296+
| DebugPointAtTry.Yes m -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, m), e)
297297
| _ -> e
298298
let addFinallyDebugPoint e =
299299
match spFinally with
300-
| DebugPointAtFinally.Yes m -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes m, e)
300+
| DebugPointAtFinally.Yes m -> Expr.DebugPoint(DebugPointAtLeafExpr.Yes(false, m), e)
301301
| _ -> e
302302
Some { phase2 = (fun (pcVar, _currv, _, pcMap as ctxt) ->
303303
let generate1, dispose1, checkDispose1 = res1.phase2 ctxt

0 commit comments

Comments
 (0)