Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
5a24b354
F
fsharp
项目概览
dotNET Platform
/
fsharp
12 个月 前同步成功
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
fsharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5a24b354
编写于
4月 19, 2018
作者:
S
Steffen Forkmann
提交者:
Kevin Ransom (msft)
4月 19, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove double lookups from ConstraintSolver (#4732)
上级
4cfdb417
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
16 addition
and
6 deletion
+16
-6
src/fsharp/ConstraintSolver.fs
src/fsharp/ConstraintSolver.fs
+11
-6
src/fsharp/TastOps.fs
src/fsharp/TastOps.fs
+4
-0
src/fsharp/TastOps.fsi
src/fsharp/TastOps.fsi
+1
-0
未找到文件。
src/fsharp/ConstraintSolver.fs
浏览文件 @
5a24b354
...
...
@@ -778,7 +778,7 @@ and SolveTypEqualsTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace
match
sty1
,
sty2
with
// type vars inside forall-types may be alpha-equivalent
|
TType_var
tp1
,
TType_var
tp2
when
typarEq
tp1
tp2
||
(
aenv
.
EquivTypars
.
ContainsKey
tp1
&&
typeEquiv
g
aenv
.
EquivTypars
.[
tp1
]
ty2
)
->
CompleteD
|
TType_var
tp1
,
TType_var
tp2
when
typarEq
tp1
tp2
||
(
match
aenv
.
EquivTypars
.
TryFind
tp1
with
|
Some
v
when
typeEquiv
g
v
ty2
->
true
|
_
->
false
)
->
CompleteD
|
TType_var
tp1
,
TType_var
tp2
when
PreferUnifyTypar
tp1
tp2
->
SolveTyparEqualsTyp
csenv
ndeep
m2
trace
sty1
ty2
|
TType_var
tp1
,
TType_var
tp2
when
not
csenv
.
MatchingOnly
&&
PreferUnifyTypar
tp2
tp1
->
SolveTyparEqualsTyp
csenv
ndeep
m2
trace
sty2
ty1
...
...
@@ -850,12 +850,17 @@ and SolveTypSubsumesTyp (csenv:ConstraintSolverEnv) ndeep m2 (trace: OptionalTra
let
aenv
=
csenv
.
EquivEnv
let
denv
=
csenv
.
DisplayEnv
match
sty1
,
sty2
with
|
TType_var
tp1
,
_
when
aenv
.
EquivTypars
.
ContainsKey
tp1
->
SolveTypSubsumesTyp
csenv
ndeep
m2
trace
cxsln
aenv
.
EquivTypars
.[
tp1
]
ty2
|
TType_var
r1
,
TType_var
r2
when
typarEq
r1
r2
->
CompleteD
|
TType_var
tp1
,
_
->
match
aenv
.
EquivTypars
.
TryFind
tp1
with
|
Some
v
->
SolveTypSubsumesTyp
csenv
ndeep
m2
trace
cxsln
v
ty2
|
_
->
match
sty2
with
|
TType_var
r2
when
typarEq
tp1
r2
->
CompleteD
|
TType_var
r
when
not
csenv
.
MatchingOnly
->
SolveTyparSubtypeOfType
csenv
ndeep
m2
trace
r
ty1
|
_
->
SolveTypEqualsTypKeepAbbrevsWithCxsln
csenv
ndeep
m2
trace
cxsln
ty1
ty2
|
_,
TType_var
r
when
not
csenv
.
MatchingOnly
->
SolveTyparSubtypeOfType
csenv
ndeep
m2
trace
r
ty1
|
TType_var
_
,
_
->
SolveTypEqualsTypKeepAbbrevsWithCxsln
csenv
ndeep
m2
trace
cxsln
ty1
ty2
|
TType_tuple
(
tupInfo1
,
l1
)
,
TType_tuple
(
tupInfo2
,
l2
)
->
if
evalTupInfoIsStruct
tupInfo1
<>
evalTupInfoIsStruct
tupInfo2
then
ErrorD
(
ConstraintSolverError
(
FSComp
.
SR
.
tcTupleStructMismatch
()
,
csenv
.
m
,
m2
))
else
SolveTypEqualsTypEqns
csenv
ndeep
m2
trace
cxsln
l1
l2
(* nb. can unify since no variance *)
...
...
src/fsharp/TastOps.fs
浏览文件 @
5a24b354
...
...
@@ -43,6 +43,10 @@ type TyparMap<'T> =
let
(
TPMap
m
)
=
tm
m
.
ContainsKey
(
v
.
Stamp
)
member
tm
.
TryFind
(
v
:
Typar
)
=
let
(
TPMap
m
)
=
tm
m
.
TryFind
(
v
.
Stamp
)
member
tm
.
Add
(
v
:
Typar
,
x
)
=
let
(
TPMap
m
)
=
tm
TPMap
(
m
.
Add
(
v
.
Stamp
,
x
))
...
...
src/fsharp/TastOps.fsi
浏览文件 @
5a24b354
...
...
@@ -306,6 +306,7 @@ type ValMultiMap<'T> =
type
TyparMap
<
'
T
>
=
member
Item
:
Typar
->
'
T
with
get
member
ContainsKey
:
Typar
->
bool
member
TryFind
:
Typar
->
'
T
option
member
Add
:
Typar
*
'
T
->
TyparMap
<
'
T
>
static
member
Empty
:
TyparMap
<
'
T
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录