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

Commit72a18ee

Browse files
committed
revertdotnet#4173 (i.e. reapplydotnet#1650 anddotnet#3366)
This reverts commitf9893b6.
1 parent2bcb342 commit72a18ee

File tree

5 files changed

+36
-92
lines changed

5 files changed

+36
-92
lines changed

‎src/fsharp/ConstraintSolver.fs‎

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

372372
exception NonRigidTyparofDisplayEnv*stringoption*range*TType*TType*range
373+
exception LocallyAbortOperationThatFailsToResolveOverload
373374
exception LocallyAbortOperationThatLosesAbbrevs
374375
letlocalAbortD= ErrorD LocallyAbortOperationThatLosesAbbrevs
375376

@@ -738,19 +739,19 @@ and solveTypMeetsTyparConstraints (csenv:ConstraintSolverEnv) ndeep m2 trace ty
738739
| Some destTypar->
739740
AddConstraint csenv ndeep m2 trace destTypar(TyparConstraint.DefaultsTo(priority, dty, m))
740741

741-
| TyparConstraint.SupportsNull m2-> SolveTypSupportsNull csenv ndeep m2 trace ty
742-
| TyparConstraint.IsEnum(underlying, m2)-> SolveTypIsEnum csenv ndeep m2 trace ty underlying
743-
| TyparConstraint.SupportsComparison(m2)-> SolveTypeSupportsComparison csenv ndeep m2 trace ty
744-
| TyparConstraint.SupportsEquality(m2)-> SolveTypSupportsEquality csenv ndeep m2 trace ty
742+
| TyparConstraint.SupportsNull m2-> SolveTypSupportsNull csenv ndeep m2 trace ty
743+
| TyparConstraint.IsEnum(underlying, m2)-> SolveTypIsEnum csenv ndeep m2 trace ty underlying
744+
| TyparConstraint.SupportsComparison(m2)-> SolveTypeSupportsComparison csenv ndeep m2 trace ty
745+
| TyparConstraint.SupportsEquality(m2)-> SolveTypSupportsEquality csenv ndeep m2 trace ty
745746
| TyparConstraint.IsDelegate(aty, bty, m2)-> SolveTypIsDelegate csenv ndeep m2 trace ty aty bty
746-
| TyparConstraint.IsNonNullableStruct m2-> SolveTypIsNonNullableValueType csenv ndeep m2 trace ty
747-
| TyparConstraint.IsUnmanaged m2-> SolveTypIsUnmanaged csenv ndeep m2 trace ty
748-
| TyparConstraint.IsReferenceType m2-> SolveTypIsReferenceType csenv ndeep m2 trace ty
749-
| TyparConstraint.RequiresDefaultConstructor m2-> SolveTypRequiresDefaultConstructor csenv ndeep m2 trace ty
747+
| TyparConstraint.IsNonNullableStruct m2-> SolveTypIsNonNullableValueType csenv ndeep m2 trace ty
748+
| TyparConstraint.IsUnmanaged m2-> SolveTypIsUnmanaged csenv ndeep m2 trace ty
749+
| TyparConstraint.IsReferenceType m2-> SolveTypIsReferenceType csenv ndeep m2 trace ty
750+
| TyparConstraint.RequiresDefaultConstructor m2-> SolveTypRequiresDefaultConstructor csenv ndeep m2 trace ty
750751
| TyparConstraint.SimpleChoice(tys, m2)-> SolveTypChoice csenv ndeep m2 trace ty tys
751752
| TyparConstraint.CoercesTo(ty2, m2)-> SolveTypSubsumesTypKeepAbbrevs csenv ndeep m2 trace None ty2 ty
752-
| TyparConstraint.MayResolveMember(traitInfo, m2)->
753-
SolveMemberConstraint csenvfalse ndeep m2 trace traitInfo++(fun _-> CompleteD)
753+
| TyparConstraint.MayResolveMember(traitInfo, m2)->
754+
SolveMemberConstraint csenvfalsefalsendeep m2 trace traitInfo++(fun _-> CompleteD)
754755
)))
755756

756757

@@ -760,14 +761,15 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace
760761
letndeep= ndeep+1
761762
letaenv= csenv.EquivEnv
762763
letg= csenv.g
763-
if ty1=== ty2then CompleteDelse
764764

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

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

13001302
// If there's nothing left to learn then raise the errors
1301-
(if(permitWeakResolution&& isNil support)|| isNil freesthen errors
1302-
// Otherwise re-record the trait waiting for canonicalization
1303-
else AddMemberConstraint csenv ndeep m2 trace traitInfo support frees)++(fun()-> ResultD TTraitUnsolved)
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()->
1306+
match errorswith
1307+
| ErrorResult(_, UnresolvedOverloading_)whennot ignoreUnresolvedOverload&&(not(nm="op_Explicit"|| nm="op_Implicit"))-> ErrorD LocallyAbortOperationThatFailsToResolveOverload
1308+
|_-> ResultD TTraitUnsolved)
13041309
)
13051310
++
13061311
(fun res-> RecordMemberConstraintSolution csenv.SolverState m trace traitInfo res))
@@ -1442,7 +1447,7 @@ and SolveRelevantMemberConstraintsForTypar (csenv:ConstraintSolverEnv) ndeep per
14421447
cxs
14431448
|> AtLeastOneD(fun(traitInfo,m2)->
14441449
letcsenv={ csenvwith m= m2}
1445-
SolveMemberConstraint csenv permitWeakResolution(ndeep+1) m2 trace traitInfo)
1450+
SolveMemberConstraint csenvtruepermitWeakResolution(ndeep+1) m2 trace traitInfo)
14461451

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

19691976
andprivateSolveTypEqualsTypWithReport(csenv:ConstraintSolverEnv)ndeep m trace cxsln ty1 ty2=
19701977
TryD(fun()-> SolveTypEqualsTypKeepAbbrevsWithCxsln csenv ndeep m trace cxsln ty1 ty2)
1971-
(fun res-> ErrorD(ErrorFromAddingTypeEquation(csenv.g, csenv.DisplayEnv, ty1, ty2, res, m)))
1978+
(function
1979+
| LocallyAbortOperationThatFailsToResolveOverload-> CompleteD
1980+
| res-> ErrorD(ErrorFromAddingTypeEquation(csenv.g, csenv.DisplayEnv, ty1, ty2, res, m)))
19721981

19731982
andArgsMustSubsumeOrConvert
19741983
(csenv:ConstraintSolverEnv)
@@ -2534,7 +2543,7 @@ let AddCxTypeMustSubsumeType contextInfo denv css m trace ty1 ty2 =
25342543
|> RaiseOperationResult
25352544

25362545
letAddCxMethodConstraint denv css m trace traitInfo=
2537-
TryD(fun()-> SolveMemberConstraint(MakeConstraintSolverEnv ContextInfo.NoContext css m denv)false0 m trace traitInfo++(fun _-> CompleteD))
2546+
TryD(fun()-> SolveMemberConstraint(MakeConstraintSolverEnv ContextInfo.NoContext css m denv)truefalse0 m trace traitInfo++(fun _-> CompleteD))
25382547
(fun res-> ErrorD(ErrorFromAddingConstraint(denv, res, m)))
25392548
|> RaiseOperationResult
25402549

@@ -2592,7 +2601,7 @@ let CodegenWitnessThatTypSupportsTraitConstraint tcVal g amap m (traitInfo:Trait
25922601
InfoReader=new InfoReader(g, amap)}
25932602

25942603
letcsenv= MakeConstraintSolverEnv ContextInfo.NoContext css m(DisplayEnv.Empty g)
2595-
SolveMemberConstraint csenvtrue0 m NoTrace traitInfo++(fun _res->
2604+
SolveMemberConstraint csenvtruetrue0 m NoTrace traitInfo++(fun _res->
25962605
letsln=
25972606
match traitInfo.Solutionwith
25982607
| None-> Choice4Of4()
@@ -2717,4 +2726,5 @@ let IsApplicableMethApprox g amap m (minfo:MethInfo) availObjTy =
27172726
|> CommitOperationResult
27182727
|_->true
27192728
else
2720-
true
2729+
true
2730+

‎tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/OverloadsAndSRTPs01.fs‎

Lines changed: 0 additions & 38 deletions
This file was deleted.

‎tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/RecursiveOverload01.fs‎

Lines changed: 0 additions & 26 deletions
This file was deleted.

‎tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/SlowOverloadResolution.fs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// #Conformance #DeclarationElements #MemberDefinitions #Overloading
22
// https://github.com/Microsoft/visualfsharp/issues/351 - slow overlaod resolution
3-
//<Expectsx x-first x-last">FS0001" status="error">No overloads match</Expects>
3+
//<Expectsx x-first x-last">FS0003" status="error">This value is not a function and cannot be applied</Expects>
44
typeSwitcher= Switcher
55

66
let inlinechecker<^s,^rwhen(^s or ^r):(static member pass:^r->unit)>(s:^s)(r:^r)=()
@@ -22,4 +22,4 @@ let main argv =
2222
letres:unit= format()"text"5"more text"()
2323
printfn"%A" res
2424
System.Console.ReadKey()
25-
0// return an integer exit code
25+
0// return an integer exit code

‎tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ NOMONO,NoMTSOURCE=ConsumeOverloadGenericMethods.fs SCFLAGS="-r:lib.dll" PRECMD=
2727
SOURCE=InferenceForLambdaArgs.fs# InferenceForLambdaArgs.fs
2828

2929
SOURCE=SlowOverloadResolution.fs# SlowOverloadResolution.fs
30-
SOURCE=RecursiveOverload01.fs# RecursiveOverload01.fs
31-
SOURCE=OverloadsAndSRTPs01.fs# OverloadsAndSRTPs01.fs
3230

3331
SOURCE=E_OverloadCurriedFunc.fs# E_OverloadCurriedFunc.fs
3432
SOURCE=NoWarningWhenOverloadingInSubClass01.fs SCFLAGS="--warnaserror"# NoWarningWhenOverloadingInSubClass01.fs

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp