Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
1e329bf0
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,发现更多精彩内容 >>
提交
1e329bf0
编写于
6月 24, 2014
作者:
J
John Clements
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
don't expand subexprs of for loop, just re-expand whole thing.
Fixes #15167
上级
d2adb7cf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
6 addition
and
5 deletion
+6
-5
src/libsyntax/ext/expand.rs
src/libsyntax/ext/expand.rs
+6
-5
未找到文件。
src/libsyntax/ext/expand.rs
浏览文件 @
1e329bf0
...
...
@@ -132,8 +132,6 @@ pub fn expand_expr(e: Gc<ast::Expr>, fld: &mut MacroExpander) -> Gc<ast::Expr> {
ast
::
ExprForLoop
(
src_pat
,
src_expr
,
src_loop_block
,
opt_ident
)
=>
{
// Expand any interior macros etc.
// NB: we don't fold pats yet. Curious.
let
src_expr
=
fld
.fold_expr
(
src_expr
)
.clone
();
let
(
src_loop_block
,
opt_ident
)
=
expand_loop_block
(
src_loop_block
,
opt_ident
,
fld
);
let
span
=
e
.span
;
...
...
@@ -143,7 +141,7 @@ pub fn expand_expr(e: Gc<ast::Expr>, fld: &mut MacroExpander) -> Gc<ast::Expr> {
// i => {
// ['<ident>:] loop {
// match i.next() {
// None => break,
// None => break
['<ident>]
,
// Some(mut value) => {
// let <src_pat> = value;
// <src_loop_block>
...
...
@@ -163,7 +161,7 @@ pub fn expand_expr(e: Gc<ast::Expr>, fld: &mut MacroExpander) -> Gc<ast::Expr> {
let
local_path
=
fld
.cx
.path_ident
(
span
,
local_ident
);
let
some_path
=
fld
.cx
.path_ident
(
span
,
fld
.cx
.ident_of
(
"Some"
));
// `None => break ['<ident>]
;
`
// `None => break ['<ident>]
,
`
let
none_arm
=
{
let
break_expr
=
fld
.cx
.expr
(
span
,
ast
::
ExprBreak
(
opt_ident
));
let
none_pat
=
fld
.cx
.pat_ident
(
span
,
none_ident
);
...
...
@@ -222,7 +220,9 @@ pub fn expand_expr(e: Gc<ast::Expr>, fld: &mut MacroExpander) -> Gc<ast::Expr> {
let
discrim
=
fld
.cx
.expr_mut_addr_of
(
span
,
src_expr
);
let
i_pattern
=
fld
.cx
.pat_ident
(
span
,
local_ident
);
let
arm
=
fld
.cx
.arm
(
span
,
vec!
(
i_pattern
),
loop_expr
);
fld
.cx
.expr_match
(
span
,
discrim
,
vec!
(
arm
))
// why these clone()'s everywhere? I guess I'll follow the pattern....
let
match_expr
=
fld
.cx
.expr_match
(
span
,
discrim
,
vec!
(
arm
));
fld
.fold_expr
(
match_expr
)
.clone
()
}
ast
::
ExprLoop
(
loop_block
,
opt_ident
)
=>
{
...
...
@@ -1248,6 +1248,7 @@ fn a(){g!(z)}",
// FIXME #9384, match variable hygiene. Should expand into
// fn z() {match 8 {x_1 => {match 9 {x_2 | x_2 => x_2 + x_1}}}}
#[ignore]
#[test]
fn
issue_9384
(){
run_renaming_test
(
&
(
"macro_rules! bad_macro (($ex:expr) => ({match 9 {x | x => x + $ex}}))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录