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

Commit5a24b35

Browse files
forkiKevinRansom
authored andcommitted
Remove double lookups from ConstraintSolver (dotnet#4732)
1 parent4cfdb41 commit5a24b35

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

‎src/fsharp/ConstraintSolver.fs‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,7 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace
778778

779779
match sty1, sty2with
780780
// type vars inside forall-types may be alpha-equivalent
781-
| TType_var tp1, TType_var tp2when typarEq tp1 tp2||(aenv.EquivTypars.ContainsKey tp1&&typeEquiv gaenv.EquivTypars.[tp1] ty2)-> CompleteD
781+
| TType_var tp1, TType_var tp2when typarEq tp1 tp2||(matchaenv.EquivTypars.TryFind tp1with| Some vwhentypeEquiv gv ty2->true|_->false)-> CompleteD
782782

783783
| TType_var tp1, TType_var tp2when PreferUnifyTypar tp1 tp2-> SolveTyparEqualsTyp csenv ndeep m2 trace sty1 ty2
784784
| TType_var tp1, TType_var tp2whennot csenv.MatchingOnly&& PreferUnifyTypar tp2 tp1-> SolveTyparEqualsTyp csenv ndeep m2 trace sty2 ty1
@@ -850,12 +850,17 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra
850850
letaenv= csenv.EquivEnv
851851
letdenv= csenv.DisplayEnv
852852
match sty1, sty2with
853-
| TType_var tp1,_when aenv.EquivTypars.ContainsKey tp1->
854-
SolveTypSubsumesTyp csenv ndeep m2 trace cxsln aenv.EquivTypars.[tp1] ty2
855-
856-
| TType_var r1, TType_var r2when typarEq r1 r2-> CompleteD
853+
| TType_var tp1,_->
854+
match aenv.EquivTypars.TryFind tp1with
855+
| Some v-> SolveTypSubsumesTyp csenv ndeep m2 trace cxsln v ty2
856+
|_->
857+
match sty2with
858+
| TType_var r2when typarEq tp1 r2-> CompleteD
859+
| TType_var rwhennot csenv.MatchingOnly-> SolveTyparSubtypeOfType csenv ndeep m2 trace r ty1
860+
|_-> SolveTypEqualsTypKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ty1 ty2
861+
857862
|_, TType_var rwhennot csenv.MatchingOnly-> SolveTyparSubtypeOfType csenv ndeep m2 trace r ty1
858-
| TType_var_,_-> SolveTypEqualsTypKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ty1 ty2
863+
859864
| TType_tuple(tupInfo1, l1), TType_tuple(tupInfo2, l2)->
860865
if evalTupInfoIsStruct tupInfo1<> evalTupInfoIsStruct tupInfo2then ErrorD(ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m, m2))else
861866
SolveTypEqualsTypEqns csenv ndeep m2 trace cxsln l1 l2(* nb. can unify since no variance*)

‎src/fsharp/TastOps.fs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ type TyparMap<'T> =
4343
let(TPMap m)= tm
4444
m.ContainsKey(v.Stamp)
4545

46+
membertm.TryFind(v:Typar)=
47+
let(TPMap m)= tm
48+
m.TryFind(v.Stamp)
49+
4650
membertm.Add(v:Typar,x)=
4751
let(TPMap m)= tm
4852
TPMap(m.Add(v.Stamp, x))

‎src/fsharp/TastOps.fsi‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ type ValMultiMap<'T> =
306306
type TyparMap<'T>=
307307
memberItem:Typar->'T with get
308308
memberContainsKey:Typar->bool
309+
memberTryFind:Typar->'T option
309310
memberAdd:Typar* 'T-> TyparMap<'T>
310311
static member Empty: TyparMap<'T>
311312

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp