Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
c102d7fb
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,发现更多精彩内容 >>
提交
c102d7fb
编写于
10月 27, 2016
作者:
J
Jeffrey Seyfried
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Clean up `CrateSource`.
上级
624a9b73
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
27 addition
and
68 deletion
+27
-68
src/librustc/middle/cstore.rs
src/librustc/middle/cstore.rs
+0
-1
src/librustc_metadata/creader.rs
src/librustc_metadata/creader.rs
+19
-30
src/librustc_metadata/cstore.rs
src/librustc_metadata/cstore.rs
+7
-36
src/librustc_metadata/cstore_impl.rs
src/librustc_metadata/cstore_impl.rs
+1
-1
未找到文件。
src/librustc/middle/cstore.rs
浏览文件 @
c102d7fb
...
...
@@ -61,7 +61,6 @@ pub struct LinkMeta {
pub
struct
CrateSource
{
pub
dylib
:
Option
<
(
PathBuf
,
PathKind
)
>
,
pub
rlib
:
Option
<
(
PathBuf
,
PathKind
)
>
,
pub
cnum
:
CrateNum
,
}
#[derive(Copy,
Debug,
PartialEq,
Clone,
RustcEncodable,
RustcDecodable)]
...
...
src/librustc_metadata/creader.rs
浏览文件 @
c102d7fb
...
...
@@ -37,7 +37,7 @@
use
syntax
::
attr
;
use
syntax
::
ext
::
base
::
SyntaxExtension
;
use
syntax
::
parse
::
token
::{
InternedString
,
intern
};
use
syntax_pos
::{
self
,
Span
,
mk_sp
};
use
syntax_pos
::{
Span
,
DUMMY_SP
,
mk_sp
};
use
log
;
pub
struct
Library
{
...
...
@@ -56,16 +56,14 @@ pub struct CrateLoader<'a> {
fn
dump_crates
(
cstore
:
&
CStore
)
{
info!
(
"resolved crates:"
);
cstore
.iter_crate_data
_origins
(|
_
,
data
,
opt_source
|
{
cstore
.iter_crate_data
(|
_
,
data
|
{
info!
(
" name: {}"
,
data
.name
());
info!
(
" cnum: {}"
,
data
.cnum
);
info!
(
" hash: {}"
,
data
.hash
());
info!
(
" reqd: {}"
,
data
.explicitly_linked
.get
());
opt_source
.map
(|
cs
|
{
let
CrateSource
{
dylib
,
rlib
,
cnum
:
_
}
=
cs
;
dylib
.map
(|
dl
|
info!
(
" dylib: {}"
,
dl
.0
.display
()));
rlib
.map
(|
rl
|
info!
(
" rlib: {}"
,
rl
.0
.display
()));
});
let
CrateSource
{
dylib
,
rlib
}
=
data
.source
.clone
();
dylib
.map
(|
dl
|
info!
(
" dylib: {}"
,
dl
.0
.display
()));
rlib
.map
(|
rl
|
info!
(
" rlib: {}"
,
rl
.0
.display
()));
})
}
...
...
@@ -261,8 +259,7 @@ fn register_crate(&mut self,
span
:
Span
,
lib
:
Library
,
explicitly_linked
:
bool
)
->
(
CrateNum
,
Rc
<
cstore
::
CrateMetadata
>
,
cstore
::
CrateSource
)
{
->
(
CrateNum
,
Rc
<
cstore
::
CrateMetadata
>
)
{
info!
(
"register crate `extern crate {} as {}`"
,
name
,
ident
);
let
crate_root
=
lib
.metadata
.get_root
();
self
.verify_no_symbol_conflicts
(
span
,
&
crate_root
);
...
...
@@ -303,17 +300,14 @@ fn register_crate(&mut self,
cnum
:
cnum
,
codemap_import_info
:
RefCell
::
new
(
vec!
[]),
explicitly_linked
:
Cell
::
new
(
explicitly_linked
),
source
:
cstore
::
CrateSource
{
dylib
:
dylib
,
rlib
:
rlib
,
},
});
let
source
=
cstore
::
CrateSource
{
dylib
:
dylib
,
rlib
:
rlib
,
cnum
:
cnum
,
};
self
.cstore
.set_crate_data
(
cnum
,
cmeta
.clone
());
self
.cstore
.add_used_crate_source
(
source
.clone
());
(
cnum
,
cmeta
,
source
)
(
cnum
,
cmeta
)
}
fn
resolve_crate
(
&
mut
self
,
...
...
@@ -324,7 +318,7 @@ fn resolve_crate(&mut self,
span
:
Span
,
kind
:
PathKind
,
explicitly_linked
:
bool
)
->
(
CrateNum
,
Rc
<
cstore
::
CrateMetadata
>
,
cstore
::
CrateSource
)
{
->
(
CrateNum
,
Rc
<
cstore
::
CrateMetadata
>
)
{
info!
(
"resolving crate `extern crate {} as {}`"
,
name
,
ident
);
let
result
=
match
self
.existing_match
(
name
,
hash
,
kind
)
{
Some
(
cnum
)
=>
LoadResult
::
Previous
(
cnum
),
...
...
@@ -356,10 +350,8 @@ fn resolve_crate(&mut self,
match
result
{
LoadResult
::
Previous
(
cnum
)
=>
{
let
data
=
self
.cstore
.get_crate_data
(
cnum
);
if
explicitly_linked
&&
!
data
.explicitly_linked
.get
()
{
data
.explicitly_linked
.set
(
explicitly_linked
);
}
(
cnum
,
data
,
self
.cstore
.used_crate_source
(
cnum
))
data
.explicitly_linked
.set
(
explicitly_linked
||
data
.explicitly_linked
.get
());
(
cnum
,
data
)
}
LoadResult
::
Loaded
(
library
)
=>
{
self
.register_crate
(
root
,
ident
,
name
,
span
,
library
,
...
...
@@ -508,9 +500,8 @@ fn read_extension_crate(&mut self, span: Span, info: &ExternCrateInfo) -> Extens
let
(
dylib
,
metadata
)
=
match
library
{
LoadResult
::
Previous
(
cnum
)
=>
{
let
dylib
=
self
.cstore
.opt_used_crate_source
(
cnum
)
.unwrap
()
.dylib
;
let
data
=
self
.cstore
.get_crate_data
(
cnum
);
(
d
ylib
,
PMDSource
::
Registered
(
data
))
(
d
ata
.source.dylib
.clone
()
,
PMDSource
::
Registered
(
data
))
}
LoadResult
::
Loaded
(
library
)
=>
{
let
dylib
=
library
.dylib
.clone
();
...
...
@@ -754,9 +745,8 @@ fn inject_panic_runtime(&mut self, krate: &ast::Crate) {
};
info!
(
"panic runtime not found -- loading {}"
,
name
);
let
(
cnum
,
data
,
_
)
=
self
.resolve_crate
(
&
None
,
name
,
name
,
None
,
syntax_pos
::
DUMMY_SP
,
PathKind
::
Crate
,
false
);
let
(
cnum
,
data
)
=
self
.resolve_crate
(
&
None
,
name
,
name
,
None
,
DUMMY_SP
,
PathKind
::
Crate
,
false
);
// Sanity check the loaded crate to ensure it is indeed a panic runtime
// and the panic strategy is indeed what we thought it was.
...
...
@@ -836,9 +826,8 @@ fn inject_allocator_crate(&mut self) {
}
else
{
&
self
.sess.target.target.options.exe_allocation_crate
};
let
(
cnum
,
data
,
_
)
=
self
.resolve_crate
(
&
None
,
name
,
name
,
None
,
syntax_pos
::
DUMMY_SP
,
PathKind
::
Crate
,
false
);
let
(
cnum
,
data
)
=
self
.resolve_crate
(
&
None
,
name
,
name
,
None
,
DUMMY_SP
,
PathKind
::
Crate
,
false
);
// Sanity check the crate we loaded to ensure that it is indeed an
// allocator.
...
...
src/librustc_metadata/cstore.rs
浏览文件 @
c102d7fb
...
...
@@ -83,6 +83,8 @@ pub struct CrateMetadata {
/// where this is false is when an allocator crate is injected into the
/// dependency list, and therefore isn't actually needed to link an rlib.
pub
explicitly_linked
:
Cell
<
bool
>
,
pub
source
:
CrateSource
,
}
pub
struct
CachedInlinedItem
{
...
...
@@ -97,7 +99,6 @@ pub struct CStore {
metas
:
RefCell
<
FxHashMap
<
CrateNum
,
Rc
<
CrateMetadata
>>>
,
/// Map from NodeId's of local extern crate statements to crate numbers
extern_mod_crate_map
:
RefCell
<
NodeMap
<
CrateNum
>>
,
used_crate_sources
:
RefCell
<
Vec
<
CrateSource
>>
,
used_libraries
:
RefCell
<
Vec
<
(
String
,
NativeLibraryKind
)
>>
,
used_link_args
:
RefCell
<
Vec
<
String
>>
,
statically_included_foreign_items
:
RefCell
<
NodeSet
>
,
...
...
@@ -112,7 +113,6 @@ pub fn new(dep_graph: &DepGraph) -> CStore {
dep_graph
:
dep_graph
.clone
(),
metas
:
RefCell
::
new
(
FxHashMap
()),
extern_mod_crate_map
:
RefCell
::
new
(
FxHashMap
()),
used_crate_sources
:
RefCell
::
new
(
Vec
::
new
()),
used_libraries
:
RefCell
::
new
(
Vec
::
new
()),
used_link_args
:
RefCell
::
new
(
Vec
::
new
()),
statically_included_foreign_items
:
RefCell
::
new
(
NodeSet
()),
...
...
@@ -146,38 +146,9 @@ pub fn iter_crate_data<I>(&self, mut i: I)
}
}
/// Like `iter_crate_data`, but passes source paths (if available) as well.
pub
fn
iter_crate_data_origins
<
I
>
(
&
self
,
mut
i
:
I
)
where
I
:
FnMut
(
CrateNum
,
&
CrateMetadata
,
Option
<
CrateSource
>
)
{
for
(
&
k
,
v
)
in
self
.metas
.borrow
()
.iter
()
{
let
origin
=
self
.opt_used_crate_source
(
k
);
origin
.as_ref
()
.map
(|
cs
|
{
assert
!
(
k
==
cs
.cnum
);
});
i
(
k
,
&
v
,
origin
);
}
}
pub
fn
add_used_crate_source
(
&
self
,
src
:
CrateSource
)
{
let
mut
used_crate_sources
=
self
.used_crate_sources
.borrow_mut
();
if
!
used_crate_sources
.contains
(
&
src
)
{
used_crate_sources
.push
(
src
);
}
}
pub
fn
opt_used_crate_source
(
&
self
,
cnum
:
CrateNum
)
->
Option
<
CrateSource
>
{
self
.used_crate_sources
.borrow_mut
()
.iter
()
.find
(|
source
|
source
.cnum
==
cnum
)
.cloned
()
}
pub
fn
reset
(
&
self
)
{
self
.metas
.borrow_mut
()
.clear
();
self
.extern_mod_crate_map
.borrow_mut
()
.clear
();
self
.used_crate_sources
.borrow_mut
()
.clear
();
self
.used_libraries
.borrow_mut
()
.clear
();
self
.used_link_args
.borrow_mut
()
.clear
();
self
.statically_included_foreign_items
.borrow_mut
()
.clear
();
...
...
@@ -223,14 +194,14 @@ pub fn do_get_used_crates(&self,
}
info!
(
"topological ordering: {:?}"
,
ordering
);
ordering
.reverse
();
let
mut
libs
=
self
.
used_crate_source
s
let
mut
libs
=
self
.
meta
s
.borrow
()
.iter
()
.map
(|
src
|
{
(
src
.
cnum
,
.map
(|
(
&
cnum
,
data
)
|
{
(
cnum
,
match
prefer
{
LinkagePreference
::
RequireDynamic
=>
src
.dylib
.clone
()
.map
(|
p
|
p
.0
),
LinkagePreference
::
RequireStatic
=>
src
.rlib
.clone
()
.map
(|
p
|
p
.0
),
LinkagePreference
::
RequireDynamic
=>
data
.source
.dylib
.clone
()
.map
(|
p
|
p
.0
),
LinkagePreference
::
RequireStatic
=>
data
.source
.rlib
.clone
()
.map
(|
p
|
p
.0
),
})
})
.collect
::
<
Vec
<
_
>>
();
...
...
src/librustc_metadata/cstore_impl.rs
浏览文件 @
c102d7fb
...
...
@@ -507,7 +507,7 @@ fn used_crates(&self, prefer: LinkagePreference) -> Vec<(CrateNum, Option<PathBu
fn
used_crate_source
(
&
self
,
cnum
:
CrateNum
)
->
CrateSource
{
self
.
opt_used_crate_source
(
cnum
)
.unwrap
()
self
.
get_crate_data
(
cnum
)
.source
.clone
()
}
fn
extern_mod_stmt_cnum
(
&
self
,
emod_id
:
ast
::
NodeId
)
->
Option
<
CrateNum
>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录