Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
48b14f55
R
Rust
项目概览
int
/
Rust
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
48b14f55
编写于
3月 06, 2013
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
librustc: Add #[link_args] to metadata
上级
d661711c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
50 addition
and
1 deletion
+50
-1
src/librustc/back/link.rs
src/librustc/back/link.rs
+9
-1
src/librustc/metadata/common.rs
src/librustc/metadata/common.rs
+3
-0
src/librustc/metadata/csearch.rs
src/librustc/metadata/csearch.rs
+7
-0
src/librustc/metadata/decoder.rs
src/librustc/metadata/decoder.rs
+9
-0
src/librustc/metadata/encoder.rs
src/librustc/metadata/encoder.rs
+22
-0
未找到文件。
src/librustc/back/link.rs
浏览文件 @
48b14f55
...
...
@@ -17,7 +17,7 @@
use
lib
::
llvm
::{
ModuleRef
,
mk_pass_manager
,
mk_target_data
,
True
,
False
};
use
lib
;
use
metadata
::
common
::
LinkMeta
;
use
metadata
::{
encoder
,
cstore
};
use
metadata
::{
encoder
,
cs
earch
,
cs
tore
};
use
middle
::
trans
::
common
::
CrateContext
;
use
middle
::
ty
;
use
util
::
ppaux
;
...
...
@@ -814,6 +814,14 @@ fn unlib(config: @session::config, +stem: ~str) -> ~str {
let
ula
=
cstore
::
get_used_link_args
(
cstore
);
for
ula
.each
|
arg
|
{
cc_args
.push
(
/*bad*/
copy
*
arg
);
}
// Add all the link args for external crates.
do
cstore
::
iter_crate_data
(
cstore
)
|
crate_num
,
_
|
{
let
link_args
=
csearch
::
get_link_args_for_crate
(
cstore
,
crate_num
);
do
vec
::
consume
(
link_args
)
|
_
,
link_arg
|
{
cc_args
.push
(
link_arg
);
}
}
// # Extern library linking
// User-supplied library search paths (-L on the cammand line) These are
...
...
src/librustc/metadata/common.rs
浏览文件 @
48b14f55
...
...
@@ -156,6 +156,9 @@ pub enum astencode_tag { // Reserves 0x50 -- 0x6f
pub
const
tag_items_data_item_struct_ctor
:
uint
=
0x77
;
pub
const
tag_items_data_item_visibility
:
uint
=
0x78
;
pub
const
tag_link_args
:
uint
=
0x79
;
pub
const
tag_link_args_arg
:
uint
=
0x7a
;
pub
struct
LinkMeta
{
name
:
@
str
,
vers
:
@
str
,
...
...
src/librustc/metadata/csearch.rs
浏览文件 @
48b14f55
...
...
@@ -237,6 +237,13 @@ pub fn get_method_visibility(cstore: @mut cstore::CStore,
decoder
::
get_method_visibility
(
cdata
,
def_id
.node
)
}
pub
fn
get_link_args_for_crate
(
cstore
:
@
mut
cstore
::
CStore
,
crate_num
:
ast
::
crate_num
)
->
~
[
~
str
]
{
let
cdata
=
cstore
::
get_crate_data
(
cstore
,
crate_num
);
decoder
::
get_link_args_for_crate
(
cdata
)
}
// Local Variables:
// mode: rust
// fill-column: 78;
...
...
src/librustc/metadata/decoder.rs
浏览文件 @
48b14f55
...
...
@@ -1131,6 +1131,15 @@ pub fn translate_def_id(cdata: cmd, did: ast::def_id) -> ast::def_id {
}
}
pub
fn
get_link_args_for_crate
(
cdata
:
cmd
)
->
~
[
~
str
]
{
let
link_args
=
reader
::
get_doc
(
reader
::
Doc
(
cdata
.data
),
tag_link_args
);
let
mut
result
=
~
[];
for
reader
::
tagged_docs
(
link_args
,
tag_link_args_arg
)
|
arg_doc
|
{
result
.push
(
reader
::
doc_as_str
(
arg_doc
));
}
result
}
// Local Variables:
// mode: rust
// fill-column: 78;
...
...
src/librustc/metadata/encoder.rs
浏览文件 @
48b14f55
...
...
@@ -74,6 +74,7 @@ struct Stats {
attr_bytes
:
uint
,
dep_bytes
:
uint
,
lang_item_bytes
:
uint
,
link_args_bytes
:
uint
,
item_bytes
:
uint
,
index_bytes
:
uint
,
zero_bytes
:
uint
,
...
...
@@ -1255,6 +1256,20 @@ fn encode_lang_items(ecx: @EncodeContext, ebml_w: writer::Encoder) {
ebml_w
.end_tag
();
// tag_lang_items
}
fn
encode_link_args
(
ecx
:
@
EncodeContext
,
ebml_w
:
writer
::
Encoder
)
{
ebml_w
.start_tag
(
tag_link_args
);
let
link_args
=
cstore
::
get_used_link_args
(
ecx
.cstore
);
for
link_args
.each
|
link_arg
|
{
ebml_w
.start_tag
(
tag_link_args_arg
);
ebml_w
.writer
.write_str
(
link_arg
.to_str
());
ebml_w
.end_tag
();
}
ebml_w
.end_tag
();
}
fn
encode_crate_dep
(
ecx
:
@
EncodeContext
,
ebml_w
:
writer
::
Encoder
,
dep
:
decoder
::
crate_dep
)
{
ebml_w
.start_tag
(
tag_crate_dep
);
...
...
@@ -1291,6 +1306,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] {
attr_bytes
:
0
,
dep_bytes
:
0
,
lang_item_bytes
:
0
,
link_args_bytes
:
0
,
item_bytes
:
0
,
index_bytes
:
0
,
zero_bytes
:
0
,
...
...
@@ -1329,6 +1345,11 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] {
encode_lang_items
(
ecx
,
ebml_w
);
ecx
.stats.lang_item_bytes
=
wr
.pos
-
i
;
// Encode the link args.
i
=
wr
.pos
;
encode_link_args
(
ecx
,
ebml_w
);
ecx
.stats.link_args_bytes
=
wr
.pos
-
i
;
// Encode and index the items.
ebml_w
.start_tag
(
tag_items
);
i
=
wr
.pos
;
...
...
@@ -1359,6 +1380,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &crate) -> ~[u8] {
io
::
println
(
fmt!
(
" attribute bytes: %u"
,
ecx
.stats.attr_bytes
));
io
::
println
(
fmt!
(
" dep bytes: %u"
,
ecx
.stats.dep_bytes
));
io
::
println
(
fmt!
(
" lang item bytes: %u"
,
ecx
.stats.lang_item_bytes
));
io
::
println
(
fmt!
(
" link args bytes: %u"
,
ecx
.stats.link_args_bytes
));
io
::
println
(
fmt!
(
" item bytes: %u"
,
ecx
.stats.item_bytes
));
io
::
println
(
fmt!
(
" index bytes: %u"
,
ecx
.stats.index_bytes
));
io
::
println
(
fmt!
(
" zero bytes: %u"
,
ecx
.stats.zero_bytes
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录