@@ -1254,7 +1254,7 @@ module internal TupleCompilation =
12541254 Let( enumeratorVar,
12551255 GetEnumeratorCall enumerableVar2,
12561256 _ enumeratorBind,
1257- TryFinally( WhileLoopForCompiledForEachExpr( spInWhile, _, ( Let( elemVar, _, _ , bodyExpr) as elemLet), _), _))) when
1257+ TryFinally( WhileLoopForCompiledForEachExpr( spInWhile, _, ( Let( elemVar, _, spElem , bodyExpr) as elemLet), _), _))) when
12581258 // Apply correctness conditions to ensure this really is a compiled for-each expression.
12591259 valRefEq g ( mkLocalValRef enumerableVar) enumerableVar2
12601260 && enumerableVar.IsCompilerGenerated
@@ -1271,7 +1271,7 @@ module internal TupleCompilation =
12711271 let mIn = elemLet.Range
12721272
12731273 let mFor =
1274- match spFor with
1274+ match spElem with
12751275 | DebugPointAtBinding.Yes mFor -> mFor
12761276 | _ -> enumerableExpr.Range
12771277
@@ -1287,7 +1287,7 @@ module internal TupleCompilation =
12871287
12881288 let enumerableTy = tyOfExpr g enumerableExpr
12891289
1290- ValueSome( enumerableTy, enumerableExpr, elemVar, bodyExpr, ( mBody, spFor, spIn, mFor, mIn, spInWhile, mWholeExpr))
1290+ ValueSome( enumerableTy, enumerableExpr, elemVar, bodyExpr, ( mBody, spFor, spElem , spIn, mFor, mIn, spInWhile, mWholeExpr))
12911291 | _ -> ValueNone
12921292
12931293 [<return : Struct>]
@@ -2147,7 +2147,7 @@ module internal TupleCompilation =
21472147 match option, expr with
21482148 | _, CompiledInt32RangeForEachExpr g ( startExpr, ( 1 | - 1 as step), finishExpr, elemVar, bodyExpr, ranges) ->
21492149
2150- let _mBody , spFor , spIn , _mFor , _mIn , _spInWhile , mWholeExpr = ranges
2150+ let _mBody , spFor , _spElem , spIn , _mFor , _mIn , _spInWhile , mWholeExpr = ranges
21512151
21522152 let spFor =
21532153 match spFor with
@@ -2164,13 +2164,13 @@ module internal TupleCompilation =
21642164 ValueNone)
21652165 with
21662166 | ValueSome( rangeTy, ( start, step, finish)) ->
2167- let mBody , _spFor , _spIn , mFor , mIn , spInWhile , _mWhole = ranges
2167+ let mBody , _spFor , _spElem , _spIn , mFor , mIn , spInWhile , _mWhole = ranges
21682168
21692169 mkOptimizedRangeLoop g ( mBody, mFor, mIn, spInWhile) ( rangeTy, enumerableExpr) ( start, step, finish) ( fun _count mkLoop ->
21702170 mkLoop ( fun _idxVar loopVar -> mkInvisibleLet elemVar.Range elemVar loopVar bodyExpr))
21712171 | ValueNone ->
21722172
2173- let mBody , spFor , spIn , mFor , mIn , spInWhile , mWholeExpr = ranges
2173+ let mBody , spFor , spElem , spIn , mFor , mIn , spInWhile , mWholeExpr = ranges
21742174
21752175 if isStringTy g enumerableTy then
21762176 // type is string, optimize for expression as:
@@ -2189,7 +2189,7 @@ module internal TupleCompilation =
21892189 let finishExpr = mkDecr g mFor lengthExpr
21902190 // for compat reasons, loop item over string is sometimes object, not char
21912191 let loopItemExpr = mkCoerceIfNeeded g elemVar.Type g.char_ ty charExpr
2192- let bodyExpr = mkInvisibleLet mIn elemVar loopItemExpr bodyExpr
2192+ let bodyExpr = mkLet spElem mFor elemVar loopItemExpr bodyExpr
21932193
21942194 let forExpr =
21952195 mkFastForLoop g ( DebugPointAtFor.No, spIn, mWholeExpr, idxVar, startExpr, true , finishExpr, bodyExpr)
@@ -2223,18 +2223,16 @@ module internal TupleCompilation =
22232223 let tailOrNullExpr =
22242224 mkUnionCaseFieldGetUnprovenViaExprAddr ( currentExpr, g.cons_ ucref, [ elemTy ], IndexTail, mIn)
22252225
2226- let bodyExpr =
2227- mkInvisibleLet
2226+ let loopStep =
2227+ mkSequential
22282228 mIn
2229- elemVar
2230- headOrDefaultExpr
2231- ( mkSequential
2232- mIn
2233- bodyExpr
2234- ( mkSequential
2235- mIn
2236- ( mkValSet mIn ( mkLocalValRef currentVar) nextExpr)
2237- ( mkValSet mIn ( mkLocalValRef nextVar) tailOrNullExpr)))
2229+ ( mkValSet mIn ( mkLocalValRef currentVar) nextExpr)
2230+ ( mkValSet mIn ( mkLocalValRef nextVar) tailOrNullExpr)
2231+
2232+ let bodyAndStep =
2233+ mkSequential mIn bodyExpr ( Expr.DebugPoint( DebugPointAtLeafExpr.Yes range0, loopStep))
2234+
2235+ let bodyExpr = mkLet spElem mFor elemVar headOrDefaultExpr bodyAndStep
22382236
22392237 let expr =
22402238 // let mutable current = enumerableExpr
0 commit comments