@@ -13,10 +13,11 @@ use syntax::{
13
13
} ;
14
14
15
15
use 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 ,
20
21
} ;
21
22
22
23
/// Total limit on the number of tokens produced by any macro invocation.
@@ -33,6 +34,8 @@ pub enum TokenExpander {
33
34
DeclarativeMacro { mac : mbe:: DeclarativeMacro , def_site_token_map : mbe:: TokenMap } ,
34
35
/// Stuff like `line!` and `file!`.
35
36
Builtin ( BuiltinFnLikeExpander ) ,
37
+ /// Built-in eagerly expanded fn-like macros (`include!`, `concat!`, etc.)
38
+ BuiltinEager ( EagerExpander ) ,
36
39
/// `global_allocator` and such.
37
40
BuiltinAttr ( BuiltinAttrExpander ) ,
38
41
/// `derive(Copy)` and such.
@@ -51,6 +54,9 @@ impl TokenExpander {
51
54
match self {
52
55
TokenExpander :: DeclarativeMacro { mac, .. } => mac. expand ( tt) . map_err ( Into :: into) ,
53
56
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
+ }
54
60
TokenExpander :: BuiltinAttr ( it) => it. expand ( db, id, tt) ,
55
61
TokenExpander :: BuiltinDerive ( it) => it. expand ( db, id, tt) ,
56
62
TokenExpander :: ProcMacro ( _) => {
@@ -66,6 +72,7 @@ impl TokenExpander {
66
72
match self {
67
73
TokenExpander :: DeclarativeMacro { mac, .. } => mac. map_id_down ( id) ,
68
74
TokenExpander :: Builtin ( ..)
75
+ | TokenExpander :: BuiltinEager ( ..)
69
76
| TokenExpander :: BuiltinAttr ( ..)
70
77
| TokenExpander :: BuiltinDerive ( ..)
71
78
| TokenExpander :: ProcMacro ( ..) => id,
@@ -76,6 +83,7 @@ impl TokenExpander {
76
83
match self {
77
84
TokenExpander :: DeclarativeMacro { mac, .. } => mac. map_id_up ( id) ,
78
85
TokenExpander :: Builtin ( ..)
86
+ | TokenExpander :: BuiltinEager ( ..)
79
87
| TokenExpander :: BuiltinAttr ( ..)
80
88
| TokenExpander :: BuiltinDerive ( ..)
81
89
| TokenExpander :: ProcMacro ( ..) => ( id, mbe:: Origin :: Call ) ,
@@ -412,10 +420,8 @@ fn macro_def(
412
420
MacroDefKind :: BuiltInDerive ( expander, _) => {
413
421
Ok ( Arc :: new ( TokenExpander :: BuiltinDerive ( expander) ) )
414
422
}
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) ) )
419
425
}
420
426
MacroDefKind :: ProcMacro ( expander, ..) => Ok ( Arc :: new ( TokenExpander :: ProcMacro ( expander) ) ) ,
421
427
}
0 commit comments