Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
624a9b73
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,发现更多精彩内容 >>
提交
624a9b73
编写于
10月 28, 2016
作者:
J
Jeffrey Seyfried
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Avoid building multiple reduced graphs for a crate
that is referenced by multiple `extern crate` items.
上级
b0e13dc5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
15 addition
and
9 deletion
+15
-9
src/librustc_resolve/build_reduced_graph.rs
src/librustc_resolve/build_reduced_graph.rs
+13
-9
src/librustc_resolve/lib.rs
src/librustc_resolve/lib.rs
+2
-0
未找到文件。
src/librustc_resolve/build_reduced_graph.rs
浏览文件 @
624a9b73
...
...
@@ -24,7 +24,7 @@
use
rustc
::
middle
::
cstore
::
LoadedMacros
;
use
rustc
::
hir
::
def
::
*
;
use
rustc
::
hir
::
def_id
::{
CRATE_DEF_INDEX
,
DefId
};
use
rustc
::
hir
::
def_id
::{
C
rateNum
,
C
RATE_DEF_INDEX
,
DefId
};
use
rustc
::
ty
;
use
rustc
::
util
::
nodemap
::
FxHashMap
;
...
...
@@ -233,14 +233,7 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, expansion: Mark) {
// n.b. we don't need to look at the path option here, because cstore already did
let
crate_id
=
self
.session.cstore
.extern_mod_stmt_cnum
(
item
.id
);
let
module
=
if
let
Some
(
crate_id
)
=
crate_id
{
let
def_id
=
DefId
{
krate
:
crate_id
,
index
:
CRATE_DEF_INDEX
,
};
let
module
=
self
.arenas
.alloc_module
(
ModuleS
{
populated
:
Cell
::
new
(
false
),
..
ModuleS
::
new
(
Some
(
parent
),
ModuleKind
::
Def
(
Def
::
Mod
(
def_id
),
name
))
});
let
module
=
self
.get_extern_crate_root
(
crate_id
);
let
binding
=
(
module
,
sp
,
ty
::
Visibility
::
Public
)
.to_name_binding
();
let
binding
=
self
.arenas
.alloc_name_binding
(
binding
);
let
directive
=
self
.arenas
.alloc_import_directive
(
ImportDirective
{
...
...
@@ -504,6 +497,17 @@ fn build_reduced_graph_for_external_crate_def(&mut self, parent: Module<'b>,
}
}
fn
get_extern_crate_root
(
&
mut
self
,
cnum
:
CrateNum
)
->
Module
<
'b
>
{
let
def_id
=
DefId
{
krate
:
cnum
,
index
:
CRATE_DEF_INDEX
};
let
arenas
=
self
.arenas
;
*
self
.extern_crate_roots
.entry
(
cnum
)
.or_insert_with
(||
{
arenas
.alloc_module
(
ModuleS
{
populated
:
Cell
::
new
(
false
),
..
ModuleS
::
new
(
None
,
ModuleKind
::
Def
(
Def
::
Mod
(
def_id
),
keywords
::
Invalid
.name
()))
})
})
}
/// Ensures that the reduced graph rooted at the given external module
/// is built, building it if it is not.
pub
fn
populate_module_if_necessary
(
&
mut
self
,
module
:
Module
<
'b
>
)
{
...
...
src/librustc_resolve/lib.rs
浏览文件 @
624a9b73
...
...
@@ -1083,6 +1083,7 @@ pub struct Resolver<'a> {
// There will be an anonymous module created around `g` with the ID of the
// entry block for `f`.
module_map
:
NodeMap
<
Module
<
'a
>>
,
extern_crate_roots
:
FxHashMap
<
CrateNum
,
Module
<
'a
>>
,
// Whether or not to print error messages. Can be set to true
// when getting additional info for error message suggestions,
...
...
@@ -1276,6 +1277,7 @@ pub fn new(session: &'a Session,
export_map
:
NodeMap
(),
trait_map
:
NodeMap
(),
module_map
:
module_map
,
extern_crate_roots
:
FxHashMap
(),
emit_errors
:
true
,
make_glob_map
:
make_glob_map
==
MakeGlobMap
::
Yes
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录