@@ -39,8 +39,9 @@ module Ctx = struct
39
39
let find name ctx = Hashtbl. find_opt ctx name
40
40
41
41
let update_used name ctx =
42
- let old_value, _ = Hashtbl. find ctx name in
43
- Hashtbl. replace ctx name (old_value, true )
42
+ match Hashtbl. find_opt ctx name with
43
+ | Some (old_value , _ ) -> Hashtbl. replace ctx name (old_value, true )
44
+ | None -> ()
44
45
45
46
let is_used name ctx = Hashtbl. find_opt ctx name |> Option. value ~default: (" " , false ) |> snd
46
47
end
@@ -60,7 +61,9 @@ module Regexp = struct
60
61
| Nongreedy e -> recurse must_match e
61
62
| Capture _ -> error ~loc " Unnamed capture is not allowed for %%pcre."
62
63
| Capture_as (idr , e ) -> fun (nG , bs ) -> recurse must_match e (nG + 1 , (idr, Some nG, must_match) :: bs)
63
- | Named_as (idr , e ) -> fun (nG , bs ) -> recurse must_match e (nG + 1 , (idr, Some nG, must_match) :: bs)
64
+ | Named_subs (idr , None, e ) -> fun (nG , bs ) -> recurse must_match e (nG + 1 , (idr, Some nG, must_match) :: bs)
65
+ | Named_subs (_ , Some idr , e ) -> fun (nG , bs ) -> recurse must_match e (nG + 1 , (idr, Some nG, must_match) :: bs)
66
+ | Unnamed_subs (_ , e ) -> fun (nG , bs ) -> recurse must_match e (nG + 1 , bs)
64
67
| Call _ -> error ~loc " (&...) is not implemented for %%pcre."
65
68
in
66
69
function
@@ -86,7 +89,7 @@ module Regexp = struct
86
89
| Nongreedy e -> recurse p_suffix e ^ " ?"
87
90
| Capture _ -> error ~loc " Unnamed capture is not allowed for %%pcre."
88
91
| Capture_as (_ , e ) -> " (" ^ recurse p_alt e ^ " )"
89
- | Named_as (idr , _ ) ->
92
+ | Named_subs ( idr , _ , _ ) | Unnamed_subs (idr , _ ) ->
90
93
let var_name = idr.txt in
91
94
let content =
92
95
match Ctx. find var_name ctx with
@@ -121,6 +124,7 @@ let rec must_match p i =
121
124
let extract_bindings ~ctx ~pos s =
122
125
let r = Regexp. parse_exn ~pos s in
123
126
let nG, bs = Regexp. bindings r in
127
+ List. iter (fun (idr , i , b ) -> Format. printf " %s, %i, %b@." idr.txt (match i with Some i -> i | None -> - 1 ) b) bs;
124
128
let re_str = Regexp. to_string ~ctx r in
125
129
let loc = Location. none in
126
130
estring ~loc re_str, bs, nG
@@ -275,9 +279,9 @@ let suppress_unused_inlined ctx =
275
279
let impl str =
276
280
let ctx = Ctx. empty () in
277
281
let str, rev_bindings = (transformation ctx)#structure str [] in
278
- let str = (suppress_unused_inlined ctx)#structure str in
279
282
if rev_bindings = [] then str
280
283
else (
284
+ let str = (suppress_unused_inlined ctx)#structure str in
281
285
let re_str =
282
286
let loc = Location. none in
283
287
[% str
0 commit comments