Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
9386ea9d
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
9386ea9d
编写于
2月 20, 2022
作者:
M
Michael Goulet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove LifetimeDefOrigin
上级
bb548a91
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
41 addition
and
79 deletion
+41
-79
compiler/rustc_infer/src/infer/error_reporting/nice_region_error/find_anon_type.rs
...infer/error_reporting/nice_region_error/find_anon_type.rs
+8
-8
compiler/rustc_middle/src/middle/resolve_lifetime.rs
compiler/rustc_middle/src/middle/resolve_lifetime.rs
+3
-33
compiler/rustc_resolve/src/late/lifetimes.rs
compiler/rustc_resolve/src/late/lifetimes.rs
+25
-33
compiler/rustc_typeck/src/astconv/mod.rs
compiler/rustc_typeck/src/astconv/mod.rs
+2
-2
compiler/rustc_typeck/src/collect.rs
compiler/rustc_typeck/src/collect.rs
+1
-1
src/librustdoc/clean/mod.rs
src/librustdoc/clean/mod.rs
+2
-2
未找到文件。
compiler/rustc_infer/src/infer/error_reporting/nice_region_error/find_anon_type.rs
浏览文件 @
9386ea9d
...
...
@@ -125,7 +125,7 @@ fn visit_ty(&mut self, arg: &'tcx hir::Ty<'tcx>) {
// Find the index of the named region that was part of the
// error. We will then search the function parameters for a bound
// region at the right depth with the same index
(
Some
(
rl
::
Region
::
EarlyBound
(
_
,
id
,
_
)),
ty
::
BrNamed
(
def_id
,
_
))
=>
{
(
Some
(
rl
::
Region
::
EarlyBound
(
_
,
id
)),
ty
::
BrNamed
(
def_id
,
_
))
=>
{
debug!
(
"EarlyBound id={:?} def_id={:?}"
,
id
,
def_id
);
if
id
==
def_id
{
self
.found_type
=
Some
(
arg
);
...
...
@@ -137,7 +137,7 @@ fn visit_ty(&mut self, arg: &'tcx hir::Ty<'tcx>) {
// error. We will then search the function parameters for a bound
// region at the right depth with the same index
(
Some
(
rl
::
Region
::
LateBound
(
debruijn_index
,
_
,
id
,
_
)),
Some
(
rl
::
Region
::
LateBound
(
debruijn_index
,
_
,
id
)),
ty
::
BrNamed
(
def_id
,
_
),
)
=>
{
debug!
(
...
...
@@ -155,8 +155,8 @@ fn visit_ty(&mut self, arg: &'tcx hir::Ty<'tcx>) {
Some
(
rl
::
Region
::
Static
|
rl
::
Region
::
Free
(
_
,
_
)
|
rl
::
Region
::
EarlyBound
(
_
,
_
,
_
)
|
rl
::
Region
::
LateBound
(
_
,
_
,
_
,
_
)
|
rl
::
Region
::
EarlyBound
(
_
,
_
)
|
rl
::
Region
::
LateBound
(
_
,
_
,
_
)
|
rl
::
Region
::
LateBoundAnon
(
_
,
_
,
_
),
)
|
None
,
...
...
@@ -221,7 +221,7 @@ fn visit_lifetime(&mut self, lifetime: &hir::Lifetime) {
}
}
(
Some
(
rl
::
Region
::
EarlyBound
(
_
,
id
,
_
)),
ty
::
BrNamed
(
def_id
,
_
))
=>
{
(
Some
(
rl
::
Region
::
EarlyBound
(
_
,
id
)),
ty
::
BrNamed
(
def_id
,
_
))
=>
{
debug!
(
"EarlyBound id={:?} def_id={:?}"
,
id
,
def_id
);
if
id
==
def_id
{
self
.found_it
=
true
;
...
...
@@ -229,7 +229,7 @@ fn visit_lifetime(&mut self, lifetime: &hir::Lifetime) {
}
}
(
Some
(
rl
::
Region
::
LateBound
(
debruijn_index
,
_
,
id
,
_
)),
ty
::
BrNamed
(
def_id
,
_
))
=>
{
(
Some
(
rl
::
Region
::
LateBound
(
debruijn_index
,
_
,
id
)),
ty
::
BrNamed
(
def_id
,
_
))
=>
{
debug!
(
"FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}"
,
debruijn_index
,);
debug!
(
"id={:?}"
,
id
);
debug!
(
"def_id={:?}"
,
def_id
);
...
...
@@ -242,8 +242,8 @@ fn visit_lifetime(&mut self, lifetime: &hir::Lifetime) {
(
Some
(
rl
::
Region
::
Static
|
rl
::
Region
::
EarlyBound
(
_
,
_
,
_
)
|
rl
::
Region
::
LateBound
(
_
,
_
,
_
,
_
)
|
rl
::
Region
::
EarlyBound
(
_
,
_
)
|
rl
::
Region
::
LateBound
(
_
,
_
,
_
)
|
rl
::
Region
::
LateBoundAnon
(
_
,
_
,
_
)
|
rl
::
Region
::
Free
(
_
,
_
),
)
...
...
compiler/rustc_middle/src/middle/resolve_lifetime.rs
浏览文件 @
9386ea9d
...
...
@@ -4,44 +4,14 @@
use
rustc_data_structures
::
fx
::{
FxHashMap
,
FxHashSet
};
use
rustc_hir
::
def_id
::{
DefId
,
LocalDefId
};
use
rustc_hir
::{
GenericParam
,
ItemLocalId
};
use
rustc_hir
::{
GenericParamKind
,
LifetimeParamKind
};
use
rustc_hir
::
ItemLocalId
;
use
rustc_macros
::
HashStable
;
/// The origin of a named lifetime definition.
///
/// This is used to prevent the usage of in-band lifetimes in `Fn`/`fn` syntax.
#[derive(Copy,
Clone,
PartialEq,
Eq,
Hash,
TyEncodable,
TyDecodable,
Debug,
HashStable)]
pub
enum
LifetimeDefOrigin
{
// Explicit binders like `fn foo<'a>(x: &'a u8)` or elided like `impl Foo<&u32>`
ExplicitOrElided
,
// Some kind of erroneous origin
Error
,
}
impl
LifetimeDefOrigin
{
pub
fn
from_param
(
param
:
&
GenericParam
<
'_
>
)
->
Self
{
match
param
.kind
{
GenericParamKind
::
Lifetime
{
kind
}
=>
match
kind
{
LifetimeParamKind
::
Explicit
=>
LifetimeDefOrigin
::
ExplicitOrElided
,
LifetimeParamKind
::
Elided
=>
LifetimeDefOrigin
::
ExplicitOrElided
,
LifetimeParamKind
::
Error
=>
LifetimeDefOrigin
::
Error
,
},
_
=>
bug!
(
"expected a lifetime param"
),
}
}
}
#[derive(Clone,
Copy,
PartialEq,
Eq,
Hash,
TyEncodable,
TyDecodable,
Debug,
HashStable)]
pub
enum
Region
{
Static
,
EarlyBound
(
/* index */
u32
,
/* lifetime decl */
DefId
,
LifetimeDefOrigin
),
LateBound
(
ty
::
DebruijnIndex
,
/* late-bound index */
u32
,
/* lifetime decl */
DefId
,
LifetimeDefOrigin
,
),
EarlyBound
(
/* index */
u32
,
/* lifetime decl */
DefId
),
LateBound
(
ty
::
DebruijnIndex
,
/* late-bound index */
u32
,
/* lifetime decl */
DefId
),
LateBoundAnon
(
ty
::
DebruijnIndex
,
/* late-bound index */
u32
,
/* anon index */
u32
),
Free
(
DefId
,
/* lifetime decl */
DefId
),
}
...
...
compiler/rustc_resolve/src/late/lifetimes.rs
浏览文件 @
9386ea9d
// ignore-tidy-filelength
//! Name resolution for lifetimes.
//!
//! Name resolution for lifetimes follows *much* simpler rules than the
...
...
@@ -63,23 +62,18 @@ fn early(hir_map: Map<'_>, index: &mut u32, param: &GenericParam<'_>) -> (ParamN
let
i
=
*
index
;
*
index
+=
1
;
let
def_id
=
hir_map
.local_def_id
(
param
.hir_id
);
let
origin
=
LifetimeDefOrigin
::
from_param
(
param
);
debug!
(
"Region::early: index={} def_id={:?}"
,
i
,
def_id
);
(
param
.name
.normalize_to_macros_2_0
(),
Region
::
EarlyBound
(
i
,
def_id
.to_def_id
()
,
origin
))
(
param
.name
.normalize_to_macros_2_0
(),
Region
::
EarlyBound
(
i
,
def_id
.to_def_id
()))
}
fn
late
(
idx
:
u32
,
hir_map
:
Map
<
'_
>
,
param
:
&
GenericParam
<
'_
>
)
->
(
ParamName
,
Region
)
{
let
depth
=
ty
::
INNERMOST
;
let
def_id
=
hir_map
.local_def_id
(
param
.hir_id
);
let
origin
=
LifetimeDefOrigin
::
from_param
(
param
);
debug!
(
"Region::late: idx={:?}, param={:?} depth={:?} def_id={:?}
origin={:?}
"
,
idx
,
param
,
depth
,
def_id
,
origin
,
"Region::late: idx={:?}, param={:?} depth={:?} def_id={:?}"
,
idx
,
param
,
depth
,
def_id
,
);
(
param
.name
.normalize_to_macros_2_0
(),
Region
::
LateBound
(
depth
,
idx
,
def_id
.to_def_id
(),
origin
),
)
(
param
.name
.normalize_to_macros_2_0
(),
Region
::
LateBound
(
depth
,
idx
,
def_id
.to_def_id
()))
}
fn
late_anon
(
named_late_bound_vars
:
u32
,
index
:
&
Cell
<
u32
>
)
->
Region
{
...
...
@@ -93,7 +87,7 @@ fn id(&self) -> Option<DefId> {
match
*
self
{
Region
::
Static
|
Region
::
LateBoundAnon
(
..
)
=>
None
,
Region
::
EarlyBound
(
_
,
id
,
_
)
|
Region
::
LateBound
(
_
,
_
,
id
,
_
)
|
Region
::
Free
(
_
,
id
)
=>
{
Region
::
EarlyBound
(
_
,
id
)
|
Region
::
LateBound
(
_
,
_
,
id
)
|
Region
::
Free
(
_
,
id
)
=>
{
Some
(
id
)
}
}
...
...
@@ -101,8 +95,8 @@ fn id(&self) -> Option<DefId> {
fn
shifted
(
self
,
amount
:
u32
)
->
Region
{
match
self
{
Region
::
LateBound
(
debruijn
,
idx
,
id
,
origin
)
=>
{
Region
::
LateBound
(
debruijn
.shifted_in
(
amount
),
idx
,
id
,
origin
)
Region
::
LateBound
(
debruijn
,
idx
,
id
)
=>
{
Region
::
LateBound
(
debruijn
.shifted_in
(
amount
),
idx
,
id
)
}
Region
::
LateBoundAnon
(
debruijn
,
index
,
anon_index
)
=>
{
Region
::
LateBoundAnon
(
debruijn
.shifted_in
(
amount
),
index
,
anon_index
)
...
...
@@ -113,8 +107,8 @@ fn shifted(self, amount: u32) -> Region {
fn
shifted_out_to_binder
(
self
,
binder
:
ty
::
DebruijnIndex
)
->
Region
{
match
self
{
Region
::
LateBound
(
debruijn
,
index
,
id
,
origin
)
=>
{
Region
::
LateBound
(
debruijn
.shifted_out_to_binder
(
binder
),
index
,
id
,
origin
)
Region
::
LateBound
(
debruijn
,
index
,
id
)
=>
{
Region
::
LateBound
(
debruijn
.shifted_out_to_binder
(
binder
),
index
,
id
)
}
Region
::
LateBoundAnon
(
debruijn
,
index
,
anon_index
)
=>
{
Region
::
LateBoundAnon
(
debruijn
.shifted_out_to_binder
(
binder
),
index
,
anon_index
)
...
...
@@ -127,7 +121,7 @@ fn subst<'a, L>(self, mut params: L, map: &NamedRegionMap) -> Option<Region>
where
L
:
Iterator
<
Item
=
&
'a
hir
::
Lifetime
>
,
{
if
let
Region
::
EarlyBound
(
index
,
_
,
_
)
=
self
{
if
let
Region
::
EarlyBound
(
index
,
_
)
=
self
{
params
.nth
(
index
as
usize
)
.and_then
(|
lifetime
|
map
.defs
.get
(
&
lifetime
.hir_id
)
.cloned
())
}
else
{
Some
(
self
)
...
...
@@ -568,7 +562,7 @@ fn sub_items_have_self_param(node: &hir::ItemKind<'_>) -> bool {
fn
late_region_as_bound_region
<
'tcx
>
(
tcx
:
TyCtxt
<
'tcx
>
,
region
:
&
Region
)
->
ty
::
BoundVariableKind
{
match
region
{
Region
::
LateBound
(
_
,
_
,
def_id
,
_
)
=>
{
Region
::
LateBound
(
_
,
_
,
def_id
)
=>
{
let
name
=
tcx
.hir
()
.name
(
tcx
.hir
()
.local_def_id_to_hir_id
(
def_id
.expect_local
()));
ty
::
BoundVariableKind
::
Region
(
ty
::
BrNamed
(
*
def_id
,
name
))
}
...
...
@@ -1010,7 +1004,7 @@ fn visit_ty(&mut self, ty: &'tcx hir::Ty<'tcx>) {
// well-supported at the moment, so this doesn't work.
// In the future, this should be fixed and this error should be removed.
let
def
=
self
.map.defs
.get
(
&
lifetime
.hir_id
)
.cloned
();
let
Some
(
Region
::
LateBound
(
_
,
_
,
def_id
,
_
))
=
def
else
{
let
Some
(
Region
::
LateBound
(
_
,
_
,
def_id
))
=
def
else
{
continue
};
let
Some
(
def_id
)
=
def_id
.as_local
()
else
{
...
...
@@ -1046,7 +1040,7 @@ fn visit_ty(&mut self, ty: &'tcx hir::Ty<'tcx>) {
match
param
.kind
{
GenericParamKind
::
Lifetime
{
..
}
=>
{
let
(
name
,
reg
)
=
Region
::
early
(
self
.tcx
.hir
(),
&
mut
index
,
&
param
);
let
Region
::
EarlyBound
(
_
,
def_id
,
_
)
=
reg
else
{
let
Region
::
EarlyBound
(
_
,
def_id
)
=
reg
else
{
bug!
();
};
// We cannot predict what lifetimes are unused in opaque type.
...
...
@@ -1668,7 +1662,7 @@ fn compute_object_lifetime_defaults<'tcx>(
.map
(|
set
|
match
*
set
{
Set1
::
Empty
=>
"BaseDefault"
.into
(),
Set1
::
One
(
Region
::
Static
)
=>
"'static"
.into
(),
Set1
::
One
(
Region
::
EarlyBound
(
mut
i
,
_
,
_
))
=>
generics
Set1
::
One
(
Region
::
EarlyBound
(
mut
i
,
_
))
=>
generics
.params
.iter
()
.find_map
(|
param
|
match
param
.kind
{
...
...
@@ -1749,18 +1743,16 @@ fn add_bounds(set: &mut Set1<hir::LifetimeName>, bounds: &[hir::GenericBound<'_>
.params
.iter
()
.filter_map
(|
param
|
match
param
.kind
{
GenericParamKind
::
Lifetime
{
..
}
=>
Some
((
param
.hir_id
,
hir
::
LifetimeName
::
Param
(
param
.name
),
LifetimeDefOrigin
::
from_param
(
param
),
)),
GenericParamKind
::
Lifetime
{
..
}
=>
{
Some
((
param
.hir_id
,
hir
::
LifetimeName
::
Param
(
param
.name
)))
}
_
=>
None
,
})
.enumerate
()
.find
(|
&
(
_
,
(
_
,
lt_name
,
_
))|
lt_name
==
name
)
.map_or
(
Set1
::
Many
,
|(
i
,
(
id
,
_
,
origin
))|
{
.find
(|
&
(
_
,
(
_
,
lt_name
))|
lt_name
==
name
)
.map_or
(
Set1
::
Many
,
|(
i
,
(
id
,
_
))|
{
let
def_id
=
tcx
.hir
()
.local_def_id
(
id
);
Set1
::
One
(
Region
::
EarlyBound
(
i
as
u32
,
def_id
.to_def_id
()
,
origin
))
Set1
::
One
(
Region
::
EarlyBound
(
i
as
u32
,
def_id
.to_def_id
()))
})
}
}
...
...
@@ -1948,8 +1940,8 @@ fn check_uses_for_lifetimes_defined_by_scope(&mut self) {
let
def_ids
:
Vec
<
_
>
=
defined_by
.values
()
.flat_map
(|
region
|
match
region
{
Region
::
EarlyBound
(
_
,
def_id
,
_
)
|
Region
::
LateBound
(
_
,
_
,
def_id
,
_
)
Region
::
EarlyBound
(
_
,
def_id
)
|
Region
::
LateBound
(
_
,
_
,
def_id
)
|
Region
::
Free
(
_
,
def_id
)
=>
Some
(
*
def_id
),
Region
::
LateBoundAnon
(
..
)
|
Region
::
Static
=>
None
,
...
...
@@ -2883,7 +2875,7 @@ fn visit_param_bound(&mut self, bound: &hir::GenericBound<'_>) {
fn
visit_lifetime
(
&
mut
self
,
lifetime_ref
:
&
hir
::
Lifetime
)
{
if
let
Some
(
&
lifetime
)
=
self
.map.defs
.get
(
&
lifetime_ref
.hir_id
)
{
match
lifetime
{
Region
::
LateBound
(
debruijn
,
_
,
_
,
_
)
Region
::
LateBound
(
debruijn
,
_
,
_
)
|
Region
::
LateBoundAnon
(
debruijn
,
_
,
_
)
if
debruijn
<
self
.outer_index
=>
{
...
...
@@ -3289,8 +3281,8 @@ fn insert_lifetime(&mut self, lifetime_ref: &'tcx hir::Lifetime, def: Region) {
}
Region
::
Free
(
_
,
def_id
)
|
Region
::
LateBound
(
_
,
_
,
def_id
,
_
)
|
Region
::
EarlyBound
(
_
,
def_id
,
_
)
=>
{
|
Region
::
LateBound
(
_
,
_
,
def_id
)
|
Region
::
EarlyBound
(
_
,
def_id
)
=>
{
// A lifetime declared by the user.
let
track_lifetime_uses
=
self
.track_lifetime_uses
();
debug!
(
?
track_lifetime_uses
);
...
...
compiler/rustc_typeck/src/astconv/mod.rs
浏览文件 @
9386ea9d
...
...
@@ -205,7 +205,7 @@ pub fn ast_region_to_region(
let
r
=
match
tcx
.named_region
(
lifetime
.hir_id
)
{
Some
(
rl
::
Region
::
Static
)
=>
tcx
.lifetimes.re_static
,
Some
(
rl
::
Region
::
LateBound
(
debruijn
,
index
,
def_id
,
_
))
=>
{
Some
(
rl
::
Region
::
LateBound
(
debruijn
,
index
,
def_id
))
=>
{
let
name
=
lifetime_name
(
def_id
.expect_local
());
let
br
=
ty
::
BoundRegion
{
var
:
ty
::
BoundVar
::
from_u32
(
index
),
...
...
@@ -222,7 +222,7 @@ pub fn ast_region_to_region(
tcx
.mk_region
(
ty
::
ReLateBound
(
debruijn
,
br
))
}
Some
(
rl
::
Region
::
EarlyBound
(
index
,
id
,
_
))
=>
{
Some
(
rl
::
Region
::
EarlyBound
(
index
,
id
))
=>
{
let
name
=
lifetime_name
(
id
.expect_local
());
tcx
.mk_region
(
ty
::
ReEarlyBound
(
ty
::
EarlyBoundRegion
{
def_id
:
id
,
index
,
name
}))
}
...
...
compiler/rustc_typeck/src/collect.rs
浏览文件 @
9386ea9d
...
...
@@ -1375,7 +1375,7 @@ fn visit_lifetime(&mut self, lt: &'tcx hir::Lifetime) {
match
self
.tcx
.named_region
(
lt
.hir_id
)
{
Some
(
rl
::
Region
::
Static
|
rl
::
Region
::
EarlyBound
(
..
))
=>
{}
Some
(
rl
::
Region
::
LateBound
(
debruijn
,
_
,
_
,
_
)
rl
::
Region
::
LateBound
(
debruijn
,
_
,
_
)
|
rl
::
Region
::
LateBoundAnon
(
debruijn
,
_
,
_
),
)
if
debruijn
<
self
.outer_index
=>
{}
Some
(
...
...
src/librustdoc/clean/mod.rs
浏览文件 @
9386ea9d
...
...
@@ -193,8 +193,8 @@ impl Clean<Lifetime> for hir::Lifetime {
fn
clean
(
&
self
,
cx
:
&
mut
DocContext
<
'_
>
)
->
Lifetime
{
let
def
=
cx
.tcx
.named_region
(
self
.hir_id
);
if
let
Some
(
rl
::
Region
::
EarlyBound
(
_
,
node_id
,
_
)
|
rl
::
Region
::
LateBound
(
_
,
_
,
node_id
,
_
)
rl
::
Region
::
EarlyBound
(
_
,
node_id
)
|
rl
::
Region
::
LateBound
(
_
,
_
,
node_id
)
|
rl
::
Region
::
Free
(
_
,
node_id
),
)
=
def
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录