@@ -8,6 +8,7 @@ open Internal.Utilities.Library
88open Internal.Utilities .Library .Extras
99open FSharp.Compiler
1010open FSharp.Compiler .DiagnosticsLogger
11+ open FSharp.Compiler .Text
1112open FSharp.Compiler .TypedTree
1213open FSharp.Compiler .TypedTreeBasics
1314open FSharp.Compiler .TypedTreeOps
@@ -29,14 +30,17 @@ type cenv =
2930 override _.ToString () = " <cenv>"
3031
3132/// Walk types, collecting type variables
32- let accTy cenv _env ty =
33+ let accTy cenv _env ( fallbackRange : Range option ) ty =
3334 let normalizedTy = tryNormalizeMeasureInType cenv.g ty
3435 ( freeInType CollectTyparsNoCaching normalizedTy) .FreeTypars |> Zset.iter ( fun tp ->
35- if ( tp.Rigidity <> TyparRigidity.Rigid) then
36+ if ( tp.Rigidity <> TyparRigidity.Rigid) then
37+ match fallbackRange with
38+ | Some r when tp.Range = Range.range0 -> tp.SetIdent ( FSharp.Compiler.Syntax.Ident( tp.typar_ id.idText, r))
39+ | _ -> ()
3640 cenv.unsolved <- tp :: cenv.unsolved)
3741
3842let accTypeInst cenv env tyargs =
39- tyargs |> List.iter ( accTy cenv env)
43+ tyargs |> List.iter ( accTy cenv env None )
4044
4145/// Walk expressions, collecting type variables
4246let rec accExpr ( cenv : cenv ) ( env : env ) expr =
@@ -52,17 +56,17 @@ let rec accExpr (cenv: cenv) (env: env) expr =
5256 accBind cenv env bind
5357 accExpr cenv env body
5458
55- | Expr.Const (_, _ , ty) ->
56- accTy cenv env ty
59+ | Expr.Const (_, r , ty) ->
60+ accTy cenv env ( Some r ) ty
5761
5862 | Expr.Val (_ v, _ vFlags, _ m) -> ()
5963
60- | Expr.Quote ( ast, _, _, _ m , ty) ->
64+ | Expr.Quote ( ast, _, _, m , ty) ->
6165 accExpr cenv env ast
62- accTy cenv env ty
66+ accTy cenv env ( Some m ) ty
6367
64- | Expr.Obj (_, ty, basev, basecall, overrides, iimpls, _ m ) ->
65- accTy cenv env ty
68+ | Expr.Obj (_, ty, basev, basecall, overrides, iimpls, m ) ->
69+ accTy cenv env ( Some m ) ty
6670 accExpr cenv env basecall
6771 accMethods cenv env basev overrides
6872 accIntfImpls cenv env basev iimpls
@@ -77,8 +81,8 @@ let rec accExpr (cenv: cenv) (env: env) expr =
7781 | Expr.Op ( c, tyargs, args, m) ->
7882 accOp cenv env ( c, tyargs, args, m)
7983
80- | Expr.App ( f, fty, tyargs, argsl, _ m ) ->
81- accTy cenv env fty
84+ | Expr.App ( f, fty, tyargs, argsl, m ) ->
85+ accTy cenv env ( Some m ) fty
8286 accTypeInst cenv env tyargs
8387 accExpr cenv env f
8488 accExprs cenv env argsl
@@ -88,33 +92,33 @@ let rec accExpr (cenv: cenv) (env: env) expr =
8892 let ty = mkMultiLambdaTy cenv.g m argvs bodyTy
8993 accLambdas cenv env valReprInfo expr ty
9094
91- | Expr.TyLambda (_, tps, _ body, _ m , bodyTy) ->
95+ | Expr.TyLambda (_, tps, _ body, m , bodyTy) ->
9296 let valReprInfo = ValReprInfo ( ValReprInfo.InferTyparInfo tps, [], ValReprInfo.unnamedRetVal)
93- accTy cenv env bodyTy
97+ accTy cenv env ( Some m ) bodyTy
9498 let ty = mkForallTyIfNeeded tps bodyTy
9599 accLambdas cenv env valReprInfo expr ty
96100
97101 | Expr.TyChoose (_ tps, e1, _ m) ->
98102 accExpr cenv env e1
99103
100104 | Expr.Match (_, _ exprm, dtree, targets, m, ty) ->
101- accTy cenv env ty
105+ accTy cenv env ( Some m ) ty
102106 accDTree cenv env dtree
103107 accTargets cenv env m ty targets
104108
105109 | Expr.LetRec ( binds, e, _ m, _) ->
106110 accBinds cenv env binds
107111 accExpr cenv env e
108112
109- | Expr.StaticOptimization ( constraints, e2, e3, _ m ) ->
113+ | Expr.StaticOptimization ( constraints, e2, e3, m ) ->
110114 accExpr cenv env e2
111115 accExpr cenv env e3
112116 constraints |> List.iter ( function
113117 | TTyconEqualsTycon( ty1, ty2) ->
114- accTy cenv env ty1
115- accTy cenv env ty2
118+ accTy cenv env ( Some m ) ty1
119+ accTy cenv env ( Some m ) ty2
116120 | TTyconIsStruct( ty1) ->
117- accTy cenv env ty1)
121+ accTy cenv env ( Some m ) ty1)
118122
119123 | Expr.WitnessArg ( traitInfo, _ m) ->
120124 accTraitInfo cenv env traitInfo
@@ -136,7 +140,7 @@ and accIntfImpls cenv env baseValOpt l =
136140 List.iter ( accIntfImpl cenv env baseValOpt) l
137141
138142and accIntfImpl cenv env baseValOpt ( ty , overrides ) =
139- accTy cenv env ty
143+ accTy cenv env None ty
140144 accMethods cenv env baseValOpt overrides
141145
142146and accOp cenv env ( op , tyargs , args , _m ) =
@@ -158,16 +162,16 @@ and accOp cenv env (op, tyargs, args, _m) =
158162
159163and accTraitInfo cenv env ( TTrait ( tys , _nm , _ , argTys , retTy , _sln )) =
160164 argTys |> accTypeInst cenv env
161- retTy |> Option.iter ( accTy cenv env)
162- tys |> List.iter ( accTy cenv env)
165+ retTy |> Option.iter ( accTy cenv env None )
166+ tys |> List.iter ( accTy cenv env None )
163167
164168and accLambdas cenv env valReprInfo expr exprTy =
165169 match stripDebugPoints expr with
166170 | Expr.TyChoose (_ tps, bodyExpr, _ m) -> accLambdas cenv env valReprInfo bodyExpr exprTy
167- | Expr.Lambda _
168- | Expr.TyLambda _ ->
171+ | Expr.Lambda ( range = range )
172+ | Expr.TyLambda ( range = range ) ->
169173 let _tps , ctorThisValOpt , baseValOpt , vsl , body , bodyTy = destLambdaWithValReprInfo cenv.g cenv.amap valReprInfo ( expr, exprTy)
170- accTy cenv env bodyTy
174+ accTy cenv env ( Some range ) bodyTy
171175 vsl |> List.iterSquared ( accVal cenv env)
172176 baseValOpt |> Option.iter ( accVal cenv env)
173177 ctorThisValOpt |> Option.iter ( accVal cenv env)
@@ -198,23 +202,23 @@ and accSwitch cenv env (e, cases, dflt, _m) =
198202and accDiscrim cenv env d =
199203 match d with
200204 | DecisionTreeTest.UnionCase(_ ucref, tinst) -> accTypeInst cenv env tinst
201- | DecisionTreeTest.ArrayLength(_, ty) -> accTy cenv env ty
205+ | DecisionTreeTest.ArrayLength(_, ty) -> accTy cenv env None ty
202206 | DecisionTreeTest.Const _
203207 | DecisionTreeTest.IsNull -> ()
204- | DecisionTreeTest.IsInst ( srcTy, tgtTy) -> accTy cenv env srcTy; accTy cenv env tgtTy
208+ | DecisionTreeTest.IsInst ( srcTy, tgtTy) -> accTy cenv env None srcTy; accTy cenv env None tgtTy
205209 | DecisionTreeTest.ActivePatternCase ( exp, tys, _, _, _, _) ->
206210 accExpr cenv env exp
207211 accTypeInst cenv env tys
208212 | DecisionTreeTest.Error _ -> ()
209213
210- and accAttrib cenv env ( Attrib ( _ , _k , args , props , _ , _ , _m )) =
214+ and accAttrib cenv env ( Attrib ( _ , _k , args , props , _ , _ , m )) =
211215 args |> List.iter ( fun ( AttribExpr ( expr1 , expr2 )) ->
212216 accExpr cenv env expr1
213217 accExpr cenv env expr2)
214218 props |> List.iter ( fun ( AttribNamedArg ( _nm , ty , _flg , AttribExpr ( expr , expr2 ))) ->
215219 accExpr cenv env expr
216220 accExpr cenv env expr2
217- accTy cenv env ty)
221+ accTy cenv env ( Some m ) ty)
218222
219223and accAttribs cenv env attribs =
220224 List.iter ( accAttrib cenv env) attribs
@@ -229,7 +233,7 @@ and accArgReprInfo cenv env (argInfo: ArgReprInfo) =
229233and accVal cenv env v =
230234 v.Attribs |> accAttribs cenv env
231235 v.ValReprInfo |> Option.iter ( accValReprInfo cenv env)
232- v.Type |> accTy cenv env
236+ v.Type |> accTy cenv env None
233237
234238and accBind cenv env ( bind : Binding ) =
235239 accVal cenv env bind.Var
0 commit comments