Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
9671d214
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,发现更多精彩内容 >>
提交
9671d214
编写于
6月 10, 2011
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement meta tag matching in creader. Start using it in rustc.rc. Close #459. Close #457.
上级
774c6d01
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
55 addition
and
10 deletion
+55
-10
src/comp/front/creader.rs
src/comp/front/creader.rs
+48
-2
src/comp/front/eval.rs
src/comp/front/eval.rs
+0
-3
src/comp/rustc.rc
src/comp/rustc.rc
+3
-1
src/test/run-pass/use-import-export.rs
src/test/run-pass/use-import-export.rs
+2
-2
src/test/run-pass/use.rs
src/test/run-pass/use.rs
+2
-2
未找到文件。
src/comp/front/creader.rs
浏览文件 @
9671d214
...
...
@@ -505,9 +505,54 @@ fn get_metadata_section(str filename) -> option::t[vec[u8]] {
ret
option
::
none
[
vec
[
u8
]];
}
fn
get_exported_metadata
(
&
session
::
session
sess
,
&
str
path
,
&
vec
[
u8
]
data
)
->
hashmap
[
str
,
str
]
{
auto
meta_items
=
ebml
::
get_doc
(
ebml
::
new_doc
(
data
),
metadata
::
tag_meta_export
);
auto
mm
=
common
::
new_str_hash
[
str
]();
fn
metadata_matches
(
&
vec
[
u8
]
data
,
for
each
(
ebml
::
doc
m
in
ebml
::
tagged_docs
(
meta_items
,
metadata
::
tag_meta_item
))
{
auto
kd
=
ebml
::
get_doc
(
m
,
metadata
::
tag_meta_item_key
);
auto
vd
=
ebml
::
get_doc
(
m
,
metadata
::
tag_meta_item_value
);
auto
k
=
str
::
unsafe_from_bytes
(
ebml
::
doc_data
(
kd
));
auto
v
=
str
::
unsafe_from_bytes
(
ebml
::
doc_data
(
vd
));
log
#
fmt
(
"metadata in %s: %s = %s"
,
path
,
k
,
v
);
if
(
!
mm
.insert
(
k
,
v
))
{
sess
.warn
(
#
fmt
(
"Duplicate metadata item in %s: %s"
,
path
,
k
));
}
}
ret
mm
;
}
fn
metadata_matches
(
hashmap
[
str
,
str
]
mm
,
&
vec
[
@
ast
::
meta_item
]
metas
)
->
bool
{
log
#
fmt
(
"matching %u metadata requirements against %u metadata items"
,
vec
::
len
(
metas
),
mm
.size
());
for
(
@
ast
::
meta_item
mi
in
metas
)
{
alt
(
mm
.find
(
mi
.node.key
))
{
case
(
some
(
?
v
))
{
if
(
v
==
mi
.node.value
)
{
log
#
fmt
(
"matched '%s': '%s'"
,
mi
.node.key
,
mi
.node.value
);
}
else
{
log
#
fmt
(
"missing '%s': '%s' (got '%s')"
,
mi
.node.key
,
mi
.node.value
,
v
);
ret
false
;
}
}
case
(
none
)
{
log
#
fmt
(
"missing '%s': '%s'"
,
mi
.node.key
,
mi
.node.value
);
ret
false
;
}
}
}
ret
true
;
}
...
...
@@ -547,7 +592,8 @@ fn find_library_crate(&session::session sess,
alt
(
get_metadata_section
(
path
))
{
case
(
option
::
some
(
?
cvec
))
{
if
(
!
metadata_matches
(
cvec
,
metas
))
{
auto
mm
=
get_exported_metadata
(
sess
,
path
,
cvec
);
if
(
!
metadata_matches
(
mm
,
metas
))
{
log
#
fmt
(
"skipping %s, metadata doesn't match"
,
path
);
cont
;
}
...
...
src/comp/front/eval.rs
浏览文件 @
9671d214
...
...
@@ -419,9 +419,6 @@ fn eval_crate_directive(ctx cx,
}
case
(
ast
::
cdir_meta
(
?
vi
,
?
mi
))
{
// FIXME: we should actually record, for documentation-sake,
// the metadata that's not exported. It would be nice to have
// compiled-in to the target crate, not just in theh AST.
if
(
vi
==
ast
::
export_meta
)
{
cx
.sess
.add_metadata
(
mi
);
}
...
...
src/comp/rustc.rc
浏览文件 @
9671d214
...
...
@@ -10,7 +10,9 @@ meta (desc = "The Rust compiler",
license
=
"BSD"
);
use
std
;
use
std
(
name
=
"std"
,
vers
=
"0.1"
,
url
=
"http://rust-lang.org/src/std"
);
mod
middle
{
mod
trans
;
...
...
src/test/run-pass/use-import-export.rs
浏览文件 @
9671d214
mod
foo
{
export
x
;
use
std
(
ver
=
"0.
0.1"
);
use
std
(
ver
s
=
"
0.1"
);
fn
x
()
->
int
{
ret
1
;
}
}
mod
bar
{
use
std
(
ver
=
"0.
0.1"
);
use
std
(
ver
s
=
"
0.1"
);
export
y
;
fn
y
()
->
int
{
ret
1
;
}
}
...
...
src/test/run-pass/use.rs
浏览文件 @
9671d214
...
...
@@ -4,7 +4,7 @@
use
std
;
use
libc
();
use
zed
(
name
=
"std"
);
use
bar
(
name
=
"std"
,
ver
=
"0.
0.1"
);
use
bar
(
name
=
"std"
,
ver
s
=
"
0.1"
);
// FIXME: commented out since resolve doesn't know how to handle crates yet.
// import std::str;
...
...
@@ -14,7 +14,7 @@ mod baz {
use
std
;
use
libc
();
use
zed
(
name
=
"std"
);
use
bar
(
name
=
"std"
,
ver
=
"0.0.1"
);
use
bar
(
name
=
"std"
,
ver
s
=
"0.0.1"
);
// import std::str;
// import x = std::str;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录