]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_macros/src/symbols.rs
Rollup merge of #68469 - ollie27:skip_count, r=sfackler
[rust.git] / src / librustc_macros / src / symbols.rs
index 3883682fa9df57f6ec88c4b113d44c634fec6708..c692c7f399541f0c393082d73cef2ac1ed9ab4e1 100644 (file)
@@ -1,12 +1,9 @@
 use proc_macro::TokenStream;
-use syn::{
-    Token, Ident, LitStr,
-    braced, parse_macro_input,
-};
-use syn::parse::{Result, Parse, ParseStream};
-use syn;
-use std::collections::HashSet;
 use quote::quote;
+use std::collections::HashSet;
+use syn;
+use syn::parse::{Parse, ParseStream, Result};
+use syn::{braced, parse_macro_input, Ident, LitStr, Token};
 
 #[allow(non_camel_case_types)]
 mod kw {
@@ -26,10 +23,7 @@ fn parse(input: ParseStream<'_>) -> Result<Self> {
         let value = input.parse()?;
         input.parse::<Token![,]>()?;
 
-        Ok(Keyword {
-            name,
-            value,
-        })
+        Ok(Keyword { name, value })
     }
 }
 
@@ -47,10 +41,7 @@ fn parse(input: ParseStream<'_>) -> Result<Self> {
         };
         input.parse::<Token![,]>()?;
 
-        Ok(Symbol {
-            name,
-            value,
-        })
+        Ok(Symbol { name, value })
     }
 }
 
@@ -84,10 +75,7 @@ fn parse(input: ParseStream<'_>) -> Result<Self> {
         braced!(content in input);
         let symbols = content.parse()?;
 
-        Ok(Input {
-            keywords,
-            symbols,
-        })
+        Ok(Input { keywords, symbols })
     }
 }
 
@@ -96,6 +84,7 @@ pub fn symbols(input: TokenStream) -> TokenStream {
 
     let mut keyword_stream = quote! {};
     let mut symbols_stream = quote! {};
+    let mut digits_stream = quote! {};
     let mut prefill_stream = quote! {};
     let mut counter = 0u32;
     let mut keys = HashSet::<String>::new();
@@ -106,6 +95,7 @@ pub fn symbols(input: TokenStream) -> TokenStream {
         }
     };
 
+    // Generate the listed keywords.
     for keyword in &input.keywords.0 {
         let name = &keyword.name;
         let value = &keyword.value;
@@ -119,6 +109,7 @@ pub fn symbols(input: TokenStream) -> TokenStream {
         counter += 1;
     }
 
+    // Generate the listed symbols.
     for symbol in &input.symbols.0 {
         let name = &symbol.name;
         let value = match &symbol.value {
@@ -135,6 +126,19 @@ pub fn symbols(input: TokenStream) -> TokenStream {
         counter += 1;
     }
 
+    // Generate symbols for the strings "0", "1", ..., "9".
+    for n in 0..10 {
+        let n = n.to_string();
+        check_dup(&n);
+        prefill_stream.extend(quote! {
+            #n,
+        });
+        digits_stream.extend(quote! {
+            Symbol::new(#counter),
+        });
+        counter += 1;
+    }
+
     let tt = TokenStream::from(quote! {
         macro_rules! keywords {
             () => {
@@ -145,6 +149,10 @@ macro_rules! keywords {
         macro_rules! symbols {
             () => {
                 #symbols_stream
+
+                pub const digits_array: &[Symbol; 10] = &[
+                    #digits_stream
+                ];
             }
         }