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

Commit6f8f5f2

Browse files
realvictorprmKevinRansom
authored andcommitted
[CompilerPerf] Pretify ConstrainsSolver method (#5141)
* Pretify ConstrainsSolver methodThe method wasn't readable at all before now it's better.* applied reviewSigned-off-by: realvictorprm <mueller.vpr@gmail.com>
1 parentd28b35d commit6f8f5f2

File tree

2 files changed

+77
-70
lines changed

2 files changed

+77
-70
lines changed

‎src/fsharp/ConstraintSolver.fs‎

Lines changed: 74 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1900,81 +1900,85 @@ and CanMemberSigsMatchUpToCheck
19001900
(subsumeArg:CalledArg->CallerArg<_>->OperationResult<unit>)// used to compare the arguments for compatibility
19011901
reqdRetTyOpt
19021902
(calledMeth:CalledMeth<_>):ImperativeOperationResult=
1903-
1904-
letg= csenv.g
1905-
letamap= csenv.amap
1906-
letm= csenv.m
1903+
trackErrors{
1904+
letg= csenv.g
1905+
letamap= csenv.amap
1906+
letm= csenv.m
19071907

1908-
letminfo= calledMeth.Method
1909-
letminst= calledMeth.CalledTyArgs
1910-
letuminst= calledMeth.CallerTyArgs
1911-
letcallerObjArgTys= calledMeth.CallerObjArgTys
1912-
letassignedItemSetters= calledMeth.AssignedItemSetters
1913-
letunnamedCalledOptArgs= calledMeth.UnnamedCalledOptArgs
1914-
letunnamedCalledOutArgs= calledMeth.UnnamedCalledOutArgs
1915-
1916-
// First equate the method instantiation (if any) with the method type parameters
1917-
if minst.Length<> uminst.LengththenErrorD(Error(FSComp.SR.csTypeInstantiationLengthMismatch(), m))else
1918-
1919-
Iterate2D unifyTypes minst uminst++(fun()->
1920-
1921-
ifnot(permitOptArgs|| isNil unnamedCalledOptArgs)thenErrorD(Error(FSComp.SR.csOptionalArgumentNotPermittedHere(), m))else
1922-
1923-
1924-
letcalledObjArgTys= calledMeth.CalledObjArgTys(m)
1908+
letminfo= calledMeth.Method
1909+
letminst= calledMeth.CalledTyArgs
1910+
letuminst= calledMeth.CallerTyArgs
1911+
letcallerObjArgTys= calledMeth.CallerObjArgTys
1912+
letassignedItemSetters= calledMeth.AssignedItemSetters
1913+
letunnamedCalledOptArgs= calledMeth.UnnamedCalledOptArgs
1914+
letunnamedCalledOutArgs= calledMeth.UnnamedCalledOutArgs
1915+
1916+
// First equate the method instantiation (if any) with the method type parameters
1917+
if minst.Length<> uminst.Lengththen
1918+
return! ErrorD(Error(FSComp.SR.csTypeInstantiationLengthMismatch(), m))
1919+
else
1920+
do! Iterate2D unifyTypes minst uminst
1921+
ifnot(permitOptArgs|| isNil unnamedCalledOptArgs)then
1922+
return! ErrorD(Error(FSComp.SR.csOptionalArgumentNotPermittedHere(), m))
1923+
else
1924+
letcalledObjArgTys= calledMeth.CalledObjArgTys(m)
19251925

1926-
// Check all the argument types.
1926+
// Check all the argument types.
19271927

1928-
if calledObjArgTys.Length<> callerObjArgTys.Lengththen
1929-
if(calledObjArgTys.Length<>0)then
1930-
ErrorD(Error(FSComp.SR.csMemberIsNotStatic(minfo.LogicalName), m))
1931-
else
1932-
ErrorD(Error(FSComp.SR.csMemberIsNotInstance(minfo.LogicalName), m))
1933-
else
1934-
Iterate2D subsumeTypes calledObjArgTys callerObjArgTys++(fun()->
1935-
(calledMeth.ArgSets|> IterateD(fun argSet->
1936-
if argSet.UnnamedCalledArgs.Length<> argSet.UnnamedCallerArgs.Lengththen ErrorD(Error(FSComp.SR.csArgumentLengthMismatch(), m))else
1937-
Iterate2D subsumeArg argSet.UnnamedCalledArgs argSet.UnnamedCallerArgs))++(fun()->
1938-
(calledMeth.ParamArrayCalledArgOpt|> OptionD(fun calledArg->
1939-
if isArray1DTy g calledArg.CalledArgumentTypethen
1940-
letparamArrayElemTy= destArrayTy g calledArg.CalledArgumentType
1941-
letreflArgInfo= calledArg.ReflArgInfo// propgate the reflected-arg info to each param array argument
1942-
calledMeth.ParamArrayCallerArgs|> OptionD(IterateD(fun callerArg-> subsumeArg(CalledArg((0,0),false, NotOptional, NoCallerInfo,false,false, None, reflArgInfo, paramArrayElemTy)) callerArg))
1943-
else
1944-
CompleteD)
1945-
1946-
)++(fun()->
1947-
(calledMeth.ArgSets|> IterateD(fun argSet->
1948-
argSet.AssignedNamedArgs|> IterateD(fun arg-> subsumeArg arg.CalledArg arg.CallerArg)))++(fun()->
1949-
(assignedItemSetters|> IterateD(fun(AssignedItemSetter(_,item,caller))->
1950-
letname,calledArgTy=
1951-
match itemwith
1952-
| AssignedPropSetter(_, pminfo, pminst)->
1953-
letcalledArgTy= List.head(List.head(pminfo.GetParamTypes(amap, m, pminst)))
1954-
pminfo.LogicalName, calledArgTy
1955-
1956-
| AssignedILFieldSetter(finfo)->
1957-
(* Get or set instance IL field*)
1958-
letcalledArgTy= finfo.FieldType(amap, m)
1959-
finfo.FieldName, calledArgTy
1928+
if calledObjArgTys.Length<> callerObjArgTys.Lengththen
1929+
if(calledObjArgTys.Length<>0)then
1930+
return! ErrorD(Error(FSComp.SR.csMemberIsNotStatic(minfo.LogicalName), m))
1931+
else
1932+
return! ErrorD(Error(FSComp.SR.csMemberIsNotInstance(minfo.LogicalName), m))
1933+
else
1934+
do! Iterate2D subsumeTypes calledObjArgTys callerObjArgTys
1935+
for argSetin calledMeth.ArgSetsdo
1936+
if argSet.UnnamedCalledArgs.Length<> argSet.UnnamedCallerArgs.Lengththen
1937+
return! ErrorD(Error(FSComp.SR.csArgumentLengthMismatch(), m))
1938+
else
1939+
do! Iterate2D subsumeArg argSet.UnnamedCalledArgs argSet.UnnamedCallerArgs
1940+
match calledMeth.ParamArrayCalledArgOptwith
1941+
| Some calledArg->
1942+
if isArray1DTy g calledArg.CalledArgumentTypethen
1943+
letparamArrayElemTy= destArrayTy g calledArg.CalledArgumentType
1944+
letreflArgInfo= calledArg.ReflArgInfo// propgate the reflected-arg info to each param array argument
1945+
match calledMeth.ParamArrayCallerArgswith
1946+
| Some args->
1947+
for callerArgin argsdo
1948+
do! subsumeArg(CalledArg((0,0),false, NotOptional, NoCallerInfo,false,false, None, reflArgInfo, paramArrayElemTy)) callerArg
1949+
|_->()
1950+
|_->()
1951+
for argSetin calledMeth.ArgSetsdo
1952+
for argin argSet.AssignedNamedArgsdo
1953+
do! subsumeArg arg.CalledArg arg.CallerArg
1954+
for(AssignedItemSetter(_, item, caller))in assignedItemSettersdo
1955+
letname,calledArgTy=
1956+
match itemwith
1957+
| AssignedPropSetter(_, pminfo, pminst)->
1958+
letcalledArgTy= List.head(List.head(pminfo.GetParamTypes(amap, m, pminst)))
1959+
pminfo.LogicalName, calledArgTy
1960+
1961+
| AssignedILFieldSetter(finfo)->
1962+
(* Get or set instance IL field*)
1963+
letcalledArgTy= finfo.FieldType(amap, m)
1964+
finfo.FieldName, calledArgTy
19601965

1961-
| AssignedRecdFieldSetter(rfinfo)->
1962-
letcalledArgTy= rfinfo.FieldType
1963-
rfinfo.Name, calledArgTy
1966+
| AssignedRecdFieldSetter(rfinfo)->
1967+
letcalledArgTy= rfinfo.FieldType
1968+
rfinfo.Name, calledArgTy
19641969

1965-
subsumeArg(CalledArg((-1,0),false, NotOptional, NoCallerInfo,false,false, Some(mkSynId m name), ReflectedArgInfo.None, calledArgTy)) caller)))++(fun()->
1966-
1967-
// - Always take the return type into account for
1968-
// -- op_Explicit, op_Implicit
1969-
// -- methods using tupling of unfilled out args
1970-
// - Never take into account return type information for constructors
1971-
match reqdRetTyOptwith
1972-
| None-> CompleteD
1973-
| Some_when minfo.IsConstructor-> CompleteD
1974-
| Some_whennot alwaysCheckReturn&& isNil unnamedCalledOutArgs-> CompleteD
1975-
| Some reqdRetTy->
1976-
letmethodRetTy= calledMeth.CalledReturnTypeAfterOutArgTupling
1977-
unifyTypes reqdRetTy methodRetTy)))))
1970+
do! subsumeArg(CalledArg((-1,0),false, NotOptional, NoCallerInfo,false,false, Some(mkSynId m name), ReflectedArgInfo.None, calledArgTy)) caller
1971+
// - Always take the return type into account for
1972+
// -- op_Explicit, op_Implicit
1973+
// -- methods using tupling of unfilled out args
1974+
// - Never take into account return type information for constructors
1975+
match reqdRetTyOptwith
1976+
| Some_when(minfo.IsConstructor||not alwaysCheckReturn&& isNil unnamedCalledOutArgs)->()
1977+
| Some reqdRetTy->
1978+
letmethodRetTy= calledMeth.CalledReturnTypeAfterOutArgTupling
1979+
return! unifyTypes reqdRetTy methodRetTy
1980+
|_->()
1981+
}
19781982

19791983
// Assert a subtype constraint, and wrap an ErrorsFromAddingSubsumptionConstraint error around any failure
19801984
// to allow us to report the outer types involved in the constraint

‎src/fsharp/ErrorLogger.fs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,8 +570,11 @@ type TrackErrorsBuilder() =
570570
memberx.Return res= ResultD res
571571
memberx.ReturnFrom res= res
572572
memberx.For(seq,k)= IterateD k seq
573+
memberx.Combine(expr1,expr2)= expr1++ expr2
573574
memberx.While(gd,k)= WhileD gd k
574575
memberx.Zero()= CompleteD
576+
memberx.Delay(fn)=fun()-> fn()
577+
memberx.Run(fn)= fn()
575578

576579
lettrackErrors= TrackErrorsBuilder()
577580

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp