@@ -26,7 +26,6 @@ open Longident
26
26
27
27
let error ~loc msg = raise (Location. Error (Location. error ~loc msg))
28
28
29
- let dyn_istop = ref true
30
29
let dyn_bindings = ref []
31
30
let clear_bindings () = dyn_bindings := []
32
31
let add_binding binding = dyn_bindings := binding :: ! dyn_bindings
@@ -156,24 +155,19 @@ let rewrite_expr mapper e_ext =
156
155
error ~loc " [%pcre] only applies to match an function." )
157
156
| _ -> default_mapper.expr mapper e_ext)
158
157
159
- let rewrite_value_binding mapper pvb =
160
- let istop = ! dyn_istop in
161
- dyn_istop := false ;
162
- let pvb = default_mapper.value_binding mapper pvb in
163
- dyn_istop := istop;
164
- if not istop then pvb else
165
- (match get_bindings () with
166
- | [] -> pvb
158
+ let rewrite_structure mapper sis =
159
+ let sis' =
160
+ default_mapper.structure {default_mapper with expr = rewrite_expr} sis
161
+ in
162
+ (match get_bindings () |> List. rev with
163
+ | [] -> sis'
167
164
| bindings ->
168
165
clear_bindings () ;
169
- let e_let = {pexp_desc = Pexp_let (Nonrecursive , bindings, pvb.pvb_expr);
170
- pexp_loc = pvb.pvb_loc; pexp_attributes = [] } in
171
- {pvb with pvb_expr = e_let})
172
-
173
- let regexp_mapper _config _cookies = {
174
- default_mapper with
175
- value_binding = rewrite_value_binding;
176
- expr = rewrite_expr;
177
- }
166
+ let si' = {
167
+ pstr_desc = Pstr_value (Nonrecursive , bindings);
168
+ pstr_loc = Location. none;
169
+ } in
170
+ si' :: sis')
178
171
179
- let () = Driver. register ~name: " ppx_regexp" ocaml_version regexp_mapper
172
+ let () = Driver. register ~name: " ppx_regexp" ocaml_version
173
+ (fun _config _cookies -> {default_mapper with structure = rewrite_structure})
0 commit comments