diff options
-rw-r--r-- | dev-ml/ppx_sexp_conv/files/oc43.patch | 145 | ||||
-rw-r--r-- | dev-ml/ppx_sexp_conv/ppx_sexp_conv-113.33.00.ebuild | 6 |
2 files changed, 150 insertions, 1 deletions
diff --git a/dev-ml/ppx_sexp_conv/files/oc43.patch b/dev-ml/ppx_sexp_conv/files/oc43.patch new file mode 100644 index 000000000000..d95c46c3371e --- /dev/null +++ b/dev-ml/ppx_sexp_conv/files/oc43.patch @@ -0,0 +1,145 @@ +diff -uNr ppx_sexp_conv-113.33.00/expander/ppx_sexp_conv_expander.ml ppx_sexp_conv-113.33.00+4.03/expander/ppx_sexp_conv_expander.ml +--- ppx_sexp_conv-113.33.00/expander/ppx_sexp_conv_expander.ml 2016-03-09 16:44:54.000000000 +0100 ++++ ppx_sexp_conv-113.33.00+4.03/expander/ppx_sexp_conv_expander.ml 2016-03-22 15:13:51.000000000 +0100 +@@ -491,30 +491,33 @@ + let lid = Located.map lident cnstr in + let str = estring ~loc cnstr.txt in + match cd.pcd_args with +- | [] -> +- ppat_construct ~loc lid None --> [%expr Sexplib.Sexp.Atom [%e str]] +- | args -> +- match args with +- | [ [%type: [%t? tp] sexp_list ] ] -> +- let cnv_expr = Fun_or_match.expr ~loc (sexp_of_type renaming tp) in +- ppat_construct ~loc lid (Some [%pat? l]) --> +- [%expr +- Sexplib.Sexp.List +- (Sexplib.Sexp.Atom [%e str] :: +- Sexplib.Conv.list_map [%e cnv_expr] l)] +- | _ -> +- let sexp_of_args = List.map ~f:(sexp_of_type renaming) args in +- let cnstr_expr = [%expr Sexplib.Sexp.Atom [%e str] ] in +- let bindings, patts, vars = Fun_or_match.map_tmp_vars ~loc sexp_of_args in +- let patt = +- match patts with +- | [patt] -> patt +- | _ -> ppat_tuple ~loc patts +- in +- ppat_construct ~loc lid (Some patt) --> +- pexp_let ~loc Nonrecursive bindings +- [%expr Sexplib.Sexp.List [%e elist ~loc (cnstr_expr :: vars)]] +- ) ++ | Pcstr_record _ -> failwith "Pcstr_record unsupported" ++ | Pcstr_tuple pcd_args -> ++ match pcd_args with ++ | [] -> ++ ppat_construct ~loc lid None --> [%expr Sexplib.Sexp.Atom [%e str]] ++ | args -> ++ match args with ++ | [ [%type: [%t? tp] sexp_list ] ] -> ++ let cnv_expr = Fun_or_match.expr ~loc (sexp_of_type renaming tp) in ++ ppat_construct ~loc lid (Some [%pat? l]) --> ++ [%expr ++ Sexplib.Sexp.List ++ (Sexplib.Sexp.Atom [%e str] :: ++ Sexplib.Conv.list_map [%e cnv_expr] l)] ++ | _ -> ++ let sexp_of_args = List.map ~f:(sexp_of_type renaming) args in ++ let cnstr_expr = [%expr Sexplib.Sexp.Atom [%e str] ] in ++ let bindings, patts, vars = Fun_or_match.map_tmp_vars ~loc sexp_of_args in ++ let patt = ++ match patts with ++ | [patt] -> patt ++ | _ -> ppat_tuple ~loc patts ++ in ++ ppat_construct ~loc lid (Some patt) --> ++ pexp_let ~loc Nonrecursive bindings ++ [%expr Sexplib.Sexp.List [%e elist ~loc (cnstr_expr :: vars)]] ++ ) + + let sexp_of_sum tps cds = Fun_or_match.Match (branch_sum tps cds) + +@@ -730,14 +733,14 @@ + let expr = + match ec with + | {pext_name = {loc; txt = cnstr}; +- pext_kind = Pext_decl ([], None); _;} -> ++ pext_kind = Pext_decl (Pcstr_tuple [], None); _;} -> + [%expr + Sexplib.Exn_magic.register [%e pexp_construct ~loc + (Located.lident ~loc cnstr) None] + [%e estring ~loc (get_full_cnstr cnstr)] + ] + | {pext_name = {loc; txt = cnstr}; +- pext_kind = Pext_decl (_::_ as tps, None); _;} -> ++ pext_kind = Pext_decl (Pcstr_tuple ((_::_) as tps), None); _;} -> + let fps = List.map ~f:(fun tp -> sexp_of_type renaming tp) tps in + let sexp_converters = List.map fps ~f:Fun_or_match.(expr ~loc) in + let _, patts, vars = Fun_or_match.map_tmp_vars ~loc fps in +@@ -761,6 +764,8 @@ + eapply ~loc partial sexp_converters + in + [%expr [%e call] ] ++ | { pext_kind = Pext_decl (Pcstr_record _, _); _;} -> ++ failwith "Pcstr_record not supported" + | { pext_kind = Pext_decl (_, Some _); _} -> + Location.raise_errorf ~loc "sexp_of_exn/:" + | { pext_kind = Pext_rebind _; _} -> +@@ -1089,13 +1094,14 @@ + (* Generate matching code for well-formed S-expressions wrt. sum types *) + let mk_good_sum_matches (loc,cds) = + List.map cds ~f:(function +- | { pcd_name = cnstr; pcd_args = []; _} -> ++ | { pcd_args = Pcstr_record _; _} -> failwith "Pcstr_record unsupported" ++ | { pcd_name = cnstr; pcd_args = Pcstr_tuple []; _} -> + let lcstr = pstring ~loc (String.uncapitalize cnstr.txt) in + let str = pstring ~loc cnstr.txt in + [%pat? Sexplib.Sexp.Atom ([%p lcstr] | [%p str])] --> + pexp_construct ~loc (Located.lident ~loc cnstr.txt) None + +- | { pcd_name = cnstr; pcd_args = (_::_ as tps); _} -> ++ | { pcd_name = cnstr; pcd_args = Pcstr_tuple (_::_ as tps); _} -> + let lcstr = pstring ~loc (String.uncapitalize cnstr.txt) in + let str = pstring ~loc cnstr.txt in + [%pat? (Sexplib.Sexp.List +@@ -1109,14 +1115,15 @@ + wrt. sum types *) + let mk_bad_sum_matches (loc,cds) = + List.map cds ~f:(function +- | { pcd_name = cnstr; pcd_args = []; _} -> ++ | { pcd_args = Pcstr_record _; _} -> failwith "Pcstr_record unsupported" ++ | { pcd_name = cnstr; pcd_args = Pcstr_tuple []; _} -> + let lcstr = pstring ~loc (String.uncapitalize cnstr.txt) in + let str = pstring ~loc cnstr.txt in + [%pat? Sexplib.Sexp.List + (Sexplib.Sexp.Atom ([%p lcstr] | [%p str]) :: _) as sexp + ] --> + [%expr Sexplib.Conv_error.stag_no_args _tp_loc sexp] +- | { pcd_name = cnstr; pcd_args = _::_; _} -> ++ | { pcd_name = cnstr; pcd_args = Pcstr_tuple (_::_); _} -> + let lcstr = pstring ~loc (String.uncapitalize cnstr.txt) in + let str = pstring ~loc cnstr.txt in + [%pat? Sexplib.Sexp.Atom ([%p lcstr] | [%p str]) as sexp] --> +diff -uNr ppx_sexp_conv-113.33.00/_oasis ppx_sexp_conv-113.33.00+4.03/_oasis +--- ppx_sexp_conv-113.33.00/_oasis 2016-03-09 16:44:54.000000000 +0100 ++++ ppx_sexp_conv-113.33.00+4.03/_oasis 2016-03-22 15:13:51.000000000 +0100 +@@ -1,8 +1,8 @@ + OASISFormat: 0.4 +-OCamlVersion: >= 4.02.3 ++OCamlVersion: >= 4.03.0 + FindlibVersion: >= 1.3.2 + Name: ppx_sexp_conv +-Version: 113.33.00 ++Version: 113.33.00+4.03 + Synopsis: Generation of S-expression conversion functions from type definitions + Authors: Jane Street Group, LLC <opensource@janestreet.com> + Copyrights: (C) 2015-2016 Jane Street Group LLC <opensource@janestreet.com> +diff -uNr ppx_sexp_conv-113.33.00/opam ppx_sexp_conv-113.33.00+4.03/opam +--- ppx_sexp_conv-113.33.00/opam 2016-03-18 12:08:01.000000000 +0100 ++++ ppx_sexp_conv-113.33.00+4.03/opam 2016-03-22 17:51:37.000000000 +0100 +@@ -17,4 +17,4 @@ + "ppx_type_conv" + "sexplib" + ] +-available: [ ocaml-version >= "4.02.3" ] ++available: [ ocaml-version >= "4.03.0" ] diff --git a/dev-ml/ppx_sexp_conv/ppx_sexp_conv-113.33.00.ebuild b/dev-ml/ppx_sexp_conv/ppx_sexp_conv-113.33.00.ebuild index c94e89c8eee8..b3c39073cb5a 100644 --- a/dev-ml/ppx_sexp_conv/ppx_sexp_conv-113.33.00.ebuild +++ b/dev-ml/ppx_sexp_conv/ppx_sexp_conv-113.33.00.ebuild @@ -4,7 +4,7 @@ EAPI="5" -inherit oasis +inherit oasis eutils DESCRIPTION="Support Library for type-driven code generators" HOMEPAGE="http://www.janestreet.com/ocaml" @@ -24,6 +24,10 @@ DEPEND="dev-ml/ppx_tools:= RDEPEND="${DEPEND}" DEPEND="${DEPEND} dev-ml/opam" +src_prepare() { + has_version '>=dev-lang/ocaml-4.03' && epatch "${FILESDIR}/oc43.patch" +} + src_configure() { emake setup.exe OASIS_SETUP_COMMAND="./setup.exe" oasis_src_configure |