Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
98e8c2ef
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,发现更多精彩内容 >>
提交
98e8c2ef
编写于
11月 24, 2010
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rustc: Parse type-parametric tags
上级
f809375b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
21 addition
and
13 deletion
+21
-13
src/comp/front/ast.rs
src/comp/front/ast.rs
+1
-1
src/comp/front/parser.rs
src/comp/front/parser.rs
+13
-8
src/comp/middle/fold.rs
src/comp/middle/fold.rs
+7
-4
未找到文件。
src/comp/front/ast.rs
浏览文件 @
98e8c2ef
...
...
@@ -171,7 +171,7 @@
item_fn
(
ident
,
_
fn
,
vec
[
ty_param
],
def_id
,
ann
);
item_mod
(
ident
,
_
mod
,
def_id
);
item_ty
(
ident
,
@
ty
,
def_id
,
ann
);
item_tag
(
ident
,
vec
[
variant
],
def_id
);
item_tag
(
ident
,
vec
[
variant
],
vec
[
ty_param
],
def_id
);
}
...
...
src/comp/front/parser.rs
浏览文件 @
98e8c2ef
...
...
@@ -1039,17 +1039,21 @@ fn spanned[T](&span lo, &span hi, &T node) -> ast.spanned[T] {
ret
spanned
(
stmts
.span
,
stmts
.span
,
b
);
}
impure
fn
parse_item_fn
(
parser
p
)
->
tup
(
ast
.ident
,
@
ast
.item
)
{
auto
lo
=
p
.get_span
();
expect
(
p
,
token
.FN
);
auto
id
=
parse_ident
(
p
);
impure
fn
parse_ty_params
(
parser
p
)
->
vec
[
ast
.ty_param
]
{
let
vec
[
ast
.ty_param
]
ty_params
=
vec
();
if
(
p
.peek
()
==
token
.LBRACKET
)
{
auto
pg
=
parse_ident
;
// FIXME: pass as lval directly
auto
f
=
parse_ident
;
// FIXME: pass as lval directly
ty_params
=
parse_seq
[
ast
.ty_param
](
token
.LBRACKET
,
token
.RBRACKET
,
some
(
token
.COMMA
),
pg
,
p
)
.node
;
some
(
token
.COMMA
),
f
,
p
)
.node
;
}
ret
ty_params
;
}
impure
fn
parse_item_fn
(
parser
p
)
->
tup
(
ast
.ident
,
@
ast
.item
)
{
auto
lo
=
p
.get_span
();
expect
(
p
,
token
.FN
);
auto
id
=
parse_ident
(
p
);
auto
ty_params
=
parse_ty_params
(
p
);
auto
pf
=
parse_arg
;
let
util
.common.spanned
[
vec
[
ast
.arg
]]
inputs
=
...
...
@@ -1120,6 +1124,7 @@ fn spanned[T](&span lo, &span hi, &T node) -> ast.spanned[T] {
auto
lo
=
p
.get_span
();
expect
(
p
,
token
.TAG
);
auto
id
=
parse_ident
(
p
);
auto
ty_params
=
parse_ty_params
(
p
);
let
vec
[
ast
.variant
]
variants
=
vec
();
expect
(
p
,
token
.LBRACE
);
...
...
@@ -1158,7 +1163,7 @@ fn spanned[T](&span lo, &span hi, &T node) -> ast.spanned[T] {
p
.bump
();
auto
hi
=
p
.get_span
();
auto
item
=
ast
.item_tag
(
id
,
variants
,
p
.next_def_id
());
auto
item
=
ast
.item_tag
(
id
,
variants
,
ty_params
,
p
.next_def_id
());
ret
tup
(
id
,
@
spanned
(
lo
,
hi
,
item
));
}
...
...
src/comp/middle/fold.rs
浏览文件 @
98e8c2ef
...
...
@@ -170,6 +170,7 @@
(
fn
(
&
ENV
e
,
&
span
sp
,
ident
ident
,
vec
[
ast
.variant
]
variants
,
vec
[
ast
.ty_param
]
ty_params
,
def_id
id
)
->
@
item
)
fold_item_tag
,
// Additional nodes.
...
...
@@ -554,7 +555,7 @@ fn fold_item[ENV](&ENV env, ast_fold[ENV] fld, @item i) -> @item {
ret
fld
.fold_item_ty
(
env_
,
i
.span
,
ident
,
ty_
,
id
,
ann
);
}
case
(
ast
.item_tag
(
?
ident
,
?
variants
,
?
id
))
{
case
(
ast
.item_tag
(
?
ident
,
?
variants
,
?
ty_params
,
?
id
))
{
let
vec
[
ast
.variant
]
new_variants
=
vec
();
for
(
ast
.variant
v
in
variants
)
{
let
vec
[
@
ast
.ty
]
new_args
=
vec
();
...
...
@@ -563,7 +564,8 @@ fn fold_item[ENV](&ENV env, ast_fold[ENV] fld, @item i) -> @item {
}
new_variants
+=
rec
(
name
=
v
.name
,
args
=
new_args
);
}
ret
fld
.fold_item_tag
(
env_
,
i
.span
,
ident
,
new_variants
,
id
);
ret
fld
.fold_item_tag
(
env_
,
i
.span
,
ident
,
new_variants
,
ty_params
,
id
);
}
}
...
...
@@ -817,8 +819,9 @@ fn identity_fold_item_ty[ENV](&ENV e, &span sp, ident i,
fn
identity_fold_item_tag
[
ENV
](
&
ENV
e
,
&
span
sp
,
ident
i
,
vec
[
ast
.variant
]
variants
,
vec
[
ast
.ty_param
]
ty_params
,
def_id
id
)
->
@
item
{
ret
@
respan
(
sp
,
ast
.item_tag
(
i
,
variants
,
id
));
ret
@
respan
(
sp
,
ast
.item_tag
(
i
,
variants
,
ty_params
,
id
));
}
...
...
@@ -939,7 +942,7 @@ fn new_identity_fold[ENV]() -> ast_fold[ENV] {
fold_item_fn
=
bind
identity_fold_item_fn
[
ENV
](
_
,
_
,
_
,
_
,
_
,
_
,
_
),
fold_item_mod
=
bind
identity_fold_item_mod
[
ENV
](
_
,
_
,
_
,
_
,
_
),
fold_item_ty
=
bind
identity_fold_item_ty
[
ENV
](
_
,
_
,
_
,
_
,
_
,
_
),
fold_item_tag
=
bind
identity_fold_item_tag
[
ENV
](
_
,
_
,
_
,
_
,
_
),
fold_item_tag
=
bind
identity_fold_item_tag
[
ENV
](
_
,
_
,
_
,
_
,
_
,
_
),
fold_block
=
bind
identity_fold_block
[
ENV
](
_
,
_
,
_
),
fold_fn
=
bind
identity_fold_fn
[
ENV
](
_
,
_
,
_
,
_
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录