Skip to content

Commit 7d842a5

Browse files
auduchinokdsymeT-Grovzarytovskii
authored
Use synthetic ranges when rewriting range expressions (dotnet#13958)
Co-authored-by: Don Syme <[email protected]> Co-authored-by: Tomas Grosup <[email protected]> Co-authored-by: Don Syme <[email protected]> Co-authored-by: Vlad Zarytovskii <[email protected]>
1 parent 2178ab3 commit 7d842a5

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

src/Compiler/Checking/CheckComputationExpressions.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,11 @@ let (|JoinRelation|_|) cenv env (expr: SynExpr) =
8181

8282
| _ -> None
8383

84-
let elimFastIntegerForLoop (spFor, spTo, id, start, dir, finish, innerExpr, m) =
84+
let elimFastIntegerForLoop (spFor, spTo, id, start: SynExpr, dir, finish: SynExpr, innerExpr, m: range) =
85+
let mOp = (unionRanges start.Range finish.Range).MakeSynthetic()
8586
let pseudoEnumExpr =
86-
if dir then mkSynInfix m start ".." finish
87-
else mkSynTrifix m ".. .." start (SynExpr.Const (SynConst.Int32 -1, start.Range)) finish
87+
if dir then mkSynInfix mOp start ".." finish
88+
else mkSynTrifix mOp ".. .." start (SynExpr.Const (SynConst.Int32 -1, mOp)) finish
8889
SynExpr.ForEach (spFor, spTo, SeqExprOnly false, true, mkSynPatVar None id, pseudoEnumExpr, innerExpr, m)
8990

9091
/// Check if a computation or sequence expression is syntactically free of 'yield' (though not yield!)

src/Compiler/Checking/CheckExpressions.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6125,10 +6125,12 @@ and RewriteRangeExpr synExpr =
61256125
match synExpr with
61266126
// a..b..c (parsed as (a..b)..c )
61276127
| SynExpr.IndexRange(Some (SynExpr.IndexRange(Some synExpr1, _, Some synStepExpr, _, _, _)), _, Some synExpr2, _m1, _m2, mWhole) ->
6128+
let mWhole = mWhole.MakeSynthetic()
61286129
Some (mkSynTrifix mWhole ".. .." synExpr1 synStepExpr synExpr2)
61296130
// a..b
61306131
| SynExpr.IndexRange (Some synExpr1, mOperator, Some synExpr2, _m1, _m2, mWhole) ->
61316132
let otherExpr =
6133+
let mWhole = mWhole.MakeSynthetic()
61326134
match mkSynInfix mOperator synExpr1 ".." synExpr2 with
61336135
| SynExpr.App (a, b, c, d, _) -> SynExpr.App (a, b, c, d, mWhole)
61346136
| _ -> failwith "impossible"

0 commit comments

Comments
 (0)