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

Commit561af8b

Browse files
authored
Merge pull requestfsharp#817 from dsyme/rev2
applydotnet/fsharp#4348
2 parentsa8ec45a +95b6626 commit561af8b

File tree

3 files changed

+39
-26
lines changed

3 files changed

+39
-26
lines changed

‎CHANGELOG-fsharp.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
4.1.33
2+
* Cherry pickhttps://github.com/Microsoft/visualfsharp/pull/4348/
3+
14
4.1.32
2-
* Integratevisualfsahrp master to bc7ce194a09474b0bfea185ec15300b54e7aaf9e
5+
* Integratevisualfsharp master to bc7ce194a09474b0bfea185ec15300b54e7aaf9e
36

47
4.1.31
58
* Integrate visualfsharp master to 31ec0e0fb

‎mono/appveyor.ps1‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
# the version under development, update after a release
3-
$version='4.1.32'
3+
$version='4.1.33'
44

55
functionisVersionTag($tag){
66
$v=New-Object Version

‎src/fsharp/ConstraintSolver.fs‎

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ let ShowAccessDomain ad =
372372
// Solve
373373

374374
exception NonRigidTyparofDisplayEnv*stringoption*range*TType*TType*range
375+
exception LocallyAbortOperationThatFailsToResolveOverload
375376
exception LocallyAbortOperationThatLosesAbbrevs
376377
letlocalAbortD= ErrorD LocallyAbortOperationThatLosesAbbrevs
377378

@@ -740,19 +741,19 @@ and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty
740741
| Some destTypar->
741742
AddConstraint csenv ndeep m2 trace destTypar(TyparConstraint.DefaultsTo(priority, dty, m))
742743

743-
| TyparConstraint.SupportsNull m2-> SolveTypSupportsNull csenv ndeep m2 trace ty
744-
| TyparConstraint.IsEnum(underlying, m2)-> SolveTypIsEnum csenv ndeep m2 trace ty underlying
745-
| TyparConstraint.SupportsComparison(m2)-> SolveTypeSupportsComparison csenv ndeep m2 trace ty
746-
| TyparConstraint.SupportsEquality(m2)-> SolveTypSupportsEquality csenv ndeep m2 trace ty
744+
| TyparConstraint.SupportsNull m2-> SolveTypSupportsNull csenv ndeep m2 trace ty
745+
| TyparConstraint.IsEnum(underlying, m2)-> SolveTypIsEnum csenv ndeep m2 trace ty underlying
746+
| TyparConstraint.SupportsComparison(m2)-> SolveTypeSupportsComparison csenv ndeep m2 trace ty
747+
| TyparConstraint.SupportsEquality(m2)-> SolveTypSupportsEquality csenv ndeep m2 trace ty
747748
| TyparConstraint.IsDelegate(aty, bty, m2)-> SolveTypIsDelegate csenv ndeep m2 trace ty aty bty
748-
| TyparConstraint.IsNonNullableStruct m2-> SolveTypIsNonNullableValueType csenv ndeep m2 trace ty
749-
| TyparConstraint.IsUnmanaged m2-> SolveTypIsUnmanaged csenv ndeep m2 trace ty
750-
| TyparConstraint.IsReferenceType m2-> SolveTypIsReferenceType csenv ndeep m2 trace ty
751-
| TyparConstraint.RequiresDefaultConstructor m2-> SolveTypRequiresDefaultConstructor csenv ndeep m2 trace ty
749+
| TyparConstraint.IsNonNullableStruct m2-> SolveTypIsNonNullableValueType csenv ndeep m2 trace ty
750+
| TyparConstraint.IsUnmanaged m2-> SolveTypIsUnmanaged csenv ndeep m2 trace ty
751+
| TyparConstraint.IsReferenceType m2-> SolveTypIsReferenceType csenv ndeep m2 trace ty
752+
| TyparConstraint.RequiresDefaultConstructor m2-> SolveTypRequiresDefaultConstructor csenv ndeep m2 trace ty
752753
| TyparConstraint.SimpleChoice(tys, m2)-> SolveTypChoice csenv ndeep m2 trace ty tys
753754
| TyparConstraint.CoercesTo(ty2, m2)-> SolveTypSubsumesTypKeepAbbrevs csenv ndeep m2 trace None ty2 ty
754-
| TyparConstraint.MayResolveMember(traitInfo, m2)->
755-
SolveMemberConstraint csenvfalse ndeep m2 trace traitInfo++(fun _-> CompleteD)
755+
| TyparConstraint.MayResolveMember(traitInfo, m2)->
756+
SolveMemberConstraint csenvfalsefalsendeep m2 trace traitInfo++(fun _-> CompleteD)
756757
)))
757758

758759

@@ -762,14 +763,15 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace
762763
letndeep= ndeep+1
763764
letaenv= csenv.EquivEnv
764765
letg= csenv.g
765-
if ty1=== ty2then CompleteDelse
766766

767767
match cxslnwith
768768
| Some(traitInfo, traitSln)when traitInfo.Solution.IsNone->
769769
// If this is an overload resolution at this point it's safe to assume the candidate member being evaluated solves this member constraint.
770770
TransactMemberConstraintSolution traitInfo trace traitSln
771771
|_->()
772772

773+
if ty1=== ty2then CompleteDelse
774+
773775
letcanShortcut=not trace.HasTrace
774776
letsty1= stripTyEqnsA csenv.g canShortcut ty1
775777
letsty2= stripTyEqnsA csenv.g canShortcut ty2
@@ -943,7 +945,7 @@ and SolveDimensionlessNumericType (csenv:ConstraintSolverEnv) ndeep m2 trace ty
943945
/// We pretend int and other types support a number of operators. In the actual IL for mscorlib they
944946
/// don't, however the type-directed static optimization rules in the library code that makes use of this
945947
/// will deal with the problem.
946-
andSolveMemberConstraint(csenv:ConstraintSolverEnv)permitWeakResolution ndeep m2 trace(TTrait(tys,nm,memFlags,argtys,rty,sln)):OperationResult<bool>=
948+
andSolveMemberConstraint(csenv:ConstraintSolverEnv)ignoreUnresolvedOverloadpermitWeakResolution ndeep m2 trace(TTrait(tys,nm,memFlags,argtys,rty,sln)):OperationResult<bool>=
947949
// Do not re-solve if already solved
948950
if sln.Value.IsSomethen ResultDtrueelse
949951
letg= csenv.g
@@ -1300,9 +1302,12 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep
13001302
letfrees= GetFreeTyparsOfMemberConstraint csenv traitInfo
13011303

13021304
// If there's nothing left to learn then raise the errors
1303-
(if(permitWeakResolution&& isNil support)|| isNil freesthen errors
1304-
// Otherwise re-record the trait waiting for canonicalization
1305-
else AddMemberConstraint csenv ndeep m2 trace traitInfo support frees)++(fun()-> ResultD TTraitUnsolved)
1305+
(if(permitWeakResolution&& isNil support)|| isNil freesthen errors
1306+
// Otherwise re-record the trait waiting for canonicalization
1307+
else AddMemberConstraint csenv ndeep m2 trace traitInfo support frees)++(fun()->
1308+
match errorswith
1309+
| ErrorResult(_, UnresolvedOverloading_)whennot ignoreUnresolvedOverload&&(not(nm="op_Explicit"|| nm="op_Implicit"))-> ErrorD LocallyAbortOperationThatFailsToResolveOverload
1310+
|_-> ResultD TTraitUnsolved)
13061311
)
13071312
++
13081313
(fun res-> RecordMemberConstraintSolution csenv.SolverState m trace traitInfo res))
@@ -1444,7 +1449,7 @@ and SolveRelevantMemberConstraintsForTypar (csenv:ConstraintSolverEnv) ndeep per
14441449
cxs
14451450
|> AtLeastOneD(fun(traitInfo,m2)->
14461451
letcsenv={ csenvwith m= m2}
1447-
SolveMemberConstraint csenv permitWeakResolution(ndeep+1) m2 trace traitInfo)
1452+
SolveMemberConstraint csenvtruepermitWeakResolution(ndeep+1) m2 trace traitInfo)
14481453

14491454
andCanonicalizeRelevantMemberConstraints(csenv:ConstraintSolverEnv)ndeep trace tps=
14501455
SolveRelevantMemberConstraints csenv ndeeptrue trace tps
@@ -1959,18 +1964,22 @@ and CanMemberSigsMatchUpToCheck
19591964
// to allow us to report the outer types involved in the constraint
19601965
andprivateSolveTypSubsumesTypWithReport(csenv:ConstraintSolverEnv)ndeep m trace cxsln ty1 ty2=
19611966
TryD(fun()-> SolveTypSubsumesTypKeepAbbrevs csenv ndeep m trace cxsln ty1 ty2)
1962-
(fun res->
1963-
match csenv.eContextInfowith
1964-
| ContextInfo.RuntimeTypeTest isOperator->
1965-
// test if we can cast other way around
1967+
(function
1968+
| LocallyAbortOperationThatFailsToResolveOverload-> CompleteD
1969+
| res->
1970+
match csenv.eContextInfowith
1971+
| ContextInfo.RuntimeTypeTest isOperator->
1972+
// test if we can cast other way around
19661973
match CollectThenUndo(fun newTrace-> SolveTypSubsumesTypKeepAbbrevs csenv ndeep m(OptionalTrace.WithTrace newTrace) cxsln ty2 ty1)with
19671974
| OkResult_-> ErrorD(ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, ContextInfo.DowncastUsedInsteadOfUpcast isOperator, m))
19681975
|_-> ErrorD(ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, ContextInfo.NoContext, m))
19691976
|_-> ErrorD(ErrorsFromAddingSubsumptionConstraint(csenv.g, csenv.DisplayEnv, ty1, ty2, res, csenv.eContextInfo, m)))
19701977

19711978
andprivateSolveTypEqualsTypWithReport(csenv:ConstraintSolverEnv)ndeep m trace cxsln ty1 ty2=
19721979
TryD(fun()-> SolveTypEqualsTypKeepAbbrevsWithCxsln csenv ndeep m trace cxsln ty1 ty2)
1973-
(fun res-> ErrorD(ErrorFromAddingTypeEquation(csenv.g, csenv.DisplayEnv, ty1, ty2, res, m)))
1980+
(function
1981+
| LocallyAbortOperationThatFailsToResolveOverload-> CompleteD
1982+
| res-> ErrorD(ErrorFromAddingTypeEquation(csenv.g, csenv.DisplayEnv, ty1, ty2, res, m)))
19741983

19751984
andArgsMustSubsumeOrConvert
19761985
(csenv:ConstraintSolverEnv)
@@ -2536,7 +2545,7 @@ let AddCxTypeMustSubsumeType contextInfo denv css m trace ty1 ty2 =
25362545
|> RaiseOperationResult
25372546

25382547
letAddCxMethodConstraint denv css m trace traitInfo=
2539-
TryD(fun()-> SolveMemberConstraint(MakeConstraintSolverEnv ContextInfo.NoContext css m denv)false0 m trace traitInfo++(fun _-> CompleteD))
2548+
TryD(fun()-> SolveMemberConstraint(MakeConstraintSolverEnv ContextInfo.NoContext css m denv)truefalse0 m trace traitInfo++(fun _-> CompleteD))
25402549
(fun res-> ErrorD(ErrorFromAddingConstraint(denv, res, m)))
25412550
|> RaiseOperationResult
25422551

@@ -2594,7 +2603,7 @@ let CodegenWitnessThatTypSupportsTraitConstraint tcVal g amap m (traitInfo:Trait
25942603
InfoReader=new InfoReader(g, amap)}
25952604

25962605
letcsenv= MakeConstraintSolverEnv ContextInfo.NoContext css m(DisplayEnv.Empty g)
2597-
SolveMemberConstraint csenvtrue0 m NoTrace traitInfo++(fun _res->
2606+
SolveMemberConstraint csenvtruetrue0 m NoTrace traitInfo++(fun _res->
25982607
letsln=
25992608
match traitInfo.Solutionwith
26002609
| None-> Choice4Of4()
@@ -2719,4 +2728,5 @@ let IsApplicableMethApprox g amap m (minfo:MethInfo) availObjTy =
27192728
|> CommitOperationResult
27202729
|_->true
27212730
else
2722-
true
2731+
true
2732+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp