Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite59af15

Browse files
committed
Use tryAnyParTy
1 parent83efee4 commite59af15

File tree

4 files changed

+35
-31
lines changed

4 files changed

+35
-31
lines changed

‎src/fsharp/ConstraintSolver.fs‎

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -455,10 +455,9 @@ and SolveTypStaticReq (csenv:ConstraintSolverEnv) trace req ty =
455455
IterateD(fun((tpr:Typar),_)-> SolveTypStaticReqTypar csenv trace req tpr) vs
456456

457457
|_->
458-
if isAnyParTy csenv.g tythen
459-
lettpr= destAnyParTy csenv.g ty
460-
SolveTypStaticReqTypar csenv trace req tpr
461-
else CompleteD
458+
match tryAnyParTy csenv.g tywith
459+
| Some tpr-> SolveTypStaticReqTypar csenv trace req tpr
460+
| None-> CompleteD
462461

463462
let recTransactDynamicReq(trace:OptionalTrace)(tpr:Typar)req=
464463
letorig= tpr.DynamicReq
@@ -469,10 +468,10 @@ and SolveTypDynamicReq (csenv:ConstraintSolverEnv) trace req ty =
469468
match reqwith
470469
| TyparDynamicReq.No-> CompleteD
471470
| TyparDynamicReq.Yes->
472-
if isAnyParTy csenv.g tythen
473-
lettpr= destAnyParTy csenv.g ty
474-
if tpr.DynamicReq<> TyparDynamicReq.YesthenTransactDynamicReq trace tpr TyparDynamicReq.Yeselse CompleteD
475-
else CompleteD
471+
match tryAnyParTy csenv.g tywith
472+
| Some tprwhentpr.DynamicReq<> TyparDynamicReq.Yes->
473+
TransactDynamicReq trace tpr TyparDynamicReq.Yes
474+
|_-> CompleteD
476475

477476
letSubstMeasureWarnIfRigid(csenv:ConstraintSolverEnv)trace(v:Typar)ms=
478477
if v.Rigidity.WarnIfUnified&&not(isAnyParTy csenv.g(TType_measure ms))then
@@ -651,14 +650,17 @@ let freshMeasure () = Measure.Var (NewInferenceMeasurePar ())
651650
letCheckWarnIfRigid(csenv:ConstraintSolverEnv)ty1(r:Typar)ty=
652651
letg= csenv.g
653652
letdenv= csenv.DisplayEnv
654-
if r.Rigidity.WarnIfUnified&&
655-
(not(isAnyParTy g ty)||
656-
(lettp2= destAnyParTy g ty
657-
not tp2.IsCompilerGenerated&&
658-
(r.IsCompilerGenerated||
659-
// exclude this warning for two identically named user-specified type parameters, e.g. from different mutually recursive functions or types
660-
r.DisplayName<> tp2.DisplayName)))
661-
then
653+
ifnot r.Rigidity.WarnIfUnifiedthen CompleteDelse
654+
letneedsWarning=
655+
match tryAnyParTy g tywith
656+
| None->true
657+
| Some tp2->
658+
not tp2.IsCompilerGenerated&&
659+
(r.IsCompilerGenerated||
660+
// exclude this warning for two identically named user-specified type parameters, e.g. from different mutually recursive functions or types
661+
r.DisplayName<> tp2.DisplayName)
662+
663+
if needsWarningthen
662664
// NOTE: we grab the name eagerly to make sure the type variable prints as a type variable
663665
lettpnmOpt=if r.IsCompilerGeneratedthen Noneelse Some r.Name
664666
WarnD(NonRigidTypar(denv,tpnmOpt,r.Range,ty1,ty,csenv.m))
@@ -1403,11 +1405,11 @@ and GetRelevantMethodsForTrait (csenv:ConstraintSolverEnv) permitWeakResolution
14031405

14041406
/// The nominal support of the member constraint
14051407
andGetSupportOfMemberConstraint(csenv:ConstraintSolverEnv)(TTrait(tys,_,_,_,_,_))=
1406-
tys|> List.choose(fun ty->if isAnyParTycsenv.g tythen Some(destAnyParTy csenv.g ty)else None)
1408+
tys|> List.choose(tryAnyParTycsenv.g)
14071409

14081410
/// All the typars relevant to the member constraint *)
14091411
andGetFreeTyparsOfMemberConstraint(csenv:ConstraintSolverEnv)(TTrait(tys,_,_,argtys,rty,_))=
1410-
(freeInTypesLeftToRightSkippingConstraints csenv.g(tys@argtys@ Option.toList rty))
1412+
freeInTypesLeftToRightSkippingConstraints csenv.g(tys@argtys@ Option.toList rty)
14111413

14121414
/// Re-solve the global constraints involving any of the given type variables.
14131415
/// Trait constraints can't always be solved using the pessimistic rules. We only canonicalize
@@ -1418,10 +1420,10 @@ and SolveRelevantMemberConstraints (csenv:ConstraintSolverEnv) ndeep permitWeakR
14181420
tps|> AtLeastOneD(fun tp->
14191421
/// Normalize the typar
14201422
letty= mkTyparTy tp
1421-
if isAnyParTy csenv.g tythen
1422-
lettp= destAnyParTy csenv.g ty
1423+
match tryAnyParTy csenv.g tywith
1424+
| Sometp->
14231425
SolveRelevantMemberConstraintsForTypar csenv ndeep permitWeakResolution trace tp
1424-
else
1426+
| None->
14251427
ResultDfalse))
14261428

14271429
andSolveRelevantMemberConstraintsForTypar(csenv:ConstraintSolverEnv)ndeep permitWeakResolution(trace:OptionalTrace)tp=

‎src/fsharp/NicePrint.fs‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,12 +1178,10 @@ module private PrintTastMemberOrVals =
11781178
lettprenaming,ptau,cxs= PrettyTypes.PrettifyTypes1 denv.g tau
11791179
letptps=
11801180
tps
1181-
|> generalizeTypars
1182-
// Badly formed code may instantiate rigid declared typars to types, e.g. see bug
1183-
// Hence we double check here that the thing is really a type variable
1184-
|> List.map(instType tprenaming)
1185-
|> List.filter(isAnyParTy denv.g)
1186-
|> List.map(destAnyParTy denv.g)
1181+
|> generalizeTypars
1182+
// Badly formed code may instantiate rigid declared typars to types, e.g. see bug
1183+
// Hence we double check here that the thing is really a type variable
1184+
|> List.choose(instType tprenaming>> tryAnyParTy denv.g)
11871185
layoutNonMemberVal denv(ptps,v,ptau,cxs)
11881186
| Some_->
11891187
layoutMember denv v

‎src/fsharp/TastOps.fs‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ let isAppTy g ty = ty |> stripTyEqns g |> (function TType_app _ -> true | _ ->
716716
letdestAppTy g ty= ty|> stripTyEqns g|>(function TType_app(tcref,tinst)-> tcref,tinst|_-> failwith"destAppTy")
717717
lettcrefOfAppTy g ty= ty|> stripTyEqns g|>(function TType_app(tcref,_)-> tcref|_-> failwith"tcrefOfAppTy")
718718
lettryDestAppTy g ty= ty|> stripTyEqns g|>(function TType_app(tcref,_)-> Some tcref|_-> None)
719+
lettryAnyParTy g ty= ty|> stripTyEqns g|>(function TType_var v-> Some v| TType_measure unt-> Some(destUnitParMeasure g unt)|_-> None)
719720
let(|AppTy|_|)g ty= ty|> stripTyEqns g|>(function TType_app(tcref,tinst)-> Some(tcref,tinst)|_-> None)
720721
let(|RefTupleTy|_|)g ty= ty|> stripTyEqns g|>(function TType_tuple(tupInfo,tys)whennot(evalTupInfoIsStruct tupInfo)-> Some tys|_-> None)
721722
let(|FunTy|_|)g ty= ty|> stripTyEqns g|>(function TType_fun(dty, rty)-> Some(dty, rty)|_-> None)
@@ -1141,11 +1142,13 @@ let NormalizeDeclaredTyparsForEquiRecursiveInference g tps =
11411142
match tpswith
11421143
|[]->[]
11431144
| tps->
1144-
tps|> List.map(fun tp->
1145-
letty= mkTyparTy tp
1146-
if isAnyParTy g tythen destAnyParTy g tyelse tp)
1145+
tps|> List.map(fun tp->
1146+
letty= mkTyparTy tp
1147+
match tryAnyParTy g tywith
1148+
| Some anyParTy-> anyParTy
1149+
| None-> tp)
11471150

1148-
typeTypeScheme= TypeSchemeofTypars*TType
1151+
typeTypeScheme= TypeSchemeofTypars*TType
11491152

11501153
letmkGenericBindRhs g m generalizedTyparsForRecursiveBlock typeScheme bodyExpr=
11511154
let(TypeScheme(generalizedTypars,tauType))= typeScheme

‎src/fsharp/TastOps.fsi‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ val isFSharpObjModelTy : TcGlobals -> TType -> bool
416416
val isRecdTy: TcGlobals-> TType-> bool
417417
val isTyparTy: TcGlobals-> TType-> bool
418418
val isAnyParTy: TcGlobals-> TType-> bool
419+
val tryAnyParTy: TcGlobals-> TType-> Typar option
419420
val isMeasureTy: TcGlobals-> TType-> bool
420421

421422
val mkAppTy: TyconRef-> TypeInst-> TType

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp