@@ -362,22 +362,30 @@ pub enum FoldBody<'a> {
362
362
}
363
363
364
364
impl < ' a , T > FoldCtx < ' a , T > {
365
- pub fn fold_expr (
365
+ fn new (
366
366
strategy : Strategy ,
367
- body : & ' a Body ,
367
+ body : & ' a FoldBody < ' a > ,
368
368
form_id : FormIdx ,
369
- expr_id : ExprId ,
370
- initial : T ,
371
369
callback : AnyCallBack < ' a , T > ,
372
- ) -> T {
370
+ ) -> FoldCtx < ' a , T > {
373
371
FoldCtx {
374
372
form_id,
375
- body : & fold_body ( strategy , body ) ,
373
+ body,
376
374
strategy,
377
375
macro_stack : Vec :: default ( ) ,
378
376
callback,
379
377
}
380
- . do_fold_expr ( expr_id, initial)
378
+ }
379
+ pub fn fold_expr (
380
+ strategy : Strategy ,
381
+ body : & ' a Body ,
382
+ form_id : FormIdx ,
383
+ expr_id : ExprId ,
384
+ initial : T ,
385
+ callback : AnyCallBack < ' a , T > ,
386
+ ) -> T {
387
+ FoldCtx :: new ( strategy, & fold_body ( strategy, body) , form_id, callback)
388
+ . do_fold_expr ( expr_id, initial)
381
389
}
382
390
383
391
pub fn fold_pat (
@@ -388,14 +396,8 @@ impl<'a, T> FoldCtx<'a, T> {
388
396
initial : T ,
389
397
callback : AnyCallBack < ' a , T > ,
390
398
) -> T {
391
- FoldCtx {
392
- form_id,
393
- body : & fold_body ( strategy, body) ,
394
- strategy,
395
- macro_stack : Vec :: default ( ) ,
396
- callback,
397
- }
398
- . do_fold_pat ( pat_id, initial)
399
+ FoldCtx :: new ( strategy, & fold_body ( strategy, body) , form_id, callback)
400
+ . do_fold_pat ( pat_id, initial)
399
401
}
400
402
401
403
fn in_macro ( & self ) -> Option < HirIdx > {
@@ -410,14 +412,8 @@ impl<'a, T> FoldCtx<'a, T> {
410
412
initial : T ,
411
413
callback : AnyCallBack < ' a , T > ,
412
414
) -> T {
413
- FoldCtx {
414
- form_id,
415
- body : & fold_body ( strategy, body) ,
416
- strategy,
417
- macro_stack : Vec :: default ( ) ,
418
- callback,
419
- }
420
- . do_fold_term ( term_id, initial)
415
+ FoldCtx :: new ( strategy, & fold_body ( strategy, body) , form_id, callback)
416
+ . do_fold_term ( term_id, initial)
421
417
}
422
418
423
419
pub fn fold_type_expr (
@@ -428,14 +424,8 @@ impl<'a, T> FoldCtx<'a, T> {
428
424
initial : T ,
429
425
callback : AnyCallBack < ' a , T > ,
430
426
) -> T {
431
- FoldCtx {
432
- form_id,
433
- body : & fold_body ( strategy, body) ,
434
- strategy,
435
- macro_stack : Vec :: default ( ) ,
436
- callback,
437
- }
438
- . do_fold_type_expr ( type_expr_id, initial)
427
+ FoldCtx :: new ( strategy, & fold_body ( strategy, body) , form_id, callback)
428
+ . do_fold_type_expr ( type_expr_id, initial)
439
429
}
440
430
441
431
pub fn fold_type_exprs (
@@ -446,14 +436,8 @@ impl<'a, T> FoldCtx<'a, T> {
446
436
initial : T ,
447
437
callback : AnyCallBack < ' a , T > ,
448
438
) -> T {
449
- FoldCtx {
450
- form_id,
451
- body : & fold_body ( strategy, body) ,
452
- strategy,
453
- macro_stack : Vec :: default ( ) ,
454
- callback,
455
- }
456
- . do_fold_type_exprs ( type_expr_ids, initial)
439
+ FoldCtx :: new ( strategy, & fold_body ( strategy, body) , form_id, callback)
440
+ . do_fold_type_exprs ( type_expr_ids, initial)
457
441
}
458
442
459
443
pub fn fold_type_spec_sig (
@@ -464,13 +448,8 @@ impl<'a, T> FoldCtx<'a, T> {
464
448
initial : T ,
465
449
callback : AnyCallBack < ' a , T > ,
466
450
) -> T {
467
- let mut ctx = FoldCtx {
468
- form_id,
469
- body : & fold_body ( strategy, body) ,
470
- strategy,
471
- macro_stack : Vec :: default ( ) ,
472
- callback,
473
- } ;
451
+ let fold_body = & fold_body ( strategy, body) ;
452
+ let mut ctx = FoldCtx :: new ( strategy, & fold_body, form_id, callback) ;
474
453
let r = ctx. do_fold_type_exprs ( & spec_sig. args , initial) ;
475
454
ctx. macro_stack = Vec :: default ( ) ;
476
455
let r = ctx. do_fold_type_expr ( spec_sig. result , r) ;
@@ -490,13 +469,8 @@ impl<'a, T> FoldCtx<'a, T> {
490
469
initial : T ,
491
470
callback : AnyCallBack < ' a , T > ,
492
471
) -> T {
493
- let mut ctx = FoldCtx {
494
- form_id,
495
- body : & fold_body ( strategy, body) ,
496
- strategy,
497
- macro_stack : Vec :: default ( ) ,
498
- callback,
499
- } ;
472
+ let fold_body = fold_body ( strategy, body) ;
473
+ let mut ctx = FoldCtx :: new ( strategy, & fold_body, form_id, callback) ;
500
474
ctx. macro_stack = Vec :: default ( ) ;
501
475
let r = if let Some ( expr_id) = record_field_body. expr {
502
476
ctx. do_fold_expr ( expr_id, initial)
0 commit comments