@@ -1574,6 +1574,19 @@ let rec TryTranslateComputationExpression
1574
1574
1575
1575
let containsRangeExpressions = containsRangeExpressions comp
1576
1576
1577
+ /// Report language feature error for each range expression in a sequence
1578
+ let reportRangeExpressionsNotSupported ceenv expr =
1579
+ let rec loop exprs =
1580
+ match exprs with
1581
+ | [] -> ()
1582
+ | SynExpr.IndexRange(_, _, _, _, _, m) :: exprs ->
1583
+ checkLanguageFeatureAndRecover ceenv.cenv.g.langVersion LanguageFeature.AllowMixedRangesAndValuesInSeqExpressions m
1584
+ loop exprs
1585
+ | SynExpr.Sequential(_, true , e1, e2, _, _) :: exprs -> loop ( e1 :: e2 :: exprs)
1586
+ | _ :: exprs -> loop exprs
1587
+
1588
+ loop [ expr ]
1589
+
1577
1590
if
1578
1591
ceenv.cenv.g.langVersion.SupportsFeature LanguageFeature.AllowMixedRangesAndValuesInSeqExpressions
1579
1592
&& containsRangeExpressions
@@ -1591,9 +1604,12 @@ let rec TryTranslateComputationExpression
1591
1604
// Transform each part to yield/yieldFrom
1592
1605
let e1Transformed = TransformExprToYieldOrYieldFrom ceenv e1
1593
1606
// Create a new sequential expression with the transformed parts
1594
- loop e2 ( cont << fun e2Transformed -> SynExpr.Sequential( sp, true , e1Transformed, e2Transformed, m, trivia))
1607
+ loop
1608
+ e2
1609
+ ( cont
1610
+ << fun e2Transformed -> SynExpr.Sequential( sp, true , e1Transformed, e2Transformed, m, trivia))
1595
1611
| e -> cont ( TransformExprToYieldOrYieldFrom ceenv e)
1596
-
1612
+
1597
1613
loop expr id
1598
1614
1599
1615
let transformed = transformSequenceWithRanges ceenv comp
@@ -2687,26 +2703,16 @@ and isSimpleExpr ceenv comp =
2687
2703
| SynExpr.DoBang _ -> false
2688
2704
| _ -> true
2689
2705
2690
- /// Report language feature error for each range expression in a sequence
2691
- and reportRangeExpressionsNotSupported ceenv expr =
2692
- match expr with
2693
- | SynExpr.IndexRange(_, _, _, _, _, m) ->
2694
- checkLanguageFeatureAndRecover ceenv.cenv.g.langVersion LanguageFeature.AllowMixedRangesAndValuesInSeqExpressions m
2695
- | SynExpr.Sequential(_, true , e1, e2, _, _) ->
2696
- reportRangeExpressionsNotSupported ceenv e1
2697
- reportRangeExpressionsNotSupported ceenv e2
2698
- | _ -> ()
2699
-
2700
2706
/// Transform a single expression to Yield or YieldFrom based on whether it's a range
2701
2707
and TransformExprToYieldOrYieldFrom ceenv expr =
2702
2708
let m = expr.Range
2703
-
2709
+
2704
2710
let ``yield ! `` rewrittenRange =
2705
2711
SynExpr.YieldOrReturnFrom(( true , false ), rewrittenRange, m, { YieldOrReturnFromKeyword = m })
2706
-
2712
+
2707
2713
let ``yield`` rewrittenRange =
2708
2714
SynExpr.YieldOrReturn(( true , false ), rewrittenRange, m, { YieldOrReturnKeyword = m })
2709
-
2715
+
2710
2716
// If there is no YieldFrom defined on the builder, use Yield;
2711
2717
// create a YieldOrReturn expression and let the CE machinery handle it.
2712
2718
match RewriteRangeExpr expr with
0 commit comments