From 386db05df8aa8349857ad6f5486db0bdcc79f3cd Mon Sep 17 00:00:00 2001 From: Edward Wang Date: Sat, 15 Feb 2014 16:54:32 +0800 Subject: Make break and continue hygienic Makes labelled loops hygiene by performing renaming of the labels defined in e.g. `'x: loop { ... }` and then used in break and continue statements within loop body so that they act hygienically when used with macros. Closes #12262. --- src/libsyntax/parse/parser.rs | 6 +++--- src/libsyntax/parse/token.rs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index fed2034cd26..31e16cd8c7d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1822,7 +1822,7 @@ impl Parser { let ex = if Parser::token_is_lifetime(&self.token) { let lifetime = self.get_lifetime(); self.bump(); - ExprAgain(Some(lifetime.name)) + ExprAgain(Some(lifetime)) } else { ExprAgain(None) }; @@ -1885,7 +1885,7 @@ impl Parser { if Parser::token_is_lifetime(&self.token) { let lifetime = self.get_lifetime(); self.bump(); - ex = ExprBreak(Some(lifetime.name)); + ex = ExprBreak(Some(lifetime)); } else { ex = ExprBreak(None); } @@ -2579,7 +2579,7 @@ impl Parser { let ex = if Parser::token_is_lifetime(&self.token) { let lifetime = self.get_lifetime(); self.bump(); - ExprAgain(Some(lifetime.name)) + ExprAgain(Some(lifetime)) } else { ExprAgain(None) }; diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index b264e8d7467..5da4e4c44df 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -704,8 +704,8 @@ pub fn is_reserved_keyword(tok: &Token) -> bool { pub fn mtwt_token_eq(t1 : &Token, t2 : &Token) -> bool { match (t1,t2) { - (&IDENT(id1,_),&IDENT(id2,_)) => - ast_util::mtwt_resolve(id1) == ast_util::mtwt_resolve(id2), + (&IDENT(id1,_),&IDENT(id2,_)) | (&LIFETIME(id1),&LIFETIME(id2)) => + ast_util::mtwt_resolve(id1) == ast_util::mtwt_resolve(id2), _ => *t1 == *t2 } } -- cgit 1.4.1-3-g733a5