Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
f134261a
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,发现更多精彩内容 >>
提交
f134261a
编写于
10月 21, 2011
作者:
M
Marijn Haverbeke
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support Ruby-style block argument syntax
Issue #1054
上级
ff813f84
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
12 deletion
+21
-12
src/comp/syntax/parse/parser.rs
src/comp/syntax/parse/parser.rs
+21
-12
未找到文件。
src/comp/syntax/parse/parser.rs
浏览文件 @
f134261a
...
...
@@ -781,6 +781,10 @@ fn mk_mac_expr(p: parser, lo: uint, hi: uint, m: ast::mac_) -> @ast::expr {
span
:
ast_util
::
mk_sp
(
lo
,
hi
)};
}
fn
is_bar
(
t
:
token
::
token
)
->
bool
{
alt
t
{
token
::
BINOP
(
token
::
OR
.
)
|
token
::
OROR
.
{
true
}
_
{
false
}
}
}
fn
parse_bottom_expr
(
p
:
parser
)
->
@
ast
::
expr
{
let
lo
=
p
.get_lo_pos
();
let
hi
=
p
.get_hi_pos
();
...
...
@@ -815,8 +819,7 @@ fn parse_bottom_expr(p: parser) -> @ast::expr {
hi
=
p
.get_hi_pos
();
expect
(
p
,
token
::
RBRACE
);
ex
=
ast
::
expr_rec
(
fields
,
base
);
}
else
if
p
.peek
()
==
token
::
BINOP
(
token
::
OR
)
||
p
.peek
()
==
token
::
OROR
{
}
else
if
is_bar
(
p
.peek
())
{
ret
parse_fn_block_expr
(
p
);
}
else
{
let
blk
=
parse_block_tail
(
p
,
lo
,
ast
::
default_blk
);
...
...
@@ -1061,10 +1064,8 @@ fn parse_dot_or_call_expr_with(p: parser, e: @ast::expr) -> @ast::expr {
ret
e
;
}
else
{
// Call expr.
let
es
=
parse_seq
(
token
::
LPAREN
,
token
::
RPAREN
,
some
(
token
::
COMMA
),
parse_expr
,
p
);
let
es
=
parse_seq
(
token
::
LPAREN
,
token
::
RPAREN
,
some
(
token
::
COMMA
),
parse_expr
,
p
);
hi
=
es
.span.hi
;
let
nd
=
ast
::
expr_call
(
e
,
es
.node
);
e
=
mk_expr
(
p
,
lo
,
hi
,
nd
);
...
...
@@ -1088,6 +1089,19 @@ fn parse_dot_or_call_expr_with(p: parser, e: @ast::expr) -> @ast::expr {
t
{
unexpected
(
p
,
t
);
}
}
}
token
::
LBRACE
. when
is_bar
(
p
.look_ahead
(
1u
))
{
p
.bump
();
let
blk
=
parse_fn_block_expr
(
p
);
alt
e
.node
{
ast
::
expr_call
(
f
,
args
)
{
e
=
@
{
node
:
ast
::
expr_call
(
f
,
args
+
[
blk
])
with
*
e
};
}
_
{
e
=
mk_expr
(
p
,
lo
,
p
.get_last_hi_pos
(),
ast
::
expr_call
(
e
,
[
blk
]));
}
}
}
_
{
ret
e
;
}
}
}
...
...
@@ -1394,11 +1408,6 @@ fn parse_initializer(p: parser) -> option::t<ast::initializer> {
p
.bump
();
ret
some
({
op
:
ast
::
init_move
,
expr
:
parse_expr
(
p
)});
}
// Now that the the channel is the first argument to receive,
// combining it with an initializer doesn't really make sense.
// case (token::RECV) {
...
...
@@ -1792,7 +1801,7 @@ fn parse_fn_decl(p: parser, purity: ast::purity, il: ast::inlineness) ->
fn
parse_fn_block_decl
(
p
:
parser
)
->
ast
::
fn_decl
{
let
inputs
=
if
p
.peek
()
==
token
::
OROR
{
p
.bump
();
;
p
.bump
();
[]
}
else
{
parse_seq
(
token
::
BINOP
(
token
::
OR
),
token
::
BINOP
(
token
::
OR
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录