@@ -74,7 +74,7 @@ use std::fmt::Write;
7474*/
7575
7676use std:: slice:: IterMut ;
77- use proc_macro2:: TokenTree as TokenTree2 ;
77+ use proc_macro2:: { TokenTree as TokenTree2 , Group } ;
7878use proc_macro:: TokenStream ;
7979use proc_macro2:: TokenStream as TokenStream2 ;
8080use trees:: sg_err;
@@ -121,19 +121,17 @@ fn search_include_and_replacegroup(
121121 if punct. as_char ( ) == '#' {
122122 if let Some ( m_ident) = iter. next ( ) {
123123 if let TokenTree2 :: Ident ( ident) = m_ident {
124- let macro_fn = {
124+ let macro_fn: Option < fn ( & Group ) -> TreeResult < TokenTree2 > > = {
125125 let str_ident = ident. to_string ( ) ;
126126
127127 match str_ident. as_str ( ) {
128- "include" | "include_tt" => macro_rule_include :: < IncludeTt > ,
129- "include_and_fix_unknown_start_token" | "include_tt_and_fix_unknown_start_token" => macro_rule_include :: < IncludeTtAndFixUnkStartToken > ,
128+ "include" | "include_tt" => Some ( macro_rule_include :: < IncludeTt > ) ,
129+ "include_and_fix_unknown_start_token" | "include_tt_and_fix_unknown_start_token" => Some ( macro_rule_include :: < IncludeTtAndFixUnkStartToken > ) ,
130130
131- "include_str" => macro_rule_include :: < IncludeStr > ,
132- "include_arr" => macro_rule_include :: < IncludeArr > ,
131+ "include_str" => Some ( macro_rule_include :: < IncludeStr > ) ,
132+ "include_arr" => Some ( macro_rule_include :: < IncludeArr > ) ,
133133
134- _ => sg_err ! {
135- return [ ident. span( ) ] : "Unknown macro, expected `include`, `include_tt`, `include_and_fix_unknown_start_token`, `include_tt_and_fix_unknown_start_token`, `include_str`, `include_arr`"
136- } ,
134+ _ => None ,
137135 }
138136 } ;
139137
@@ -142,6 +140,13 @@ fn search_include_and_replacegroup(
142140 if punct2. as_char ( ) == '!' {
143141 if let Some ( m_group) = iter. next ( ) {
144142 if let TokenTree2 :: Group ( group) = m_group {
143+ let macro_fn = match macro_fn {
144+ Some ( a) => a,
145+ None => sg_err ! {
146+ return [ ident. span( ) ] : "Unknown macro, expected `include`, `include_tt`, `include_and_fix_unknown_start_token`, `include_tt_and_fix_unknown_start_token`, `include_str`, `include_arr`"
147+ }
148+ } ;
149+
145150 let result = ttry ! ( macro_fn( group) ) ;
146151
147152 let nulltt = make_null_ttree ( ) ;
@@ -159,8 +164,10 @@ fn search_include_and_replacegroup(
159164 }
160165 }
161166
162- sg_err ! {
163- return [ ident. span( ) ] : "Unknown macro, expected `include(...)`, `include_tt(...)`, `include_and_fix_unknown_start_token(...)`, `include_tt_and_fix_unknown_start_token(...)`, `include_str(...)`, `include_arr(...)`"
167+ if macro_fn. is_some ( ) { // The required macro was defined earlier, which means an error.
168+ sg_err ! {
169+ return [ ident. span( ) ] : "Unknown macro, expected `include(...)`, `include_tt(...)`, `include_and_fix_unknown_start_token(...)`, `include_tt_and_fix_unknown_start_token(...)`, `include_str(...)`, `include_arr(...)`"
170+ }
164171 }
165172 }
166173 }
0 commit comments