@@ -245,9 +245,13 @@ pub trait Macro: Trace + DowncastArc + Send + Sync {
245
245
None
246
246
}
247
247
248
- fn expand < ' r , ' a : ' r , ' b : ' r , ' ast : ' r > (
248
+ /// Creating a symbol in `symbols` will put it in the same scope as the code surrounding the
249
+ /// expansion. If you want to create a unique symbol then call `Symbol::from` or create a new
250
+ /// `Symbols` table
251
+ fn expand < ' r , ' a : ' r , ' b : ' r , ' c : ' r , ' ast : ' r > (
249
252
& self ,
250
253
env : & ' b mut MacroExpander < ' a > ,
254
+ symbols : & ' c mut Symbols ,
251
255
arena : & ' b mut ast:: OwnedArena < ' ast , Symbol > ,
252
256
args : & ' b mut [ SpannedExpr < ' ast , Symbol > ] ,
253
257
) -> MacroFuture < ' r , ' ast > ;
@@ -283,13 +287,14 @@ where
283
287
( * * self ) . get_capability_impl ( thread, arc_self, id)
284
288
}
285
289
286
- fn expand < ' r , ' a : ' r , ' b : ' r , ' ast : ' r > (
290
+ fn expand < ' r , ' a : ' r , ' b : ' r , ' c : ' r , ' ast : ' r > (
287
291
& self ,
288
292
env : & ' b mut MacroExpander < ' a > ,
293
+ symbols : & ' c mut Symbols ,
289
294
arena : & ' b mut ast:: OwnedArena < ' ast , Symbol > ,
290
295
args : & ' b mut [ SpannedExpr < ' ast , Symbol > ] ,
291
296
) -> MacroFuture < ' r , ' ast > {
292
- ( * * self ) . expand ( env, arena, args)
297
+ ( * * self ) . expand ( env, symbols , arena, args)
293
298
}
294
299
}
295
300
@@ -307,13 +312,14 @@ where
307
312
( * * self ) . get_capability_impl ( thread, arc_self, id)
308
313
}
309
314
310
- fn expand < ' r , ' a : ' r , ' b : ' r , ' ast : ' r > (
315
+ fn expand < ' r , ' a : ' r , ' b : ' r , ' c : ' r , ' ast : ' r > (
311
316
& self ,
312
317
env : & ' b mut MacroExpander < ' a > ,
318
+ symbols : & ' c mut Symbols ,
313
319
arena : & ' b mut ast:: OwnedArena < ' ast , Symbol > ,
314
320
args : & ' b mut [ SpannedExpr < ' ast , Symbol > ] ,
315
321
) -> MacroFuture < ' r , ' ast > {
316
- ( * * self ) . expand ( env, arena, args)
322
+ ( * * self ) . expand ( env, symbols , arena, args)
317
323
}
318
324
}
319
325
@@ -457,19 +463,20 @@ impl<'a> MacroExpander<'a> {
457
463
exprs : Vec :: new ( ) ,
458
464
} ;
459
465
visitor. visit_expr ( expr) ;
460
- let MacroVisitor { exprs, .. } = visitor;
461
- self . expand ( arena, exprs) . await
466
+ let MacroVisitor { exprs, symbols , .. } = visitor;
467
+ self . expand ( symbols , arena, exprs) . await
462
468
}
463
469
464
470
async fn expand < ' ast > (
465
471
& mut self ,
472
+ symbols : & mut Symbols ,
466
473
arena : & mut ast:: OwnedArena < ' ast , Symbol > ,
467
474
mut exprs : Vec < ( & ' _ mut SpannedExpr < ' ast , Symbol > , Arc < dyn Macro > ) > ,
468
475
) {
469
476
let mut futures = Vec :: with_capacity ( exprs. len ( ) ) ;
470
477
for ( expr, mac) in exprs. drain ( ..) {
471
478
let result = match & mut expr. value {
472
- Expr :: App { args, .. } => mac. expand ( self , arena, args) . await ,
479
+ Expr :: App { args, .. } => mac. expand ( self , symbols , arena, args) . await ,
473
480
_ => unreachable ! ( "{:?}" , expr) ,
474
481
} ;
475
482
match result {
0 commit comments