Skip to content

Commit bef6fbe

Browse files
committed
Replace Ident with Name in for loops
cc rust-lang#6993
1 parent 3794d68 commit bef6fbe

File tree

6 files changed

+25
-25
lines changed

6 files changed

+25
-25
lines changed

src/librustc/middle/resolve.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5191,7 +5191,7 @@ impl Resolver {
51915191
let rib = label_ribs.get()[label_ribs.get().len() -
51925192
1];
51935193
let mut bindings = rib.bindings.borrow_mut();
5194-
bindings.get().insert(label.name, def_like);
5194+
bindings.get().insert(label, def_like);
51955195
}
51965196

51975197
visit::walk_expr(this, expr, ());

src/libsyntax/ast.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn P<T: 'static>(value: T) -> P<T> {
3333
}
3434

3535
// FIXME #6993: in librustc, uses of "ident" should be replaced
36-
// by just "Name".
36+
// with just "Name".
3737

3838
// an identifier contains a Name (index into the interner
3939
// table) and a SyntaxContext to track renaming and
@@ -551,11 +551,8 @@ pub enum Expr_ {
551551
ExprCast(@Expr, P<Ty>),
552552
ExprIf(@Expr, P<Block>, Option<@Expr>),
553553
ExprWhile(@Expr, P<Block>),
554-
// FIXME #6993: change to Option<Name>
555-
ExprForLoop(@Pat, @Expr, P<Block>, Option<Ident>),
556-
// Conditionless loop (can be exited with break, cont, or ret)
557-
// FIXME #6993: change to Option<Name>
558-
ExprLoop(P<Block>, Option<Ident>),
554+
ExprForLoop(@Pat, @Expr, P<Block>, Option<Name>),
555+
ExprLoop(P<Block>, Option<Name>),
559556
ExprMatch(@Expr, ~[Arm]),
560557
ExprFnBlock(P<FnDecl>, P<Block>),
561558
ExprProc(P<FnDecl>, P<Block>),

src/libsyntax/ext/expand.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr {
134134

135135
// Desugar expr_for_loop
136136
// From: `['<ident>:] for <src_pat> in <src_expr> <src_loop_block>`
137-
// FIXME #6993: change type of opt_ident to Option<Name>
138-
ast::ExprForLoop(src_pat, src_expr, src_loop_block, opt_ident) => {
137+
ast::ExprForLoop(src_pat, src_expr, src_loop_block, opt_name) => {
139138
// Expand any interior macros etc.
140139
// NB: we don't fold pats yet. Curious.
141140
let src_expr = fld.fold_expr(src_expr).clone();
@@ -165,8 +164,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr {
165164

166165
// `None => break ['<ident>];`
167166
let none_arm = {
168-
// FIXME #6993: this map goes away:
169-
let break_expr = fld.cx.expr(span, ast::ExprBreak(opt_ident.map(|x| x.name)));
167+
let break_expr = fld.cx.expr(span, ast::ExprBreak(opt_name));
170168
let none_pat = fld.cx.pat_ident(span, none_ident);
171169
fld.cx.arm(span, ~[none_pat], break_expr)
172170
};
@@ -188,7 +186,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr {
188186
// ['ident:] loop { ... }
189187
let loop_expr = fld.cx.expr(span,
190188
ast::ExprLoop(fld.cx.block_expr(match_expr),
191-
opt_ident));
189+
opt_name));
192190

193191
// `i => loop { ... }`
194192

src/libsyntax/fold.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,10 @@ pub trait Folder {
250250
i
251251
}
252252

253+
fn fold_name(&mut self, n: Name) -> Name {
254+
n
255+
}
256+
253257
fn fold_path(&mut self, p: &Path) -> Path {
254258
ast::Path {
255259
span: self.new_span(p.span),
@@ -763,15 +767,15 @@ pub fn noop_fold_expr<T: Folder>(e: @Expr, folder: &mut T) -> @Expr {
763767
ExprWhile(cond, body) => {
764768
ExprWhile(folder.fold_expr(cond), folder.fold_block(body))
765769
}
766-
ExprForLoop(pat, iter, body, ref maybe_ident) => {
770+
ExprForLoop(pat, iter, body, ref opt_name) => {
767771
ExprForLoop(folder.fold_pat(pat),
768772
folder.fold_expr(iter),
769773
folder.fold_block(body),
770-
maybe_ident.map(|i| folder.fold_ident(i)))
774+
opt_name.map(|x| folder.fold_name(x)))
771775
}
772-
ExprLoop(body, opt_ident) => {
776+
ExprLoop(body, opt_name) => {
773777
ExprLoop(folder.fold_block(body),
774-
opt_ident.map(|x| folder.fold_ident(x)))
778+
opt_name.map(|x| folder.fold_name(x)))
775779
}
776780
ExprMatch(expr, ref arms) => {
777781
ExprMatch(folder.fold_expr(expr),

src/libsyntax/parse/parser.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -1810,10 +1810,11 @@ impl Parser {
18101810
let lifetime = self.get_lifetime();
18111811
self.bump();
18121812
self.expect(&token::COLON);
1813+
let name = Some(lifetime.name);
18131814
if self.eat_keyword(keywords::For) {
1814-
return self.parse_for_expr(Some(lifetime))
1815+
return self.parse_for_expr(name)
18151816
} else if self.eat_keyword(keywords::Loop) {
1816-
return self.parse_loop_expr(Some(lifetime))
1817+
return self.parse_loop_expr(name)
18171818
} else {
18181819
self.fatal("expected `for` or `loop` after a label")
18191820
}
@@ -2535,7 +2536,7 @@ impl Parser {
25352536
}
25362537

25372538
// parse a 'for' .. 'in' expression ('for' token already eaten)
2538-
pub fn parse_for_expr(&mut self, opt_ident: Option<ast::Ident>) -> @Expr {
2539+
pub fn parse_for_expr(&mut self, opt_name: Option<ast::Name>) -> @Expr {
25392540
// Parse: `for <src_pat> in <src_expr> <src_loop_block>`
25402541

25412542
let lo = self.last_span.lo;
@@ -2545,7 +2546,7 @@ impl Parser {
25452546
let loop_block = self.parse_block();
25462547
let hi = self.span.hi;
25472548

2548-
self.mk_expr(lo, hi, ExprForLoop(pat, expr, loop_block, opt_ident))
2549+
self.mk_expr(lo, hi, ExprForLoop(pat, expr, loop_block, opt_name))
25492550
}
25502551

25512552
pub fn parse_while_expr(&mut self) -> @Expr {
@@ -2556,7 +2557,7 @@ impl Parser {
25562557
return self.mk_expr(lo, hi, ExprWhile(cond, body));
25572558
}
25582559

2559-
pub fn parse_loop_expr(&mut self, opt_ident: Option<ast::Ident>) -> @Expr {
2560+
pub fn parse_loop_expr(&mut self, opt_name: Option<ast::Name>) -> @Expr {
25602561
// loop headers look like 'loop {' or 'loop unsafe {'
25612562
let is_loop_header =
25622563
self.token == token::LBRACE
@@ -2568,10 +2569,10 @@ impl Parser {
25682569
let lo = self.last_span.lo;
25692570
let body = self.parse_block();
25702571
let hi = body.span.hi;
2571-
return self.mk_expr(lo, hi, ExprLoop(body, opt_ident));
2572+
return self.mk_expr(lo, hi, ExprLoop(body, opt_name));
25722573
} else {
25732574
// This is an obsolete 'continue' expression
2574-
if opt_ident.is_some() {
2575+
if opt_name.is_some() {
25752576
self.span_err(self.last_span,
25762577
"a label may not be used with a `loop` expression");
25772578
}

src/libsyntax/print/pprust.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1317,7 +1317,7 @@ pub fn print_expr(s: &mut State, expr: &ast::Expr) -> io::IoResult<()> {
13171317
ast::ExprForLoop(pat, iter, blk, opt_ident) => {
13181318
for ident in opt_ident.iter() {
13191319
if_ok!(word(&mut s.s, "'"));
1320-
if_ok!(print_ident(s, *ident));
1320+
if_ok!(print_name(s, *ident));
13211321
if_ok!(word_space(s, ":"));
13221322
}
13231323
if_ok!(head(s, "for"));
@@ -1331,7 +1331,7 @@ pub fn print_expr(s: &mut State, expr: &ast::Expr) -> io::IoResult<()> {
13311331
ast::ExprLoop(blk, opt_ident) => {
13321332
for ident in opt_ident.iter() {
13331333
if_ok!(word(&mut s.s, "'"));
1334-
if_ok!(print_ident(s, *ident));
1334+
if_ok!(print_name(s, *ident));
13351335
if_ok!(word_space(s, ":"));
13361336
}
13371337
if_ok!(head(s, "loop"));

0 commit comments

Comments
 (0)