diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-05-11 17:41:37 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-05-22 19:48:56 +0300 |
| commit | 59a382122fb09e2a9b4629e36efbc63a321eab6a (patch) | |
| tree | 4ebc598c88ba0ca2a11848b1cd2e142cd340ed15 /src/libsyntax_pos | |
| parent | 37ff5d388f8c004ca248adb635f1cc84d347eda0 (diff) | |
| download | rust-59a382122fb09e2a9b4629e36efbc63a321eab6a.tar.gz rust-59a382122fb09e2a9b4629e36efbc63a321eab6a.zip | |
Simplify use of keyword symbols
Diffstat (limited to 'src/libsyntax_pos')
| -rw-r--r-- | src/libsyntax_pos/hygiene.rs | 14 | ||||
| -rw-r--r-- | src/libsyntax_pos/symbol.rs | 55 |
2 files changed, 26 insertions, 43 deletions
diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs index 6e787c08504..e8dcd8171c9 100644 --- a/src/libsyntax_pos/hygiene.rs +++ b/src/libsyntax_pos/hygiene.rs @@ -8,7 +8,7 @@ use crate::GLOBALS; use crate::Span; use crate::edition::Edition; -use crate::symbol::{keywords, Symbol}; +use crate::symbol::{kw, Symbol}; use serialize::{Encodable, Decodable, Encoder, Decoder}; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; @@ -192,7 +192,7 @@ impl HygieneData { prev_ctxt: SyntaxContext(0), opaque: SyntaxContext(0), opaque_and_semitransparent: SyntaxContext(0), - dollar_crate_name: keywords::DollarCrate.name(), + dollar_crate_name: kw::DollarCrate, }], markings: FxHashMap::default(), } @@ -245,7 +245,7 @@ impl SyntaxContext { prev_ctxt: SyntaxContext::empty(), opaque: SyntaxContext::empty(), opaque_and_semitransparent: SyntaxContext::empty(), - dollar_crate_name: keywords::DollarCrate.name(), + dollar_crate_name: kw::DollarCrate, }); SyntaxContext(data.syntax_contexts.len() as u32 - 1) }) @@ -312,7 +312,7 @@ impl SyntaxContext { prev_ctxt, opaque: new_opaque, opaque_and_semitransparent: new_opaque, - dollar_crate_name: keywords::DollarCrate.name(), + dollar_crate_name: kw::DollarCrate, }); new_opaque }); @@ -330,7 +330,7 @@ impl SyntaxContext { prev_ctxt, opaque, opaque_and_semitransparent: new_opaque_and_semitransparent, - dollar_crate_name: keywords::DollarCrate.name(), + dollar_crate_name: kw::DollarCrate, }); new_opaque_and_semitransparent }); @@ -346,7 +346,7 @@ impl SyntaxContext { prev_ctxt, opaque, opaque_and_semitransparent, - dollar_crate_name: keywords::DollarCrate.name(), + dollar_crate_name: kw::DollarCrate, }); new_opaque_and_semitransparent_and_transparent }) @@ -512,7 +512,7 @@ impl SyntaxContext { &mut data.syntax_contexts[self.0 as usize].dollar_crate_name, dollar_crate_name ); assert!(dollar_crate_name == prev_dollar_crate_name || - prev_dollar_crate_name == keywords::DollarCrate.name(), + prev_dollar_crate_name == kw::DollarCrate, "$crate name is reset for a syntax context"); }) } diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index 8b07e81e586..6bcf83869a9 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -692,7 +692,7 @@ impl Ident { /// Transforms an underscore identifier into one with the same name, but /// gensymed. Leaves non-underscore identifiers unchanged. pub fn gensym_if_underscore(self) -> Ident { - if self.name == keywords::Underscore.name() { self.gensym() } else { self } + if self.name == kw::Underscore { self.gensym() } else { self } } // WARNING: this function is deprecated and will be removed in the future. @@ -864,8 +864,8 @@ impl Interner { this.strings.reserve(init.len()); // We can't allocate empty strings in the arena, so handle this here. - assert!(keywords::Invalid.name().as_u32() == 0 && init[0].is_empty()); - this.names.insert("", keywords::Invalid.name()); + assert!(kw::Invalid.as_u32() == 0 && init[0].is_empty()); + this.names.insert("", kw::Invalid); this.strings.push(""); for string in &init[1..] { @@ -926,26 +926,9 @@ impl Interner { } } -pub mod keywords { - use super::{Symbol, Ident}; - - #[derive(Clone, Copy, PartialEq, Eq)] - pub struct Keyword { - ident: Ident, - } - - impl Keyword { - #[inline] - pub fn ident(self) -> Ident { - self.ident - } - - #[inline] - pub fn name(self) -> Symbol { - self.ident.name - } - } - +// This module has a very short name because it's used a lot. +pub mod kw { + use super::Symbol; keywords!(); } @@ -957,11 +940,11 @@ pub mod sym { impl Symbol { fn is_used_keyword_2018(self) -> bool { - self == keywords::Dyn.name() + self == kw::Dyn } fn is_unused_keyword_2018(self) -> bool { - self >= keywords::Async.name() && self <= keywords::Try.name() + self >= kw::Async && self <= kw::Try } } @@ -969,20 +952,20 @@ impl Ident { // Returns `true` for reserved identifiers used internally for elided lifetimes, // unnamed method parameters, crate root module, error recovery etc. pub fn is_special(self) -> bool { - self.name <= keywords::Underscore.name() + self.name <= kw::Underscore } /// Returns `true` if the token is a keyword used in the language. pub fn is_used_keyword(self) -> bool { // Note: `span.edition()` is relatively expensive, don't call it unless necessary. - self.name >= keywords::As.name() && self.name <= keywords::While.name() || + self.name >= kw::As && self.name <= kw::While || self.name.is_used_keyword_2018() && self.span.rust_2018() } /// Returns `true` if the token is a keyword reserved for possible future use. pub fn is_unused_keyword(self) -> bool { // Note: `span.edition()` is relatively expensive, don't call it unless necessary. - self.name >= keywords::Abstract.name() && self.name <= keywords::Yield.name() || + self.name >= kw::Abstract && self.name <= kw::Yield || self.name.is_unused_keyword_2018() && self.span.rust_2018() } @@ -993,17 +976,17 @@ impl Ident { /// A keyword or reserved identifier that can be used as a path segment. pub fn is_path_segment_keyword(self) -> bool { - self.name == keywords::Super.name() || - self.name == keywords::SelfLower.name() || - self.name == keywords::SelfUpper.name() || - self.name == keywords::Crate.name() || - self.name == keywords::PathRoot.name() || - self.name == keywords::DollarCrate.name() + self.name == kw::Super || + self.name == kw::SelfLower || + self.name == kw::SelfUpper || + self.name == kw::Crate || + self.name == kw::PathRoot || + self.name == kw::DollarCrate } /// This identifier can be a raw identifier. pub fn can_be_raw(self) -> bool { - self.name != keywords::Invalid.name() && self.name != keywords::Underscore.name() && + self.name != kw::Invalid && self.name != kw::Underscore && !self.is_path_segment_keyword() } @@ -1267,7 +1250,7 @@ mod tests { fn without_first_quote_test() { GLOBALS.set(&Globals::new(edition::DEFAULT_EDITION), || { let i = Ident::from_str("'break"); - assert_eq!(i.without_first_quote().name, keywords::Break.name()); + assert_eq!(i.without_first_quote().name, kw::Break); }); } } |
