diff --git a/src/Compiler/Checking/CheckComputationExpressions.fs b/src/Compiler/Checking/CheckComputationExpressions.fs index 0f98af01961c245fee175a1126278f6fbba22eed..db8d307381f6bdaf644089ae979f5fb53d6a19f4 100644 --- a/src/Compiler/Checking/CheckComputationExpressions.fs +++ b/src/Compiler/Checking/CheckComputationExpressions.fs @@ -81,10 +81,11 @@ let (|JoinRelation|_|) cenv env (expr: SynExpr) = | _ -> None -let elimFastIntegerForLoop (spFor, spTo, id, start, dir, finish, innerExpr, m) = +let elimFastIntegerForLoop (spFor, spTo, id, start: SynExpr, dir, finish: SynExpr, innerExpr, m: range) = + let mOp = (unionRanges start.Range finish.Range).MakeSynthetic() let pseudoEnumExpr = - if dir then mkSynInfix m start ".." finish - else mkSynTrifix m ".. .." start (SynExpr.Const (SynConst.Int32 -1, start.Range)) finish + if dir then mkSynInfix mOp start ".." finish + else mkSynTrifix mOp ".. .." start (SynExpr.Const (SynConst.Int32 -1, mOp)) finish SynExpr.ForEach (spFor, spTo, SeqExprOnly false, true, mkSynPatVar None id, pseudoEnumExpr, innerExpr, m) /// Check if a computation or sequence expression is syntactically free of 'yield' (though not yield!) diff --git a/src/Compiler/Checking/CheckExpressions.fs b/src/Compiler/Checking/CheckExpressions.fs index 2174ee705a66df64d14c55f32e33113239b775ed..fa31c59164ba10c8ae3f5f9efa9cbab8db371dfc 100644 --- a/src/Compiler/Checking/CheckExpressions.fs +++ b/src/Compiler/Checking/CheckExpressions.fs @@ -6125,10 +6125,12 @@ and RewriteRangeExpr synExpr = match synExpr with // a..b..c (parsed as (a..b)..c ) | SynExpr.IndexRange(Some (SynExpr.IndexRange(Some synExpr1, _, Some synStepExpr, _, _, _)), _, Some synExpr2, _m1, _m2, mWhole) -> + let mWhole = mWhole.MakeSynthetic() Some (mkSynTrifix mWhole ".. .." synExpr1 synStepExpr synExpr2) // a..b | SynExpr.IndexRange (Some synExpr1, mOperator, Some synExpr2, _m1, _m2, mWhole) -> let otherExpr = + let mWhole = mWhole.MakeSynthetic() match mkSynInfix mOperator synExpr1 ".." synExpr2 with | SynExpr.App (a, b, c, d, _) -> SynExpr.App (a, b, c, d, mWhole) | _ -> failwith "impossible"