Skip to content

Commit e68ad21

Browse files
committed
fix ppx_dir
1 parent f46734a commit e68ad21

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

src/ppx/ppx_common.ml

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -591,16 +591,21 @@ let register name a =
591591
let loc = a.attr_loc in
592592
let _, options = get_options ~loc a.attr_payload in
593593
let ppx_dir_str = ppx_dir ~loc options.directory in
594-
let ppx_dir = match options.directory with None -> [%expr ppx_dir] | Some e -> e in
594+
let ppx_dir_p, ppx_dir_e = match options.directory with
595+
| None -> [%pat? ppx_dir], [%expr ppx_dir]
596+
| Some {pexp_desc=Pexp_ident {txt; _}; _} ->
597+
let n = Longident.name txt in
598+
pvar ~loc n, evar ~loc n
599+
| Some e -> [%pat? ppx_dir], e in
595600
match options.service with
596601
| None -> Location.raise_errorf ~loc "service not defined"
597602
| Some e ->
598603
let service_name = match e.pexp_desc with
599604
| Pexp_ident {txt; _} -> Some (Longident.name txt)
600605
| _ -> None in
601606
let register =
602-
value_binding ~loc ~pat:[%pat? ppx_dir]
603-
~expr:(eapply ~loc (evar ~loc "EzAPIServerUtils.register") [ e; evar ~loc name; ppx_dir ]) in
607+
value_binding ~loc ~pat:ppx_dir_p
608+
~expr:(eapply ~loc (evar ~loc "EzAPIServerUtils.register") [ e; evar ~loc name; ppx_dir_e ]) in
604609
let str = ppx_dir_str @ [ pstr_value ~loc Nonrecursive [ register ] ] in
605610
if options.debug then Format.printf "%a@." Pprintast.structure str;
606611
str, service_name
@@ -609,7 +614,12 @@ let register_ws ~onclose react_name bg_name a =
609614
let loc = a.attr_loc in
610615
let _, options = get_options ~loc a.attr_payload in
611616
let ppx_dir_str = ppx_dir ~loc options.directory in
612-
let ppx_dir = match options.directory with None -> [%expr ppx_dir] | Some e -> e in
617+
let ppx_dir_p, ppx_dir_e = match options.directory with
618+
| None -> [%pat? ppx_dir], [%expr ppx_dir]
619+
| Some {pexp_desc=Pexp_ident {txt; _}; _} ->
620+
let n = Longident.name txt in
621+
pvar ~loc n, evar ~loc n
622+
| Some e -> [%pat? ppx_dir], e in
613623
let onclose = match onclose with
614624
| [] -> [%expr None]
615625
| [ {pvb_pat = {ppat_desc = Ppat_var {txt; loc}; _}; _} ] -> [%expr Some [%e evar ~loc txt]]
@@ -621,13 +631,13 @@ let register_ws ~onclose react_name bg_name a =
621631
| Pexp_ident {txt; _} -> Some (Longident.name txt)
622632
| _ -> None in
623633
let register =
624-
value_binding ~loc ~pat:[%pat? ppx_dir]
634+
value_binding ~loc ~pat:ppx_dir_p
625635
~expr:(pexp_apply ~loc (evar ~loc "EzAPIServerUtils.register_ws") [
626636
Nolabel, e;
627637
Optional "onclose", onclose;
628638
Labelled "react", evar ~loc react_name;
629639
Labelled "bg", evar ~loc bg_name;
630-
Nolabel, ppx_dir ]) in
640+
Nolabel, ppx_dir_e ]) in
631641
let str = ppx_dir_str @ [ pstr_value ~loc Nonrecursive [ register ] ] in
632642
if options.debug then Format.printf "%a@." Pprintast.structure str;
633643
str, service_name

0 commit comments

Comments
 (0)