Source file double_hash.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
open Ppxlib
module Builder = Ast_builder.Default
let expander e =
let loc = e.pexp_loc in
match e.pexp_desc with
| Pexp_apply
( {
pexp_desc = Pexp_ident { txt = Lident "##"; _ };
pexp_loc_stack = _;
pexp_loc = _;
pexp_attributes = _;
},
[ (Nolabel, objectArg); (Nolabel, methodArg) ] ) -> (
match methodArg with
| { pexp_desc = Pexp_ident { txt = Lident li; _ }; _ } ->
Some (Builder.pexp_send ~loc objectArg { txt = li; loc })
| _ -> None)
| _ -> None
let rule = Context_free.Rule.special_function "##" expander