diff options
author | Alexis Ballier <aballier@gentoo.org> | 2016-09-07 11:33:53 +0200 |
---|---|---|
committer | Alexis Ballier <aballier@gentoo.org> | 2016-09-07 11:34:01 +0200 |
commit | 56013d6071db66e97a6a7193594792b595610f3a (patch) | |
tree | 3cc171534e02fee8dd32a95e54425136ffb1b224 /dev-ml/eliom | |
parent | net-misc/curl: version bump to 7.50.2 (diff) | |
download | gentoo-56013d6071db66e97a6a7193594792b595610f3a.tar.gz gentoo-56013d6071db66e97a6a7193594792b595610f3a.tar.bz2 gentoo-56013d6071db66e97a6a7193594792b595610f3a.zip |
dev-ml/eliom: backport another patch from upstream to work with ocaml 4.03
Package-Manager: portage-2.3.0
Diffstat (limited to 'dev-ml/eliom')
-rw-r--r-- | dev-ml/eliom/eliom-5.0.0-r2.ebuild (renamed from dev-ml/eliom/eliom-5.0.0-r1.ebuild) | 2 | ||||
-rw-r--r-- | dev-ml/eliom/files/oc43-2.patch | 136 |
2 files changed, 137 insertions, 1 deletions
diff --git a/dev-ml/eliom/eliom-5.0.0-r1.ebuild b/dev-ml/eliom/eliom-5.0.0-r2.ebuild index 8aaec1f4701e..36923d1d2546 100644 --- a/dev-ml/eliom/eliom-5.0.0-r1.ebuild +++ b/dev-ml/eliom/eliom-5.0.0-r2.ebuild @@ -34,7 +34,7 @@ DEPEND="${RDEPEND} src_prepare() { if has_version '>=dev-lang/ocaml-4.03' ; then - epatch "${FILESDIR}/"{camlp4,oc43}.patch + epatch "${FILESDIR}/"{camlp4,oc43,oc43-2}.patch fi has_version '>=dev-ml/tyxml-4' && epatch "${FILESDIR}/tyxml4.patch" } diff --git a/dev-ml/eliom/files/oc43-2.patch b/dev-ml/eliom/files/oc43-2.patch new file mode 100644 index 000000000000..c7eb8e25a01a --- /dev/null +++ b/dev-ml/eliom/files/oc43-2.patch @@ -0,0 +1,136 @@ +commit 27c69ac5dfbc26744e304232bb8c0cf22d396082 +Author: Vasilis Papavasileiou <git@vasilis.airpost.net> +Date: Thu May 5 11:14:02 2016 -0400 + + Fix PPX for 4.03 (empty let bindings) + +diff --git a/src/ppx/ppx_eliom_client.ml b/src/ppx/ppx_eliom_client.ml +index 580d2b5..fb2d263 100644 +--- a/src/ppx/ppx_eliom_client.ml ++++ b/src/ppx/ppx_eliom_client.ml +@@ -89,21 +89,25 @@ module Pass = struct + ] + + let define_client_functions ~loc client_value_datas = +- let bindings = +- List.map +- (fun (_num, id, expr, args) -> +- let patt = Pat.var id in +- let typ = find_fragment id in +- let args = List.map Pat.var args in +- let expr = +- [%expr +- fun [%p pat_args args] -> ([%e expr] : [%t typ]) +- ] [@metaloc loc] +- in +- Vb.mk ~loc patt expr) +- client_value_datas +- in +- Str.value ~loc Nonrecursive bindings ++ match client_value_datas with ++ | [] -> ++ [] ++ | _ -> ++ let bindings = ++ List.map ++ (fun (_num, id, expr, args) -> ++ let patt = Pat.var id in ++ let typ = find_fragment id in ++ let args = List.map Pat.var args in ++ let expr = ++ [%expr ++ fun [%p pat_args args] -> ([%e expr] : [%t typ]) ++ ] [@metaloc loc] ++ in ++ Vb.mk ~loc patt expr) ++ client_value_datas ++ in ++ [Str.value ~loc Nonrecursive bindings] + + (* For injections *) + +@@ -139,8 +143,8 @@ module Pass = struct + let client_expr_data = flush_client_value_datas () in + open_client_section loc :: + register_client_closures client_expr_data @ +- [ define_client_functions loc client_expr_data ; +- item ; ++ define_client_functions loc client_expr_data @ ++ [ item ; + close_server_section loc ; + ] + +@@ -155,11 +159,13 @@ module Pass = struct + push_client_value_data num id expr + (List.map fst escaped_bindings); + +- match context with +- | `Server -> ++ match context, escaped_bindings with ++ | `Server, _ -> + (* We are in a server fragment, this code should always be discarded. *) + Exp.extension @@ AM.extension_of_error @@ Location.errorf "Eliom: ICE" +- | `Shared -> ++ | `Shared, [] -> ++ [%expr [%e frag_eid] ()][@metaloc loc] ++ | `Shared, _ -> + let bindings = + List.map + (fun (gen_id, expr) -> +diff --git a/src/ppx/ppx_eliom_server.ml b/src/ppx/ppx_eliom_server.ml +index 97f0b53..b5238ad 100644 +--- a/src/ppx/ppx_eliom_server.ml ++++ b/src/ppx/ppx_eliom_server.ml +@@ -85,6 +85,7 @@ module Pass = struct + let $gen_id$ = $orig_expr$ and ... + (Necessary for injections in shared section) *) + let bind_injected_idents injections = ++ assert (injections <> []); + let bindings = + List.map + (fun (txt, expr,_) -> +@@ -134,10 +135,15 @@ module Pass = struct + + let client_str item = + let all_injections = flush_injections () in +- let loc = item.pstr_loc in +- [ bind_injected_idents all_injections; ++ let ccs = ++ let loc = item.pstr_loc in + close_client_section loc all_injections +- ] ++ in ++ match all_injections with ++ | [] -> ++ [ ccs ] ++ | l -> ++ [ bind_injected_idents l ; ccs ] + + let server_str item = [ + item ; +@@ -146,12 +152,19 @@ module Pass = struct + + let shared_str item = + let all_injections = flush_injections () in +- let loc = item.pstr_loc in +- [ bind_injected_idents all_injections ; +- item ; +- close_server_section loc ; +- close_client_section loc all_injections ; +- ] ++ let cl = ++ let loc = item.pstr_loc in ++ [ ++ item; ++ close_server_section loc ; ++ close_client_section loc all_injections ; ++ ] ++ in ++ match all_injections with ++ | [] -> ++ cl ++ | l -> ++ bind_injected_idents l :: cl + + let fragment ?typ ~context:_ ~num ~id expr = + let typ = |