11open Ppxlib
22
3- let expand_string ~loc s = [% pat? `String [% p Ast_builder.Default. pstring ~loc s]]
3+ let expand_string ~loc s =
4+ [% pat? `String [% p Ast_builder.Default. pstring ~loc s]]
45
5- let expand_intlit ~loc s = [% pat? `Intlit [% p Ast_builder.Default. pstring ~loc s]]
6+ let expand_intlit ~loc s =
7+ [% pat? `Intlit [% p Ast_builder.Default. pstring ~loc s]]
68
79let expand_int ~loc ~ppat_loc s =
810 match Ocaml_compat. int_of_string_opt s with
911 | Some i -> [% pat? `Int [% p Ast_builder.Default. pint ~loc i]]
10- | None when Integer_const. is_binary s -> Raise. unsupported_payload ~loc: ppat_loc
11- | None when Integer_const. is_octal s -> Raise. unsupported_payload ~loc: ppat_loc
12- | None when Integer_const. is_hexadecimal s -> Raise. unsupported_payload ~loc: ppat_loc
12+ | None when Integer_const. is_binary s ->
13+ Raise. unsupported_payload ~loc: ppat_loc
14+ | None when Integer_const. is_octal s ->
15+ Raise. unsupported_payload ~loc: ppat_loc
16+ | None when Integer_const. is_hexadecimal s ->
17+ Raise. unsupported_payload ~loc: ppat_loc
1318 | None -> expand_intlit ~loc s
1419
1520let expand_float ~loc s = [% pat? `Float [% p Ast_builder.Default. pfloat ~loc s]]
@@ -18,56 +23,57 @@ let expand_var ~loc var = Ast_builder.Default.ppat_var ~loc var
1823
1924let expand_anti_quotation ~ppat_loc = function
2025 | PPat (ppat , _ ) -> ppat
21- | PStr _
22- | PSig _
23- | PTyp _ -> Raise. bad_pat_antiquotation_payload ~loc: ppat_loc
26+ | PStr _ | PSig _ | PTyp _ ->
27+ Raise. bad_pat_antiquotation_payload ~loc: ppat_loc
2428
2529let rec expand ~loc ~path pat =
2630 match pat with
2731 | [% pat? _] -> [% pat? _]
2832 | [% pat? None ] -> [% pat? `Null ]
2933 | [% pat? true ] -> [% pat? `Bool true ]
3034 | [% pat? false ] -> [% pat? `Bool false ]
31- | {ppat_desc = Ppat_constant (Pconst_string (s , None)); _} -> expand_string ~loc s
32- | {ppat_desc = Ppat_constant ( Pconst_integer (s, None )); ppat_loc; _}
33- ->
34- expand_int ~loc ~ppat_loc s
35- | {ppat_desc = Ppat_constant ( Pconst_integer (s, Some ( 'l' | 'L' | 'n' ))); _}
36- ->
37- expand_intlit ~loc s
38- | { ppat_desc = Ppat_constant (Pconst_float ( s , None)); _ } -> expand_float ~loc s
39- | { ppat_desc = Ppat_var v ; _} -> expand_var ~loc v
40- | {ppat_desc = Ppat_extension ({txt = " y " ; _}, p); ppat_loc; _}
41- ->
42- expand_anti_quotation ~ppat_loc p
43- | [ % pat? [ % p? left] | [ % p? right]]
44- ->
45- ( [% pat? [% p expand ~loc ~path left] | [% p expand ~loc ~path right]])
46- | {ppat_desc = Ppat_alias ( pat, var); _}
47- ->
48- let pat = expand ~loc ~path pat in
49- Ast_builder.Default. ppat_alias ~loc pat var
35+ | { ppat_desc = Ppat_constant (Pconst_string (s , None)); _ } ->
36+ expand_string ~loc s
37+ | { ppat_desc = Ppat_constant (Pconst_integer ( s , None)); ppat_loc; _ } ->
38+ expand_int ~loc ~ppat_loc s
39+ | {
40+ ppat_desc = Ppat_constant ( Pconst_integer (s, Some ( 'l' | 'L' | 'n' )));
41+ _;
42+ } ->
43+ expand_intlit ~loc s
44+ | { ppat_desc = Ppat_constant (Pconst_float ( s , None)); _ } ->
45+ expand_float ~loc s
46+ | { ppat_desc = Ppat_var v ; _ } -> expand_var ~loc v
47+ | { ppat_desc = Ppat_extension ( { txt = "y" ; _ } , p ); ppat_loc; _ } ->
48+ expand_anti_quotation ~ppat_loc p
49+ | [% pat? [% p? left] | [% p? right]] ->
50+ [ % pat? [ % p expand ~loc ~path left] | [ % p expand ~loc ~path right]]
51+ | { ppat_desc = Ppat_alias ( pat , var ); _ } ->
52+ let pat = expand ~loc ~path pat in
53+ Ast_builder.Default. ppat_alias ~loc pat var
5054 | [% pat? []] -> [% pat? `List []]
51- | [% pat? [% p? _]::[% p? _]] -> [% pat? `List [% p expand_list ~loc ~path pat]]
52- | {ppat_desc = Ppat_record (l , Closed); ppat_loc; _} -> expand_record ~loc ~ppat_loc ~path l
53- | {ppat_loc = loc ; _} -> Raise. unsupported_payload ~loc
55+ | [% pat? [% p? _] :: [% p? _]] -> [% pat? `List [% p expand_list ~loc ~path pat]]
56+ | { ppat_desc = Ppat_record (l , Closed); ppat_loc; _ } ->
57+ expand_record ~loc ~ppat_loc ~path l
58+ | { ppat_loc = loc ; _ } -> Raise. unsupported_payload ~loc
59+
5460and expand_list ~loc ~path = function
5561 | [% pat? []] -> [% pat? []]
56- | [% pat? [% p? hd]::[% p? tl]]
57- ->
58- let json_hd = expand ~loc ~path hd in
59- let json_tl = expand_list ~loc ~path tl in
60- [% pat? [% p json_hd]::[% p json_tl]]
62+ | [% pat? [% p? hd] :: [% p? tl]] ->
63+ let json_hd = expand ~loc ~path hd in
64+ let json_tl = expand_list ~loc ~path tl in
65+ [% pat? [% p json_hd] :: [% p json_tl]]
6166 | _ -> assert false
67+
6268and expand_record ~loc ~ppat_loc ~path l =
6369 let field = function
64- | {txt = Lident s ; _} -> [% pat? [% p Ast_builder.Default. pstring ~loc s]]
65- | {txt = _ ; loc} -> Raise. unsupported_record_field ~loc
70+ | { txt = Lident s ; _ } -> [% pat? [% p Ast_builder.Default. pstring ~loc s]]
71+ | { txt = _ ; loc } -> Raise. unsupported_record_field ~loc
6672 in
67- let expand_one (f , p ) =
68- [% pat? ([% p field f], [% p expand ~loc ~path p])]
73+ let expand_one (f , p ) = [% pat? [% p field f], [% p expand ~loc ~path p]] in
74+ let assoc_pattern pat_list =
75+ [% pat? `Assoc [% p Ast_builder.Default. plist ~loc pat_list]]
6976 in
70- let assoc_pattern pat_list = [% pat? `Assoc [% p Ast_builder.Default. plist ~loc pat_list]] in
7177 if List. length l > 4 then
7278 Raise. too_many_fields_in_record_pattern ~loc: ppat_loc
7379 else
@@ -76,5 +82,6 @@ and expand_record ~loc ~ppat_loc ~path l =
7682 let assoc_patterns = List. map assoc_pattern permutations in
7783 match assoc_patterns with
7884 | [] -> assert false
79- | [single] -> single
80- | hd ::tl -> List. fold_left (fun acc elm -> [% pat? [% p acc] | [% p elm]]) hd tl
85+ | [ single ] -> single
86+ | hd :: tl ->
87+ List. fold_left (fun acc elm -> [% pat? [% p acc] | [% p elm]]) hd tl
0 commit comments