Source file extension_payload.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
open! Base
open! Import
open Ppxlib
type t =
| Args of (arg_label * expression) list
| Expression of expression
let to_args = function
| Args args -> args
| Expression expr ->
(match expr.pexp_desc with
| Pexp_apply (expr, args) -> (Nolabel, expr) :: args
| (_ : expression_desc) -> [ Nolabel, expr ])
;;
let single_expression_or_error t ~loc =
match t with
| Args [ (Nolabel, expr) ] | Expression expr -> expr
| (_ : t) ->
Ast_builder.Default.pexp_extension
~loc
(Location.error_extensionf
~loc
"Expected exactly one unlabelled argument as payload")
;;