Skip to content

Commit f89e356

Browse files
committed
Add two keywords specific to editions 2015 and 2018 respectively
1 parent 640884b commit f89e356

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

src/libsyntax/parse/token.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ pub use self::Lit::*;
1515
pub use self::Token::*;
1616

1717
use ast::{self};
18+
use edition::Edition;
1819
use parse::ParseSess;
1920
use print::pprust;
2021
use ptr::P;
2122
use serialize::{Decodable, Decoder, Encodable, Encoder};
2223
use symbol::keywords;
2324
use syntax::parse::parse_stream_from_source_str;
24-
use syntax_pos::{self, Span, FileName};
25+
use syntax_pos::{self, hygiene, Span, FileName};
2526
use tokenstream::{TokenStream, TokenTree};
2627
use tokenstream;
2728

@@ -168,7 +169,11 @@ pub fn is_used_keyword(id: ast::Ident) -> bool {
168169

169170
/// Returns `true` if the token is a keyword reserved for possible future use.
170171
pub fn is_unused_keyword(id: ast::Ident) -> bool {
171-
id.name >= keywords::Abstract.name() && id.name <= keywords::Yield.name()
172+
let edition = || id.span.ctxt().outer().expn_info().map_or_else(|| hygiene::default_edition(),
173+
|einfo| einfo.callee.edition);
174+
id.name >= keywords::Abstract.name() && id.name <= keywords::Yield.name() ||
175+
id.name == keywords::Proc.name() && edition() == Edition::Edition2015 ||
176+
id.name == keywords::Async.name() && edition() == Edition::Edition2018
172177
}
173178

174179
/// Returns `true` if the token is either a special identifier or a keyword.

src/libsyntax_pos/symbol.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -383,16 +383,20 @@ declare_keywords! {
383383
(53, Virtual, "virtual")
384384
(54, Yield, "yield")
385385

386+
// Edition-specific keywords reserved for future use.
387+
(55, Async, "async") // >= 2018 Edition Only
388+
(56, Proc, "proc") // <= 2015 Edition Only
389+
386390
// Special lifetime names
387-
(55, UnderscoreLifetime, "'_")
388-
(56, StaticLifetime, "'static")
391+
(57, UnderscoreLifetime, "'_")
392+
(58, StaticLifetime, "'static")
389393

390394
// Weak keywords, have special meaning only in specific contexts.
391-
(57, Auto, "auto")
392-
(58, Catch, "catch")
393-
(59, Default, "default")
394-
(60, Dyn, "dyn")
395-
(61, Union, "union")
395+
(59, Auto, "auto")
396+
(60, Catch, "catch")
397+
(61, Default, "default")
398+
(62, Dyn, "dyn")
399+
(63, Union, "union")
396400
}
397401

398402
// If an interner exists, return it. Otherwise, prepare a fresh one.

0 commit comments

Comments
 (0)