Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
f03c0366
R
Rust
项目概览
int
/
Rust
接近 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f03c0366
编写于
7月 03, 2018
作者:
N
Niko Matsakis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add "free region helpers"
上级
dddd4075
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
32 addition
and
14 deletion
+32
-14
src/librustc/ty/fold.rs
src/librustc/ty/fold.rs
+32
-14
未找到文件。
src/librustc/ty/fold.rs
浏览文件 @
f03c0366
...
...
@@ -253,13 +253,34 @@ pub fn fold_regions<T>(
value
.fold_with
(
&
mut
RegionFolder
::
new
(
self
,
skipped_regions
,
&
mut
f
))
}
pub
fn
for_each_free_region
<
T
,
F
>
(
self
,
value
:
&
T
,
callback
:
F
)
where
F
:
FnMut
(
ty
::
Region
<
'tcx
>
),
T
:
TypeFoldable
<
'tcx
>
,
{
value
.visit_with
(
&
mut
RegionVisitor
{
/// Invoke `callback` on every region appearing free in `value`.
pub
fn
for_each_free_region
(
self
,
value
:
&
impl
TypeFoldable
<
'tcx
>
,
mut
callback
:
impl
FnMut
(
ty
::
Region
<
'tcx
>
),
)
{
self
.any_free_region_meets
(
value
,
|
r
|
{
callback
(
r
);
false
});
}
/// True if `callback` returns true for every region appearing free in `value`.
pub
fn
all_free_regions_meet
(
self
,
value
:
&
impl
TypeFoldable
<
'tcx
>
,
mut
callback
:
impl
FnMut
(
ty
::
Region
<
'tcx
>
)
->
bool
,
)
->
bool
{
!
self
.any_free_region_meets
(
value
,
|
r
|
!
callback
(
r
))
}
/// True if `callback` returns true for some region appearing free in `value`.
pub
fn
any_free_region_meets
(
self
,
value
:
&
impl
TypeFoldable
<
'tcx
>
,
callback
:
impl
FnMut
(
ty
::
Region
<
'tcx
>
)
->
bool
,
)
->
bool
{
return
value
.visit_with
(
&
mut
RegionVisitor
{
outer_index
:
ty
::
INNERMOST
,
callback
});
...
...
@@ -287,25 +308,22 @@ struct RegionVisitor<F> {
}
impl
<
'tcx
,
F
>
TypeVisitor
<
'tcx
>
for
RegionVisitor
<
F
>
where
F
:
FnMut
(
ty
::
Region
<
'tcx
>
)
where
F
:
FnMut
(
ty
::
Region
<
'tcx
>
)
->
bool
{
fn
visit_binder
<
T
:
TypeFoldable
<
'tcx
>>
(
&
mut
self
,
t
:
&
Binder
<
T
>
)
->
bool
{
self
.outer_index
.shift_in
(
1
);
t
.skip_binder
()
.visit_with
(
self
);
let
result
=
t
.skip_binder
()
.visit_with
(
self
);
self
.outer_index
.shift_out
(
1
);
false
// keep visiting
result
}
fn
visit_region
(
&
mut
self
,
r
:
ty
::
Region
<
'tcx
>
)
->
bool
{
match
*
r
{
ty
::
ReLateBound
(
debruijn
,
_
)
if
debruijn
<
self
.outer_index
=>
{
/* ignore bound regions */
false
// ignore bound regions, keep visiting
}
_
=>
(
self
.callback
)(
r
),
}
false
// keep visiting
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录