@@ -19,6 +19,8 @@ type visitor =
19
19
visit_slot_identified_post : (Ast .slot identified ) -> unit ;
20
20
visit_expr_pre : Ast .expr -> unit ;
21
21
visit_expr_post : Ast .expr -> unit ;
22
+ visit_pexp_pre : Ast .pexp -> unit ;
23
+ visit_pexp_post : Ast .pexp -> unit ;
22
24
visit_ty_pre : Ast .ty -> unit ;
23
25
visit_ty_post : Ast .ty -> unit ;
24
26
visit_constr_pre : node_id option -> Ast .constr -> unit ;
@@ -32,6 +34,8 @@ type visitor =
32
34
visit_lit_post : Ast .lit -> unit ;
33
35
visit_lval_pre : Ast .lval -> unit ;
34
36
visit_lval_post : Ast .lval -> unit ;
37
+ visit_plval_pre : Ast .plval -> unit ;
38
+ visit_plval_post : Ast .plval -> unit ;
35
39
visit_mod_item_pre :
36
40
(Ast .ident
37
41
-> ((Ast .ty_param identified ) array )
@@ -63,6 +67,8 @@ let empty_visitor =
63
67
visit_slot_identified_post = (fun _ -> () );
64
68
visit_expr_pre = (fun _ -> () );
65
69
visit_expr_post = (fun _ -> () );
70
+ visit_pexp_pre = (fun _ -> () );
71
+ visit_pexp_post = (fun _ -> () );
66
72
visit_ty_pre = (fun _ -> () );
67
73
visit_ty_post = (fun _ -> () );
68
74
visit_constr_pre = (fun _ _ -> () );
@@ -75,6 +81,8 @@ let empty_visitor =
75
81
visit_lit_post = (fun _ -> () );
76
82
visit_lval_pre = (fun _ -> () );
77
83
visit_lval_post = (fun _ -> () );
84
+ visit_plval_pre = (fun _ -> () );
85
+ visit_plval_post = (fun _ -> () );
78
86
visit_mod_item_pre = (fun _ _ _ -> () );
79
87
visit_mod_item_post = (fun _ _ _ -> () );
80
88
visit_obj_fn_pre = (fun _ _ _ -> () );
@@ -529,6 +537,15 @@ and walk_stmt
529
537
v.visit_stmt_post
530
538
s
531
539
540
+ and walk_unop
541
+ (v :visitor )
542
+ (unop :Ast.unop )
543
+ : unit =
544
+ match unop with
545
+ Ast. UNOP_cast tyi ->
546
+ walk_ty v tyi.node
547
+ | _ -> ()
548
+
532
549
533
550
and walk_expr
534
551
(v :visitor )
@@ -539,16 +556,97 @@ and walk_expr
539
556
Ast. EXPR_binary (_ ,aa ,ab ) ->
540
557
walk_atom v aa;
541
558
walk_atom v ab
542
- | Ast. EXPR_unary (_ ,a ) ->
543
- walk_atom v a
559
+ | Ast. EXPR_unary (unop ,a ) ->
560
+ walk_atom v a;
561
+ walk_unop v unop
544
562
| Ast. EXPR_atom a ->
545
563
walk_atom v a
546
564
in
547
- walk_bracketed
548
- v.visit_expr_pre
549
- children
550
- v.visit_expr_post
551
- e
565
+ walk_bracketed
566
+ v.visit_expr_pre
567
+ children
568
+ v.visit_expr_post
569
+ e
570
+
571
+ and walk_pexp
572
+ (v :visitor )
573
+ (p :Ast.pexp )
574
+ : unit =
575
+ let children _ =
576
+ match p.node with
577
+ Ast. PEXP_call (pexp , pexps ) ->
578
+ walk_pexp v pexp;
579
+ Array. iter (walk_pexp v) pexps
580
+
581
+ | Ast. PEXP_spawn (_, _, pexp)
582
+ | Ast. PEXP_box (_ , pexp ) ->
583
+ walk_pexp v pexp;
584
+
585
+ | Ast. PEXP_unop (unop , pexp ) ->
586
+ walk_pexp v pexp;
587
+ walk_unop v unop
588
+
589
+ | Ast. PEXP_bind (pexp , pexp_opts ) ->
590
+ walk_pexp v pexp;
591
+ Array. iter (walk_option (walk_pexp v)) pexp_opts
592
+
593
+ | Ast. PEXP_rec (elts , base ) ->
594
+ let walk_elt (_ , _ , pexp ) = walk_pexp v pexp in
595
+ Array. iter walk_elt elts;
596
+ walk_option (walk_pexp v) base
597
+
598
+ | Ast. PEXP_tup elts ->
599
+ let walk_elt (_ , pexp ) = walk_pexp v pexp in
600
+ Array. iter walk_elt elts
601
+
602
+ | Ast. PEXP_vec (_, pexps)
603
+ | Ast. PEXP_custom (_ , pexps , _ ) ->
604
+ Array. iter (walk_pexp v) pexps
605
+
606
+ | Ast. PEXP_chan po ->
607
+ walk_option (walk_pexp v) po
608
+
609
+ | Ast. PEXP_binop (_, a, b)
610
+ | Ast. PEXP_lazy_and (a, b)
611
+ | Ast. PEXP_lazy_or (a , b ) ->
612
+ walk_pexp v a;
613
+ walk_pexp v b
614
+
615
+ | Ast. PEXP_lval pl -> walk_plval v pl
616
+
617
+ | Ast. PEXP_lit lit -> walk_lit v lit
618
+
619
+ | Ast. PEXP_port
620
+ | Ast. PEXP_str _ -> ()
621
+ in
622
+ walk_bracketed
623
+ v.visit_pexp_pre
624
+ children
625
+ v.visit_pexp_post
626
+ p
627
+
628
+ and walk_plval
629
+ (v :visitor )
630
+ (p :Ast.plval )
631
+ : unit =
632
+ let children _ =
633
+ match p with
634
+ Ast. PLVAL_ident _ -> ()
635
+ | Ast. PLVAL_app (_ , tys ) ->
636
+ Array. iter (walk_ty v) tys
637
+ | Ast. PLVAL_ext_name (pexp , _ ) ->
638
+ walk_pexp v pexp
639
+ | Ast. PLVAL_ext_pexp (a , b ) ->
640
+ walk_pexp v a;
641
+ walk_pexp v b;
642
+ | Ast. PLVAL_ext_deref pexp ->
643
+ walk_pexp v pexp
644
+ in
645
+ walk_bracketed
646
+ v.visit_plval_pre
647
+ children
648
+ v.visit_plval_post
649
+ p
552
650
553
651
and walk_atom
554
652
(v :visitor )
@@ -557,7 +655,7 @@ and walk_atom
557
655
match a with
558
656
Ast. ATOM_literal ls -> walk_lit v ls.node
559
657
| Ast. ATOM_lval lv -> walk_lval v lv
560
- | Ast. ATOM_pexp _ -> bug () " Walk.walk_atom on ATOM_pexp "
658
+ | Ast. ATOM_pexp p -> walk_pexp v p
561
659
562
660
563
661
and walk_opt_atom
0 commit comments