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

Commit7120b19

Browse files
committed
Cleanup
1 parent4a5a40c commit7120b19

File tree

1 file changed

+54
-58
lines changed

1 file changed

+54
-58
lines changed

‎src/fsharp/ConstraintSolver.fs‎

Lines changed: 54 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,7 @@ let GetMeasureOfType g ty =
276276
match tywith
277277
| AppTy g(tcref,[tyarg])->
278278
match stripTyEqns g tyargwith
279-
| TType_measure ms->
280-
if measureEquiv g ms Measure.Onethen Noneelse Some(tcref,ms)
279+
| TType_measure mswhennot(measureEquiv g ms Measure.One)-> Some(tcref,ms)
281280
|_-> None
282281
|_-> None
283282

@@ -451,13 +450,12 @@ and SolveTypStaticReq (csenv:ConstraintSolverEnv) trace req ty =
451450
// requires that a type constructor be known at compile time
452451
match stripTyparEqns tywith
453452
| TType_measure ms->
454-
letvs= ListMeasureVarOccsWithNonZeroExponents ms
455-
IterateD(fun((tpr:Typar),_)-> SolveTypStaticReqTypar csenv trace req tpr) vs
456-
453+
letvs= ListMeasureVarOccsWithNonZeroExponents ms
454+
IterateD(fun((tpr:Typar),_)-> SolveTypStaticReqTypar csenv trace req tpr) vs
457455
|_->
458-
match tryAnyParTy csenv.g tywith
459-
| Some tpr-> SolveTypStaticReqTypar csenv trace req tpr
460-
| None-> CompleteD
456+
match tryAnyParTy csenv.g tywith
457+
| Some tpr-> SolveTypStaticReqTypar csenv trace req tpr
458+
| None-> CompleteD
461459

462460
let recTransactDynamicReq(trace:OptionalTrace)(tpr:Typar)req=
463461
letorig= tpr.DynamicReq
@@ -475,18 +473,18 @@ and SolveTypDynamicReq (csenv:ConstraintSolverEnv) trace req ty =
475473

476474
letSubstMeasureWarnIfRigid(csenv:ConstraintSolverEnv)trace(v:Typar)ms=
477475
if v.Rigidity.WarnIfUnified&&not(isAnyParTy csenv.g(TType_measure ms))then
478-
// NOTE: we grab the name eagerly to make sure the type variable prints as a type variable
479-
lettpnmOpt=if v.IsCompilerGeneratedthen Noneelse Some v.Name
480-
SolveTypStaticReq csenv trace v.StaticReq(TType_measure ms)++(fun()->
481-
SubstMeasure v ms;
482-
WarnD(NonRigidTypar(csenv.DisplayEnv,tpnmOpt,v.Range,TType_measure(Measure.Var v), TType_measure ms,csenv.m)))
476+
// NOTE: we grab the name eagerly to make sure the type variable prints as a type variable
477+
lettpnmOpt=if v.IsCompilerGeneratedthen Noneelse Some v.Name
478+
SolveTypStaticReq csenv trace v.StaticReq(TType_measure ms)++(fun()->
479+
SubstMeasure v ms;
480+
WarnD(NonRigidTypar(csenv.DisplayEnv,tpnmOpt,v.Range,TType_measure(Measure.Var v), TType_measure ms,csenv.m)))
483481
else
484-
// Propagate static requirements from 'tp' to 'ty'
485-
SolveTypStaticReq csenv trace v.StaticReq(TType_measure ms)++(fun()->
486-
SubstMeasure v ms;
487-
if v.Rigidity= TyparRigidity.Anon&& measureEquiv csenv.g ms Measure.Onethen
488-
WarnD(Error(FSComp.SR.csCodeLessGeneric(),v.Range))
489-
else CompleteD)
482+
// Propagate static requirements from 'tp' to 'ty'
483+
SolveTypStaticReq csenv trace v.StaticReq(TType_measure ms)++(fun()->
484+
SubstMeasure v ms;
485+
if v.Rigidity= TyparRigidity.Anon&& measureEquiv csenv.g ms Measure.Onethen
486+
WarnD(Error(FSComp.SR.csCodeLessGeneric(),v.Range))
487+
else CompleteD)
490488

491489
/// Imperatively unify the unit-of-measure expression ms against 1.
492490
/// There are three cases
@@ -501,15 +499,14 @@ let UnifyMeasureWithOne (csenv:ConstraintSolverEnv) trace ms =
501499
// If there is at least one non-rigid variable v with exponent e, then we can unify
502500
match FindPreferredTypar nonRigidVarswith
503501
|(v,e)::vs->
504-
letunexpandedCons= ListMeasureConOccsWithNonZeroExponents csenv.gfalse ms
505-
letnewms= ProdMeasures(List.map(fun(c,e')-> Measure.RationalPower(Measure.Con c, NegRational(DivRational e' e))) unexpandedCons
506-
@ List.map(fun(v,e')-> Measure.RationalPower(Measure.Var v, NegRational(DivRational e' e)))(vs@ rigidVars))
502+
letunexpandedCons= ListMeasureConOccsWithNonZeroExponents csenv.gfalse ms
503+
letnewms= ProdMeasures(List.map(fun(c,e')-> Measure.RationalPower(Measure.Con c, NegRational(DivRational e' e))) unexpandedCons
504+
@ List.map(fun(v,e')-> Measure.RationalPower(Measure.Var v, NegRational(DivRational e' e)))(vs@ rigidVars))
507505

508-
SubstMeasureWarnIfRigid csenv trace v newms
506+
SubstMeasureWarnIfRigid csenv trace v newms
509507

510508
// Otherwise we require ms to be 1
511-
|[]->
512-
if measureEquiv csenv.g ms Measure.Onethen CompleteDelse localAbortD
509+
|[]->if measureEquiv csenv.g ms Measure.Onethen CompleteDelse localAbortD
513510

514511
/// Imperatively unify unit-of-measure expression ms1 against ms2
515512
letUnifyMeasures(csenv:ConstraintSolverEnv)trace ms1 ms2=
@@ -599,12 +596,12 @@ and GetMeasureVarGcdInTypes v tys =
599596
letNormalizeExponentsInTypeScheme uvars ty=
600597
uvars|> List.map(fun v->
601598
letexpGcd= AbsRational(GetMeasureVarGcdInType v ty)
602-
if expGcd= OneRational|| expGcd= ZeroRational
603-
then v
604-
else
605-
letv'= NewAnonTypar(TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq)
606-
SubstMeasure v(Measure.RationalPower(Measure.Var v', DivRational OneRational expGcd))
607-
v')
599+
if expGcd= OneRational|| expGcd= ZeroRationalthen
600+
v
601+
else
602+
letv'= NewAnonTypar(TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq)
603+
SubstMeasure v(Measure.RationalPower(Measure.Var v', DivRational OneRational expGcd))
604+
v')
608605

609606

610607
// We normalize unit-of-measure-polymorphic type schemes. There
@@ -636,7 +633,8 @@ let NormalizeExponentsInTypeScheme uvars ty =
636633
letSimplifyMeasuresInTypeScheme g resultFirst(generalizable:Typar list)ty constraints=
637634
// Only bother if we're generalizing over at least one unit-of-measure variable
638635
letuvars,vars=
639-
generalizable|> List.partition(fun v-> v.Kind= TyparKind.Measure&& v.Rigidity<> TyparRigidity.Rigid)
636+
generalizable
637+
|> List.partition(fun v-> v.Kind= TyparKind.Measure&& v.Rigidity<> TyparRigidity.Rigid)
640638

641639
match uvarswith
642640
|[]-> generalizable
@@ -656,7 +654,7 @@ let CheckWarnIfRigid (csenv:ConstraintSolverEnv) ty1 (r:Typar) ty =
656654
| None->true
657655
| Some tp2->
658656
not tp2.IsCompilerGenerated&&
659-
(r.IsCompilerGenerated||
657+
(r.IsCompilerGenerated||
660658
// exclude this warning for two identically named user-specified type parameters, e.g. from different mutually recursive functions or types
661659
r.DisplayName<> tp2.DisplayName)
662660

@@ -722,17 +720,17 @@ and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty
722720
ifnot(isTyparTy g ty)|| typeEquiv g ty dtythen CompleteDelse
723721
AddConstraint csenv ndeep m2 trace(destTyparTy g ty)(TyparConstraint.DefaultsTo(priority,dty,m))
724722

725-
| TyparConstraint.SupportsNull m2-> SolveTypSupportsNull csenv ndeep m2 trace ty
726-
| TyparConstraint.IsEnum(underlying, m2)-> SolveTypIsEnum csenv ndeep m2 trace ty underlying
727-
| TyparConstraint.SupportsComparison(m2)-> SolveTypeSupportsComparison csenv ndeep m2 trace ty
728-
| TyparConstraint.SupportsEquality(m2)-> SolveTypSupportsEquality csenv ndeep m2 trace ty
729-
| TyparConstraint.IsDelegate(aty,bty, m2)-> SolveTypIsDelegate csenv ndeep m2 trace ty aty bty
730-
| TyparConstraint.IsNonNullableStruct m2-> SolveTypIsNonNullableValueType csenv ndeep m2 trace ty
731-
| TyparConstraint.IsUnmanaged m2-> SolveTypIsUnmanaged csenv ndeep m2 trace ty
732-
| TyparConstraint.IsReferenceType m2-> SolveTypIsReferenceType csenv ndeep m2 trace ty
733-
| TyparConstraint.RequiresDefaultConstructor m2-> SolveTypRequiresDefaultConstructor csenv ndeep m2 trace ty
734-
| TyparConstraint.SimpleChoice(tys,m2)-> SolveTypChoice csenv ndeep m2 trace ty tys
735-
| TyparConstraint.CoercesTo(ty2,m2)-> SolveTypSubsumesTypKeepAbbrevs csenv ndeep m2 trace None ty2 ty
723+
| TyparConstraint.SupportsNull m2-> SolveTypSupportsNull csenv ndeep m2 trace ty
724+
| TyparConstraint.IsEnum(underlying, m2)-> SolveTypIsEnum csenv ndeep m2 trace ty underlying
725+
| TyparConstraint.SupportsComparison(m2)-> SolveTypeSupportsComparison csenv ndeep m2 trace ty
726+
| TyparConstraint.SupportsEquality(m2)-> SolveTypSupportsEquality csenv ndeep m2 trace ty
727+
| TyparConstraint.IsDelegate(aty,bty, m2)-> SolveTypIsDelegate csenv ndeep m2 trace ty aty bty
728+
| TyparConstraint.IsNonNullableStruct m2-> SolveTypIsNonNullableValueType csenv ndeep m2 trace ty
729+
| TyparConstraint.IsUnmanaged m2-> SolveTypIsUnmanaged csenv ndeep m2 trace ty
730+
| TyparConstraint.IsReferenceType m2-> SolveTypIsReferenceType csenv ndeep m2 trace ty
731+
| TyparConstraint.RequiresDefaultConstructor m2-> SolveTypRequiresDefaultConstructor csenv ndeep m2 trace ty
732+
| TyparConstraint.SimpleChoice(tys,m2)-> SolveTypChoice csenv ndeep m2 trace ty tys
733+
| TyparConstraint.CoercesTo(ty2,m2)-> SolveTypSubsumesTypKeepAbbrevs csenv ndeep m2 trace None ty2 ty
736734
| TyparConstraint.MayResolveMember(traitInfo,m2)->
737735
SolveMemberConstraint csenvfalsefalse ndeep m2 trace traitInfo++(fun _-> CompleteD)
738736
)))
@@ -868,16 +866,15 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra
868866
// 'a[] :> IReadOnlyCollection<'b> ---> 'a = 'b
869867
// Note we don't support co-variance on array types nor
870868
// the special .NET conversions for these types
871-
if
872-
(isArray1DTy g ty2&&
873-
isAppTy g ty1&&
874-
(lettcr1= tcrefOfAppTy g ty1
875-
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IList||
876-
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_ICollection||
877-
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IReadOnlyList||
878-
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IReadOnlyCollection||
879-
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IEnumerable))then
880-
869+
if(isArray1DTy g ty2&&
870+
isAppTy g ty1&&
871+
(lettcr1= tcrefOfAppTy g ty1
872+
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IList||
873+
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_ICollection||
874+
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IReadOnlyList||
875+
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IReadOnlyCollection||
876+
tyconRefEq g tcr1 g.tcref_System_Collections_Generic_IEnumerable))
877+
then
881878
let_,tinst= destAppTy g ty1
882879
match tinstwith
883880
|[ty1arg]->
@@ -888,7 +885,6 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra
888885
// D<inst> :> Head<_> --> C<inst'> :> Head<_> for the
889886
// first interface or super-class C supported by D which
890887
// may feasibly convert to Head.
891-
892888
else
893889
match FindUniqueFeasibleSupertype g amap m ty1 ty2with
894890
| None-> ErrorD(ConstraintSolverTypesNotInSubsumptionRelation(denv,ty1,ty2,m,m2))
@@ -921,10 +917,10 @@ and DepthCheck ndeep m =
921917
// If this is a type that's parameterized on a unit-of-measure (expected to be numeric), unify its measure with 1
922918
andSolveDimensionlessNumericType(csenv:ConstraintSolverEnv)ndeep m2 trace ty=
923919
match GetMeasureOfType csenv.g tywith
924-
| Some(tcref,_)->
925-
SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ty(mkAppTy tcref[TType_measure Measure.One])
920+
| Some(tcref,_)->
921+
SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ty(mkAppTy tcref[TType_measure Measure.One])
926922
| None->
927-
CompleteD
923+
CompleteD
928924

929925
/// We do a bunch of fakery to pretend that primitive types have certain members.
930926
/// We pretend int and other types support a number of operators. In the actual IL for mscorlib they

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp