@@ -84,11 +84,11 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
84
84
Ok ( self . file_map )
85
85
}
86
86
87
- fn visit_mac ( & mut self , item : & ' ast ast:: Item ) -> Result < ( ) , String > {
88
87
/// Visit macro calls and look for module declarations. Currently only supports `cfg_if` macro.
88
+ fn visit_mac ( & mut self , item : Cow < ' ast , ast:: Item > ) -> Result < ( ) , String > {
89
89
let mut visitor =
90
90
visitor:: CfgIfVisitor :: new ( self . parse_sess , self . directory . to_syntax_directory ( ) ) ;
91
- visitor. visit_item ( item) ;
91
+ visitor. visit_item ( & item) ;
92
92
for module_item in visitor. mods ( ) {
93
93
if let ast:: ItemKind :: Mod ( ref sub_mod) = module_item. item . node {
94
94
let cow_sub_mod = Cow :: Owned ( sub_mod. clone ( ) ) ;
@@ -104,6 +104,10 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
104
104
/// Visit modules defined inside macro calls.
105
105
fn visit_mod_from_macro ( & mut self , module : Cow < ' ast , ast:: Mod > ) -> Result < ( ) , String > {
106
106
for item in & module. items {
107
+ if let ast:: ItemKind :: Mac ( ..) = item. node {
108
+ self . visit_mac ( Cow :: Owned ( item. clone ( ) . into_inner ( ) ) ) ?;
109
+ }
110
+
107
111
if let ast:: ItemKind :: Mod ( ref sub_mod) = item. node {
108
112
let cow_sub_mod = Cow :: Owned ( sub_mod. clone ( ) ) ;
109
113
if let Some ( old_directory) = self . peek_sub_mod ( item, & cow_sub_mod) ? {
@@ -119,7 +123,7 @@ impl<'ast, 'sess, 'c> ModResolver<'ast, 'sess> {
119
123
fn visit_mod_from_ast ( & mut self , module : & ' ast ast:: Mod ) -> Result < ( ) , String > {
120
124
for item in & module. items {
121
125
if let ast:: ItemKind :: Mac ( ..) = item. node {
122
- self . visit_mac ( item) ?;
126
+ self . visit_mac ( Cow :: Borrowed ( item) ) ?;
123
127
}
124
128
125
129
if let ast:: ItemKind :: Mod ( ref sub_mod) = item. node {
0 commit comments