Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
6ae80273
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,发现更多精彩内容 >>
提交
6ae80273
编写于
4月 18, 2016
作者:
J
Jeffrey Seyfried
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
resolve: improve performance
上级
ed7c5679
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
11 deletion
+25
-11
src/librustc_resolve/lib.rs
src/librustc_resolve/lib.rs
+25
-11
未找到文件。
src/librustc_resolve/lib.rs
浏览文件 @
6ae80273
...
...
@@ -848,6 +848,9 @@ pub struct ModuleS<'a> {
glob_importers
:
RefCell
<
Vec
<
(
Module
<
'a
>
,
&
'a
ImportDirective
<
'a
>
)
>>
,
globs
:
RefCell
<
Vec
<&
'a
ImportDirective
<
'a
>>>
,
// Used to memoize the traits in this module for faster searches through all traits in scope.
traits
:
RefCell
<
Option
<
Box
<
[
&
'a
NameBinding
<
'a
>
]
>>>
,
// Whether this module is populated. If not populated, any attempt to
// access the children must be preceded with a
// `populate_module_if_necessary` call.
...
...
@@ -875,6 +878,7 @@ fn new(parent_link: ParentLink<'a>,
prelude
:
RefCell
::
new
(
None
),
glob_importers
:
RefCell
::
new
(
Vec
::
new
()),
globs
:
RefCell
::
new
((
Vec
::
new
())),
traits
:
RefCell
::
new
(
None
),
populated
:
Cell
::
new
(
!
external
),
arenas
:
arenas
}
...
...
@@ -3225,18 +3229,28 @@ fn add_trait_info(found_traits: &mut Vec<DefId>, trait_def_id: DefId, name: Name
let
mut
search_module
=
self
.current_module
;
loop
{
// Look for trait children.
let
mut
search_in_module
=
|
module
:
Module
<
'a
>
|
module
.for_each_child
(|
_
,
ns
,
binding
|
{
if
ns
!=
TypeNS
{
return
}
let
trait_def_id
=
match
binding
.def
()
{
Some
(
Def
::
Trait
(
trait_def_id
))
=>
trait_def_id
,
Some
(
..
)
|
None
=>
return
,
};
if
self
.trait_item_map
.contains_key
(
&
(
name
,
trait_def_id
))
{
add_trait_info
(
&
mut
found_traits
,
trait_def_id
,
name
);
let
trait_name
=
self
.get_trait_name
(
trait_def_id
);
self
.record_use
(
trait_name
,
TypeNS
,
binding
);
let
mut
search_in_module
=
|
module
:
Module
<
'a
>
|
{
let
mut
traits
=
module
.traits
.borrow_mut
();
if
traits
.is_none
()
{
let
mut
collected_traits
=
Vec
::
new
();
module
.for_each_child
(|
_
,
ns
,
binding
|
{
if
ns
!=
TypeNS
{
return
}
if
let
Some
(
Def
::
Trait
(
_
))
=
binding
.def
()
{
collected_traits
.push
(
binding
);
}
});
*
traits
=
Some
(
collected_traits
.into_boxed_slice
());
}
});
for
binding
in
traits
.as_ref
()
.unwrap
()
.iter
()
{
let
trait_def_id
=
binding
.def
()
.unwrap
()
.def_id
();
if
self
.trait_item_map
.contains_key
(
&
(
name
,
trait_def_id
))
{
add_trait_info
(
&
mut
found_traits
,
trait_def_id
,
name
);
let
trait_name
=
self
.get_trait_name
(
trait_def_id
);
self
.record_use
(
trait_name
,
TypeNS
,
binding
);
}
}
};
search_in_module
(
search_module
);
match
search_module
.parent_link
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录