@@ -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