Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
a8b1ea15
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,发现更多精彩内容 >>
提交
a8b1ea15
编写于
7月 11, 2011
作者:
T
Tim Chevalier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make the parser add correct spans to view_items
Closes #650.
上级
23d15203
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
30 deletion
+19
-30
src/comp/syntax/parse/parser.rs
src/comp/syntax/parse/parser.rs
+19
-30
未找到文件。
src/comp/syntax/parse/parser.rs
浏览文件 @
a8b1ea15
...
...
@@ -2291,25 +2291,20 @@ fn parse_optional_meta(&parser p) -> (@ast::meta_item)[] {
}
}
fn
parse_use
(
&
parser
p
)
->
@
ast
::
view_item
{
auto
lo
=
p
.get_last_lo_pos
();
fn
parse_use
(
&
parser
p
)
->
ast
::
view_item_
{
auto
ident
=
parse_ident
(
p
);
auto
metadata
=
parse_optional_meta
(
p
);
auto
hi
=
p
.get_hi_pos
();
expect
(
p
,
token
::
SEMI
);
auto
use_decl
=
ast
::
view_item_use
(
ident
,
metadata
,
p
.get_id
());
ret
@
spanned
(
lo
,
hi
,
use_decl
);
ret
ast
::
view_item_use
(
ident
,
metadata
,
p
.get_id
());
}
fn
parse_rest_import_name
(
&
parser
p
,
ast
::
ident
first
,
option
::
t
[
ast
::
ident
]
def_ident
)
->
@
ast
::
view_item
{
auto
lo
=
p
.get_lo_pos
();
ast
::
view_item_
{
let
ast
::
ident
[]
identifiers
=
~
[
first
];
let
bool
glob
=
false
;
while
(
true
)
{
alt
(
p
.peek
())
{
case
(
token
::
SEMI
)
{
p
.bump
();
break
;
}
case
(
token
::
SEMI
)
{
break
;
}
case
(
token
::
MOD_SEP
)
{
if
(
glob
)
{
p
.fatal
(
"cannot path into a glob"
);
}
p
.bump
();
...
...
@@ -2327,31 +2322,25 @@ fn parse_rest_import_name(&parser p, ast::ident first,
case
(
_
)
{
p
.fatal
(
"expecting an identifier, or '*'"
);
}
}
}
auto
hi
=
p
.get_hi_pos
();
auto
import_decl
;
alt
(
def_ident
)
{
case
(
some
(
?
i
))
{
if
(
glob
)
{
p
.fatal
(
"globbed imports can't be renamed"
);
}
import_decl
=
ast
::
view_item_import
(
i
,
identifiers
,
p
.get_id
());
ret
ast
::
view_item_import
(
i
,
identifiers
,
p
.get_id
());
}
case
(
_
)
{
if
(
glob
)
{
import_decl
=
ast
::
view_item_import_glob
(
identifiers
,
p
.get_id
());
ret
ast
::
view_item_import_glob
(
identifiers
,
p
.get_id
());
}
else
{
auto
len
=
ivec
::
len
(
identifiers
);
import_decl
=
ast
::
view_item_import
(
identifiers
.
(
len
-
1u
),
identifiers
,
ret
ast
::
view_item_import
(
identifiers
.
(
len
-
1u
),
identifiers
,
p
.get_id
());
}
}
}
ret
@
spanned
(
lo
,
hi
,
import_decl
);
}
fn
parse_full_import_name
(
&
parser
p
,
ast
::
ident
def_ident
)
->
@
ast
::
view_item
{
ast
::
view_item_
{
alt
(
p
.peek
())
{
case
(
token
::
IDENT
(
?
i
,
_
))
{
p
.bump
();
...
...
@@ -2362,7 +2351,7 @@ fn parse_full_import_name(&parser p, ast::ident def_ident) ->
fail
;
}
fn
parse_import
(
&
parser
p
)
->
@
ast
::
view_item
{
fn
parse_import
(
&
parser
p
)
->
ast
::
view_item_
{
alt
(
p
.peek
())
{
case
(
token
::
IDENT
(
?
i
,
_
))
{
p
.bump
();
...
...
@@ -2381,20 +2370,20 @@ fn parse_import(&parser p) -> @ast::view_item {
fail
;
}
fn
parse_export
(
&
parser
p
)
->
@
ast
::
view_item
{
auto
lo
=
p
.get_last_lo_pos
();
fn
parse_export
(
&
parser
p
)
->
ast
::
view_item_
{
auto
id
=
parse_ident
(
p
);
auto
hi
=
p
.get_hi_pos
();
expect
(
p
,
token
::
SEMI
);
ret
@
spanned
(
lo
,
hi
,
ast
::
view_item_export
(
id
,
p
.get_id
()));
ret
ast
::
view_item_export
(
id
,
p
.get_id
());
}
fn
parse_view_item
(
&
parser
p
)
->
@
ast
::
view_item
{
if
(
eat_word
(
p
,
"use"
))
{
ret
parse_use
(
p
);
}
else
if
(
eat_word
(
p
,
"import"
))
{
ret
parse_import
(
p
);
}
else
if
(
eat_word
(
p
,
"export"
))
{
ret
parse_export
(
p
);
}
else
{
fail
;
}
auto
lo
=
p
.get_lo_pos
();
auto
the_item
=
if
(
eat_word
(
p
,
"use"
))
{
parse_use
(
p
)
}
else
if
(
eat_word
(
p
,
"import"
))
{
parse_import
(
p
)
}
else
if
(
eat_word
(
p
,
"export"
))
{
parse_export
(
p
)
}
else
{
fail
};
auto
hi
=
p
.get_lo_pos
();
expect
(
p
,
token
::
SEMI
);
ret
@
spanned
(
lo
,
hi
,
the_item
);
}
fn
is_view_item
(
&
parser
p
)
->
bool
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录