diff options
| author | Charles Lew <crlf0710@gmail.com> | 2019-12-29 19:50:43 +0800 |
|---|---|---|
| committer | Charles Lew <crlf0710@gmail.com> | 2019-12-31 09:37:45 +0800 |
| commit | 7f9cc88f4a2226521d68f4b54f6d641978bb73e6 (patch) | |
| tree | adcde2ea0eda64a8b1889898494769a5a5b90d02 | |
| parent | a9dd56ff9a08d74c53d5cc22d18f126a12749608 (diff) | |
| download | rust-7f9cc88f4a2226521d68f4b54f6d641978bb73e6.tar.gz rust-7f9cc88f4a2226521d68f4b54f6d641978bb73e6.zip | |
Add symbol normalization for proc_macro_server.
| -rw-r--r-- | src/librustc_expand/proc_macro_server.rs | 2 | ||||
| -rw-r--r-- | src/librustc_parse/lexer/mod.rs | 20 |
2 files changed, 14 insertions, 8 deletions
diff --git a/src/librustc_expand/proc_macro_server.rs b/src/librustc_expand/proc_macro_server.rs index 790e1f0edc0..b41490011af 100644 --- a/src/librustc_expand/proc_macro_server.rs +++ b/src/librustc_expand/proc_macro_server.rs @@ -1,5 +1,6 @@ use crate::base::ExtCtxt; +use rustc_parse::lexer::nfc_normalize; use rustc_parse::{nt_to_tokenstream, parse_stream_from_source_str}; use syntax::ast; use syntax::print::pprust; @@ -327,6 +328,7 @@ impl Ident { } } fn new(sym: Symbol, is_raw: bool, span: Span) -> Ident { + let sym = nfc_normalize(&sym.as_str()); let string = sym.as_str(); if !Self::is_valid(&string) { panic!("`{:?}` is not a valid identifier", string) diff --git a/src/librustc_parse/lexer/mod.rs b/src/librustc_parse/lexer/mod.rs index d69cd14d544..b981e8d066f 100644 --- a/src/librustc_parse/lexer/mod.rs +++ b/src/librustc_parse/lexer/mod.rs @@ -471,16 +471,9 @@ impl<'a> StringReader<'a> { /// As symbol_from, with the text normalized into Unicode NFC form. fn nfc_symbol_from(&self, start: BytePos) -> Symbol { - use unicode_normalization::{is_nfc_quick, IsNormalized, UnicodeNormalization}; debug!("taking an normalized ident from {:?} to {:?}", start, self.pos); let sym = self.str_from(start); - match is_nfc_quick(sym.chars()) { - IsNormalized::Yes => Symbol::intern(sym), - _ => { - let sym_str: String = sym.chars().nfc().collect(); - Symbol::intern(&sym_str) - } - } + nfc_normalize(sym) } /// Slice of the source text spanning from `start` up to but excluding `end`. @@ -651,3 +644,14 @@ impl<'a> StringReader<'a> { } } } + +pub fn nfc_normalize(string: &str) -> Symbol { + use unicode_normalization::{is_nfc_quick, IsNormalized, UnicodeNormalization}; + match is_nfc_quick(string.chars()) { + IsNormalized::Yes => Symbol::intern(string), + _ => { + let normalized_str: String = string.chars().nfc().collect(); + Symbol::intern(&normalized_str) + } + } +} |
