Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
15d2759d
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,发现更多精彩内容 >>
提交
15d2759d
编写于
4月 12, 2018
作者:
V
varkor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rename `has_type_parameters` to `requires_monomorphization`
上级
a9622dc5
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
11 addition
and
9 deletion
+11
-9
src/librustc/ty/mod.rs
src/librustc/ty/mod.rs
+5
-3
src/librustc_metadata/encoder.rs
src/librustc_metadata/encoder.rs
+1
-1
src/librustc_mir/monomorphize/collector.rs
src/librustc_mir/monomorphize/collector.rs
+1
-1
src/librustc_mir/transform/const_prop.rs
src/librustc_mir/transform/const_prop.rs
+3
-3
src/librustc_trans/back/symbol_export.rs
src/librustc_trans/back/symbol_export.rs
+1
-1
未找到文件。
src/librustc/ty/mod.rs
浏览文件 @
15d2759d
...
...
@@ -819,13 +819,15 @@ pub fn types(&self) -> impl DoubleEndedIterator<Item = &TypeParameterDef> {
})
}
pub
fn
has_type_parameters
(
&
self
,
tcx
:
TyCtxt
<
'a
,
'gcx
,
'tcx
>
)
->
bool
{
if
self
.types
()
.count
()
!=
0
{
pub
fn
requires_monomorphization
(
&
self
,
tcx
:
TyCtxt
<
'a
,
'gcx
,
'tcx
>
)
->
bool
{
if
self
.params
.iter
()
.any
(|
p
|
{
if
let
GenericParam
::
Type
(
_
)
=
p
{
true
}
else
{
false
}
})
{
return
true
;
}
if
let
Some
(
parent_def_id
)
=
self
.parent
{
let
parent
=
tcx
.generics_of
(
parent_def_id
);
parent
.
has_type_parameters
(
tcx
)
parent
.
requires_monomorphization
(
tcx
)
}
else
{
false
}
...
...
src/librustc_metadata/encoder.rs
浏览文件 @
15d2759d
...
...
@@ -929,7 +929,7 @@ fn encode_info_for_impl_item(&mut self, def_id: DefId) -> Entry<'tcx> {
hir
::
ImplItemKind
::
Const
(
..
)
=>
true
,
hir
::
ImplItemKind
::
Method
(
ref
sig
,
_
)
=>
{
let
generics
=
self
.tcx
.generics_of
(
def_id
);
let
needs_inline
=
(
generics
.
has_type_parameters
(
self
.tcx
)
||
let
needs_inline
=
(
generics
.
requires_monomorphization
(
self
.tcx
)
||
tcx
.trans_fn_attrs
(
def_id
)
.requests_inline
())
&&
!
self
.metadata_output_only
();
let
is_const_fn
=
sig
.constness
==
hir
::
Constness
::
Const
;
...
...
src/librustc_mir/monomorphize/collector.rs
浏览文件 @
15d2759d
...
...
@@ -1076,7 +1076,7 @@ fn push_extra_entry_roots(&mut self) {
fn
item_has_type_parameters
<
'a
,
'tcx
>
(
tcx
:
TyCtxt
<
'a
,
'tcx
,
'tcx
>
,
def_id
:
DefId
)
->
bool
{
let
generics
=
tcx
.generics_of
(
def_id
);
generics
.
has_type_parameters
(
tcx
)
generics
.
requires_monomorphization
(
tcx
)
}
fn
create_mono_items_for_default_impls
<
'a
,
'tcx
>
(
tcx
:
TyCtxt
<
'a
,
'tcx
,
'tcx
>
,
...
...
src/librustc_mir/transform/const_prop.rs
浏览文件 @
15d2759d
...
...
@@ -184,7 +184,7 @@ fn eval_constant(&mut self, c: &Constant<'tcx>) -> Option<Const<'tcx>> {
// evaluate the promoted and replace the constant with the evaluated result
Literal
::
Promoted
{
index
}
=>
{
let
generics
=
self
.tcx
.generics_of
(
self
.source.def_id
);
if
generics
.
has_type_parameters
(
self
.tcx
)
{
if
generics
.
requires_monomorphization
(
self
.tcx
)
{
// FIXME: can't handle code with generics
return
None
;
}
...
...
@@ -295,7 +295,7 @@ fn const_prop(
self
.source.def_id
};
let
generics
=
self
.tcx
.generics_of
(
def_id
);
if
generics
.
has_type_parameters
(
self
.tcx
)
{
if
generics
.
requires_monomorphization
(
self
.tcx
)
{
// FIXME: can't handle code with generics
return
None
;
}
...
...
@@ -317,7 +317,7 @@ fn const_prop(
self
.source.def_id
};
let
generics
=
self
.tcx
.generics_of
(
def_id
);
if
generics
.
has_type_parameters
(
self
.tcx
)
{
if
generics
.
requires_monomorphization
(
self
.tcx
)
{
// FIXME: can't handle code with generics
return
None
;
}
...
...
src/librustc_trans/back/symbol_export.rs
浏览文件 @
15d2759d
...
...
@@ -117,7 +117,7 @@ fn reachable_non_generics_provider<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
})
=>
{
let
def_id
=
tcx
.hir
.local_def_id
(
node_id
);
let
generics
=
tcx
.generics_of
(
def_id
);
if
!
generics
.
has_type_parameters
(
tcx
)
&&
if
!
generics
.
requires_monomorphization
(
tcx
)
&&
// Functions marked with #[inline] are only ever translated
// with "internal" linkage and are never exported.
!
Instance
::
mono
(
tcx
,
def_id
)
.def
.requires_local
(
tcx
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录