Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
2999479a
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,发现更多精彩内容 >>
提交
2999479a
编写于
1月 25, 2012
作者:
B
Brian Anderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rustc: Allow attributes on enum variants. Closes #1663
上级
08c6cb5f
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
45 addition
and
4 deletion
+45
-4
src/comp/syntax/ast.rs
src/comp/syntax/ast.rs
+2
-2
src/comp/syntax/fold.rs
src/comp/syntax/fold.rs
+8
-1
src/comp/syntax/parse/parser.rs
src/comp/syntax/parse/parser.rs
+5
-1
src/comp/syntax/print/pprust.rs
src/comp/syntax/print/pprust.rs
+1
-0
src/test/run-pass/variant-attributes.rs
src/test/run-pass/variant-attributes.rs
+29
-0
未找到文件。
src/comp/syntax/ast.rs
浏览文件 @
2999479a
...
...
@@ -418,8 +418,8 @@ enum native_abi {
type
variant_arg
=
{
ty
:
@
ty
,
id
:
node_id
};
type
variant_
=
{
name
:
ident
,
a
rgs
:
[
variant_arg
],
id
:
node_id
,
disr_expr
:
option
::
t
<@
expr
>
};
type
variant_
=
{
name
:
ident
,
a
ttrs
:
[
attribute
],
args
:
[
variant_arg
]
,
id
:
node_id
,
disr_expr
:
option
::
t
<@
expr
>
};
type
variant
=
spanned
<
variant_
>
;
...
...
src/comp/syntax/fold.rs
浏览文件 @
2999479a
...
...
@@ -441,11 +441,18 @@ fn fold_variant_arg_(va: variant_arg, fld: ast_fold) -> variant_arg {
}
let
fold_variant_arg
=
bind
fold_variant_arg_
(
_
,
fld
);
let
args
=
vec
::
map
(
v
.args
,
fold_variant_arg
);
let
fold_meta_item
=
bind
fold_meta_item_
(
_
,
fld
);
let
fold_attribute
=
bind
fold_attribute_
(
_
,
fold_meta_item
);
let
attrs
=
vec
::
map
(
v
.attrs
,
fold_attribute
);
let
de
=
alt
v
.disr_expr
{
some
(
e
)
{
some
(
fld
.fold_expr
(
e
))}
none
{
none
}
};
ret
{
name
:
v
.name
,
args
:
args
,
id
:
v
.id
,
ret
{
name
:
v
.name
,
attrs
:
attrs
,
args
:
args
,
id
:
v
.id
,
disr_expr
:
de
};
}
...
...
src/comp/syntax/parse/parser.rs
浏览文件 @
2999479a
...
...
@@ -2042,6 +2042,7 @@ fn parse_item_enum(p: parser, attrs: [ast::attribute]) -> @ast::item {
let
variant
=
spanned
(
ty
.span.lo
,
ty
.span.hi
,
{
name
:
id
,
attrs
:
[],
args
:
[{
ty
:
ty
,
id
:
p
.get_id
()}],
id
:
p
.get_id
(),
disr_expr
:
none
});
...
...
@@ -2049,9 +2050,11 @@ fn parse_item_enum(p: parser, attrs: [ast::attribute]) -> @ast::item {
ast
::
item_enum
([
variant
],
ty_params
),
attrs
);
}
expect
(
p
,
token
::
LBRACE
);
let
all_nullary
=
true
,
have_disr
=
false
;
while
p
.token
!=
token
::
RBRACE
{
let
variant_attrs
=
parse_outer_attributes
(
p
);
let
vlo
=
p
.span.lo
;
let
ident
=
parse_value_ident
(
p
);
let
args
=
[],
disr_expr
=
none
;
...
...
@@ -2068,7 +2071,8 @@ fn parse_item_enum(p: parser, attrs: [ast::attribute]) -> @ast::item {
disr_expr
=
some
(
parse_expr
(
p
));
}
let
vr
=
{
name
:
ident
,
args
:
args
,
id
:
p
.get_id
(),
let
vr
=
{
name
:
ident
,
attrs
:
variant_attrs
,
args
:
args
,
id
:
p
.get_id
(),
disr_expr
:
disr_expr
};
variants
+=
[
spanned
(
vlo
,
p
.last_span.hi
,
vr
)];
...
...
src/comp/syntax/print/pprust.rs
浏览文件 @
2999479a
...
...
@@ -434,6 +434,7 @@ fn print_item(s: ps, &&item: @ast::item) {
for
v
:
ast
::
variant
in
variants
{
space_if_not_bol
(
s
);
maybe_print_comment
(
s
,
v
.span.lo
);
print_outer_attributes
(
s
,
v
.node.attrs
);
ibox
(
s
,
indent_unit
);
word
(
s
.s
,
v
.node.name
);
if
vec
::
len
(
v
.node.args
)
>
0u
{
...
...
src/test/run-pass/variant-attributes.rs
0 → 100644
浏览文件 @
2999479a
// pp-exact - Make sure we actually print the attributes
enum
crew_of_enterprise_d
{
#[captain]
jean_luc_picard
,
#[commander]
william_t_riker
,
#[chief_medical_officer]
beverly_crusher
,
#[ships_councellor]
deanna_troi
,
#[lieutenant_commander]
data
,
#[chief_of_security]
worf
,
#[chief_engineer]
geordi_la_forge
,
}
fn
boldly_go
(
_
crew_member
:
crew_of_enterprise_d
,
_
where
:
str
)
{
}
fn
main
()
{
boldly_go
(
worf
,
"where no one has gone before"
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录