@@ -13,10 +13,11 @@ use syntax::{
1313} ;
1414
1515use crate :: {
16- ast_id_map:: AstIdMap , builtin_attr_macro:: pseudo_derive_attr_expansion, fixup,
17- hygiene:: HygieneFrame , tt, BuiltinAttrExpander , BuiltinDeriveExpander , BuiltinFnLikeExpander ,
18- ExpandError , ExpandResult , ExpandTo , HirFileId , HirFileIdRepr , MacroCallId , MacroCallKind ,
19- MacroCallLoc , MacroDefId , MacroDefKind , MacroFile , ProcMacroExpander ,
16+ ast_id_map:: AstIdMap , builtin_attr_macro:: pseudo_derive_attr_expansion,
17+ builtin_fn_macro:: EagerExpander , fixup, hygiene:: HygieneFrame , tt, BuiltinAttrExpander ,
18+ BuiltinDeriveExpander , BuiltinFnLikeExpander , ExpandError , ExpandResult , ExpandTo , HirFileId ,
19+ HirFileIdRepr , MacroCallId , MacroCallKind , MacroCallLoc , MacroDefId , MacroDefKind , MacroFile ,
20+ ProcMacroExpander ,
2021} ;
2122
2223/// Total limit on the number of tokens produced by any macro invocation.
@@ -33,6 +34,8 @@ pub enum TokenExpander {
3334 DeclarativeMacro { mac : mbe:: DeclarativeMacro , def_site_token_map : mbe:: TokenMap } ,
3435 /// Stuff like `line!` and `file!`.
3536 Builtin ( BuiltinFnLikeExpander ) ,
37+ /// Built-in eagerly expanded fn-like macros (`include!`, `concat!`, etc.)
38+ BuiltinEager ( EagerExpander ) ,
3639 /// `global_allocator` and such.
3740 BuiltinAttr ( BuiltinAttrExpander ) ,
3841 /// `derive(Copy)` and such.
@@ -51,6 +54,9 @@ impl TokenExpander {
5154 match self {
5255 TokenExpander :: DeclarativeMacro { mac, .. } => mac. expand ( tt) . map_err ( Into :: into) ,
5356 TokenExpander :: Builtin ( it) => it. expand ( db, id, tt) . map_err ( Into :: into) ,
57+ TokenExpander :: BuiltinEager ( it) => {
58+ it. expand ( db, id, tt) . map_err ( Into :: into) . map ( |res| res. subtree )
59+ }
5460 TokenExpander :: BuiltinAttr ( it) => it. expand ( db, id, tt) ,
5561 TokenExpander :: BuiltinDerive ( it) => it. expand ( db, id, tt) ,
5662 TokenExpander :: ProcMacro ( _) => {
@@ -66,6 +72,7 @@ impl TokenExpander {
6672 match self {
6773 TokenExpander :: DeclarativeMacro { mac, .. } => mac. map_id_down ( id) ,
6874 TokenExpander :: Builtin ( ..)
75+ | TokenExpander :: BuiltinEager ( ..)
6976 | TokenExpander :: BuiltinAttr ( ..)
7077 | TokenExpander :: BuiltinDerive ( ..)
7178 | TokenExpander :: ProcMacro ( ..) => id,
@@ -76,6 +83,7 @@ impl TokenExpander {
7683 match self {
7784 TokenExpander :: DeclarativeMacro { mac, .. } => mac. map_id_up ( id) ,
7885 TokenExpander :: Builtin ( ..)
86+ | TokenExpander :: BuiltinEager ( ..)
7987 | TokenExpander :: BuiltinAttr ( ..)
8088 | TokenExpander :: BuiltinDerive ( ..)
8189 | TokenExpander :: ProcMacro ( ..) => ( id, mbe:: Origin :: Call ) ,
@@ -412,10 +420,8 @@ fn macro_def(
412420 MacroDefKind :: BuiltInDerive ( expander, _) => {
413421 Ok ( Arc :: new ( TokenExpander :: BuiltinDerive ( expander) ) )
414422 }
415- MacroDefKind :: BuiltInEager ( ..) => {
416- // FIXME: Return a random error here just to make the types align.
417- // This obviously should do something real instead.
418- Err ( mbe:: ParseError :: UnexpectedToken ( "unexpected eager macro" . into ( ) ) )
423+ MacroDefKind :: BuiltInEager ( expander, ..) => {
424+ Ok ( Arc :: new ( TokenExpander :: BuiltinEager ( expander) ) )
419425 }
420426 MacroDefKind :: ProcMacro ( expander, ..) => Ok ( Arc :: new ( TokenExpander :: ProcMacro ( expander) ) ) ,
421427 }
0 commit comments