diff options
Diffstat (limited to 'dev-ml/lwt')
-rw-r--r-- | dev-ml/lwt/Manifest | 1 | ||||
-rw-r--r-- | dev-ml/lwt/files/lwt-5.3.0-ppxlib-0.18.0.patch | 401 | ||||
-rw-r--r-- | dev-ml/lwt/lwt-5.3.0.ebuild | 37 | ||||
-rw-r--r-- | dev-ml/lwt/metadata.xml | 5 |
4 files changed, 443 insertions, 1 deletions
diff --git a/dev-ml/lwt/Manifest b/dev-ml/lwt/Manifest index b139eb1dc0aa..52c917dfdd05 100644 --- a/dev-ml/lwt/Manifest +++ b/dev-ml/lwt/Manifest @@ -1,2 +1,3 @@ DIST lwt-3.0.0.tar.gz 285864 BLAKE2B d14f8f8a9e71a61c57bd7c208575849667dab4a4770b56a0d94e93024b22be9b7d88d10c0fa24eb8060b67c75e72c2c8bbfa0362f3aa815c76c93575225ce056 SHA512 270a6dc2fc58950380eecf72767782c72a5d72226f4af0e9a4f9b0e70b788eeb1d2727348ab8da4411ee59374a19524a6a793b14a26fe7051d51f987ef0e42b8 DIST lwt-3.1.0.tar.gz 285309 BLAKE2B ffc3a416491d4c7b7e7c0da67b48d9eeb5b7fa50e3637d4f0cfcd1689b75626b48c8dd6d91e87c93022047809a3774683c41ce620e07ee4d3e1409185e7f8d16 SHA512 0b2269e53f2e8a57e1ffd6f237c6b22de39a3b6b0d57276c7cb9371392aabc9fb6364b2617a6408ed0049ed64f71de0c540209cf83ce43899fd025295342eb0d +DIST lwt-5.3.0.tar.gz 298152 BLAKE2B a39494bf98fcca07bf4601a742f4bfdc1ea2a67e2babbab650c41d2df58296a859520509ddc080af9c4d55be76439b401174720765fb942586d7c866f80cc538 SHA512 9922c19944595b0c07da8e1bbdecb2cc7c5a7edcdc2224215efb819d9c735da8986388a2446bd0762e28533f5d9d386970f07a4f1b0d14255c6743f3a1d16cb6 diff --git a/dev-ml/lwt/files/lwt-5.3.0-ppxlib-0.18.0.patch b/dev-ml/lwt/files/lwt-5.3.0-ppxlib-0.18.0.patch new file mode 100644 index 000000000000..0bda140294a0 --- /dev/null +++ b/dev-ml/lwt/files/lwt-5.3.0-ppxlib-0.18.0.patch @@ -0,0 +1,401 @@ +--- lwt-5.3.0-orig/lwt_ppx.opam 2020-04-23 16:32:55.000000000 +1000 ++++ lwt-5.3.0/lwt_ppx.opam 2020-10-12 22:12:12.863159266 +1100 +@@ -20,8 +20,7 @@ + "dune" {>= "1.8.0"} + "lwt" + "ocaml" {>= "4.02.0"} +- "ocaml-migrate-parsetree" {>= "1.5.0"} +- "ppx_tools_versioned" {>= "5.3.0"} ++ "ppxlib" {>= "0.16.0"} + ] + + build: [ +--- lwt-5.3.0-orig/src/ppx/dune 2020-04-23 16:32:55.000000000 +1000 ++++ lwt-5.3.0/src/ppx/dune 2020-10-12 22:11:33.844038953 +1100 +@@ -13,10 +13,10 @@ + (public_name lwt_ppx) + (synopsis "Lwt PPX syntax extension") + (modules ppx_lwt) +- (libraries compiler-libs.common ocaml-migrate-parsetree ppx_tools_versioned) ++ (libraries compiler-libs.common ppxlib) + (ppx_runtime_libraries lwt) + (kind ppx_rewriter) +- (preprocess (pps ppx_tools_versioned.metaquot_410 |} ^ bisect_ppx ^ {|)) ++ (preprocess (pps ppxlib.metaquot|} ^ bisect_ppx ^ {|)) + (flags (:standard -w +A-4))) + + |} +--- lwt-5.3.0-orig/src/ppx/ppx_lwt.ml 2020-04-23 16:32:55.000000000 +1000 ++++ lwt-5.3.0/src/ppx/ppx_lwt.ml 2020-10-12 22:10:11.298784433 +1100 +@@ -1,16 +1,11 @@ +-open! Migrate_parsetree +-open! OCaml_410.Ast +-open Ast_mapper ++open! Ppxlib ++open Ast_builder.Default + open! Ast_helper +-open Asttypes +-open Parsetree +- +-open Ast_convenience_410 + + (** {2 Convenient stuff} *) + +-let with_loc f {txt ; loc = _loc} = +- (f txt) [@metaloc _loc] ++let with_loc f {txt ; loc } = ++ f ~loc txt + + (** Test if a case is a catchall. *) + let is_catchall case = +@@ -27,7 +22,7 @@ + List.exists is_catchall cases + in + if not has_wildcard +- then cases @ [Exp.case [%pat? exn] [%expr Lwt.fail exn]] [@metaloc Location.none] ++ then cases @ (let loc = Location.none in [Exp.case [%pat? exn] [%expr Lwt.fail exn]]) + else cases + + (** {3 Internal names} *) +@@ -73,34 +68,33 @@ + evar ~loc:binding.pvb_expr.pexp_loc (gen_name i) + in + let fun_ = +- [%expr (fun [%p binding.pvb_pat] -> [%e aux (i+1) t])] [@metaloc e_loc] ++ let loc = e_loc in ++ [%expr (fun [%p binding.pvb_pat] -> [%e aux (i+1) t])] + in + let new_exp = +- [%expr +- let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in +- Lwt.backtrace_bind +- (fun exn -> try Reraise.reraise exn with exn -> exn) +- [%e name] +- [%e fun_] +- ] [@metaloc e_loc] ++ let loc = e_loc in ++ [%expr ++ let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in ++ Lwt.backtrace_bind ++ (fun exn -> try Reraise.reraise exn with exn -> exn) ++ [%e name] ++ [%e fun_] ++ ] + in + { new_exp with pexp_attributes = binding.pvb_attributes } + in aux 0 l + +-(* Note: instances of [@metaloc !default_loc] below are workarounds for +- https://github.com/ocaml-ppx/ppx_tools_versioned/issues/21. *) +- + let lwt_sequence mapper ~exp ~lhs ~rhs ~ext_loc = +- let pat= [%pat? ()][@metaloc ext_loc] in +- let lhs, rhs = mapper.expr mapper lhs, mapper.expr mapper rhs in +- [%expr +- let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in +- Lwt.backtrace_bind +- (fun exn -> try Reraise.reraise exn with exn -> exn) +- [%e lhs] +- (fun [%p pat] -> [%e rhs]) +- ] +- [@metaloc exp.pexp_loc] ++ let pat= let loc = ext_loc in [%pat? ()] in ++ let lhs, rhs = mapper#expression lhs, mapper#expression rhs in ++ let loc = exp.pexp_loc in ++ [%expr ++ let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in ++ Lwt.backtrace_bind ++ (fun exn -> try Reraise.reraise exn with exn -> exn) ++ [%e lhs] ++ (fun [%p pat] -> [%e rhs]) ++ ] + + (** For expressions only *) + (* We only expand the first level after a %lwt. +@@ -121,7 +115,7 @@ + (gen_bindings vbl) + (gen_binds exp.pexp_loc vbl e) + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + (* [match%lwt $e$ with $c$] ≡ [Lwt.bind $e$ (function $c$)] + [match%lwt $e$ with exception $x$ | $c$] ≡ +@@ -134,11 +128,8 @@ + | _ -> false) + in + if cases = [] then +- raise (Location.Error ( +- Location.errorf +- ~loc:exp.pexp_loc +- "match%%lwt must contain at least one non-exception pattern." +- )); ++ Location.raise_errorf ~loc:exp.pexp_loc ++ "match%%lwt must contain at least one non-exception pattern." ; + let exns = + exns |> List.map ( + function +@@ -150,22 +141,24 @@ + let new_exp = + match exns with + | [] -> +- [%expr Lwt.bind [%e e] [%e Exp.function_ cases]] [@metaloc !default_loc] +- | _ -> [%expr Lwt.try_bind (fun () -> [%e e]) +- [%e Exp.function_ cases] +- [%e Exp.function_ exns]] +- [@metaloc !default_loc] ++ let loc = !default_loc in ++ [%expr Lwt.bind [%e e] [%e Exp.function_ cases]] ++ | _ -> ++ let loc = !default_loc in ++ [%expr Lwt.try_bind (fun () -> [%e e]) ++ [%e Exp.function_ cases] ++ [%e Exp.function_ exns]] + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + (* [assert%lwt $e$] ≡ + [try Lwt.return (assert $e$) with exn -> Lwt.fail exn] *) + | Pexp_assert e -> + let new_exp = ++ let loc = !default_loc in + [%expr try Lwt.return (assert [%e e]) with exn -> Lwt.fail exn] +- [@metaloc !default_loc] + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + (* [while%lwt $cond$ do $body$ done] ≡ + [let rec __ppx_lwt_loop () = +@@ -175,15 +168,15 @@ + *) + | Pexp_while (cond, body) -> + let new_exp = ++ let loc = !default_loc in + [%expr + let rec __ppx_lwt_loop () = + if [%e cond] then Lwt.bind [%e body] __ppx_lwt_loop + else Lwt.return_unit + in __ppx_lwt_loop () + ] +- [@metaloc !default_loc] + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + (* [for%lwt $p$ = $start$ (to|downto) $end$ do $body$ done] ≡ + [let __ppx_lwt_bound = $end$ in +@@ -193,16 +186,19 @@ + in __ppx_lwt_loop $start$] + *) + | Pexp_for ({ppat_desc = Ppat_var p_var; _} as p, start, bound, dir, body) -> +- let comp, op = match dir with +- | Upto -> evar ">", evar "+" +- | Downto -> evar "<", evar "-" ++ let comp, op = ++ let loc = !default_loc in ++ match dir with ++ | Upto -> evar ~loc ">", evar ~loc "+" ++ | Downto -> evar ~loc "<", evar ~loc "-" + in +- let p' = with_loc (fun s -> evar s) p_var in ++ let p' = with_loc evar p_var in + +- let exp_bound = [%expr __ppx_lwt_bound] [@metaloc bound.pexp_loc] in +- let pat_bound = [%pat? __ppx_lwt_bound] [@metaloc bound.pexp_loc] in ++ let exp_bound = let loc = bound.pexp_loc in [%expr __ppx_lwt_bound] in ++ let pat_bound = let loc = bound.pexp_loc in [%pat? __ppx_lwt_bound] in + + let new_exp = ++ let loc = !default_loc in + [%expr + let [%p pat_bound] : int = [%e bound] in + let rec __ppx_lwt_loop [%p p] = +@@ -210,9 +206,8 @@ + else Lwt.bind [%e body] (fun () -> __ppx_lwt_loop ([%e op] [%e p'] 1)) + in __ppx_lwt_loop [%e start] + ] +- [@metaloc !default_loc] + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + + (* [try%lwt $e$ with $c$] ≡ +@@ -221,6 +216,7 @@ + | Pexp_try (expr, cases) -> + let cases = add_wildcard_case cases in + let new_exp = ++ let loc = !default_loc in + [%expr + let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in + Lwt.backtrace_catch +@@ -228,9 +224,8 @@ + (fun () -> [%e expr]) + [%e Exp.function_ cases] + ] +- [@metaloc !default_loc] + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + (* [if%lwt $c$ then $e1$ else $e2$] ≡ + [match%lwt $c$ with true -> $e1$ | false -> $e2$] +@@ -240,37 +235,37 @@ + | Pexp_ifthenelse (cond, e1, e2) -> + let e2 = + match e2 with +- | None -> [%expr Lwt.return_unit] [@metaloc !default_loc] ++ | None -> let loc = !default_loc in [%expr Lwt.return_unit] + | Some e -> e + in + let cases = ++ let loc = !default_loc in + [ +- Exp.case ([%pat? true] [@metaloc !default_loc]) e1 ; +- Exp.case ([%pat? false] [@metaloc !default_loc]) e2 ; ++ Exp.case [%pat? true] e1 ; ++ Exp.case [%pat? false] e2 ; + ] + in + let new_exp = ++ let loc = !default_loc in + [%expr Lwt.bind [%e cond] [%e Exp.function_ cases]] +- [@metaloc !default_loc] + in +- Some (mapper.expr mapper { new_exp with pexp_attributes }) ++ Some (mapper#expression { new_exp with pexp_attributes }) + + | _ -> + None + + let warned = ref false + +-let mapper = +- { default_mapper with ++class mapper = object (self) ++ inherit Ast_traverse.map as super + +- structure = begin fun mapper structure -> +- if !warned then +- default_mapper.structure mapper structure ++ method! structure = begin fun structure -> ++ if !warned then super#structure structure + + else begin + warned := true; +- let structure = default_mapper.structure mapper structure in +- let loc = Location.in_file !Location.input_name in ++ let structure = super#structure structure in ++ let loc = Location.in_file !Ocaml_common.Location.input_name in + + let warn_if condition message structure = + if condition then +@@ -287,9 +282,9 @@ + ("-no-sequence is a deprecated Lwt PPX option\n" ^ + " See https://github.com/ocsigen/lwt/issues/495") + end +- end; ++ end + +- expr = (fun mapper expr -> ++ method! expression = (fun expr -> + match expr with + | { pexp_desc= + Pexp_extension ( +@@ -297,7 +292,7 @@ + PStr[{pstr_desc= Pstr_eval (exp, _);_}]); + _ + }-> +- begin match lwt_expression mapper exp expr.pexp_attributes ext_loc with ++ begin match lwt_expression self exp expr.pexp_attributes ext_loc with + | Some expr' -> expr' + | None -> expr + end +@@ -306,47 +301,45 @@ + | [%expr [%e? exp ] [%finally [%e? finally]] ] + | [%expr [%e? exp ] [%lwt.finally [%e? finally]] ] -> + let new_exp = +- [%expr +- let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in +- Lwt.backtrace_finalize +- (fun exn -> try Reraise.reraise exn with exn -> exn) +- (fun () -> [%e exp]) +- (fun () -> [%e finally]) +- ] +- [@metaloc !default_loc] ++ let loc = !default_loc in ++ [%expr ++ let module Reraise = struct external reraise : exn -> 'a = "%reraise" end in ++ Lwt.backtrace_finalize ++ (fun exn -> try Reraise.reraise exn with exn -> exn) ++ (fun () -> [%e exp]) ++ (fun () -> [%e finally]) ++ ] + in +- mapper.expr mapper ++ super#expression + { new_exp with + pexp_attributes = expr.pexp_attributes @ exp.pexp_attributes + } + + | [%expr [%finally [%e? _ ]]] + | [%expr [%lwt.finally [%e? _ ]]] -> +- raise (Location.Error ( +- Location.errorf +- ~loc:expr.pexp_loc +- "Lwt's finally should be used only with the syntax: \"(<expr>)[%%finally ...]\"." +- )) ++ Location.raise_errorf ~loc:expr.pexp_loc ++ "Lwt's finally should be used only with the syntax: \"(<expr>)[%%finally ...]\"." + + | _ -> +- default_mapper.expr mapper expr); +- structure_item = (fun mapper stri -> ++ super#expression expr) ++ ++ method! structure_item = (fun stri -> + default_loc := stri.pstr_loc; + match stri with + | [%stri let%lwt [%p? var] = [%e? exp]] -> + let warning = +- str ++ estring ~loc:!default_loc + ("let%lwt should not be used at the module item level.\n" ^ + "Replace let%lwt x = e by let x = Lwt_main.run (e)") + in ++ let loc = !default_loc in + [%stri + let [%p var] = + (Lwt_main.run [@ocaml.ppwarning [%e warning]]) +- [%e mapper.expr mapper exp]] +- [@metaloc !default_loc] ++ [%e super#expression exp]] + +- | x -> default_mapper.structure_item mapper x); +-} ++ | x -> super#structure_item x); ++end + + + let args = +@@ -361,5 +354,8 @@ + ] + + let () = +- Driver.register ~name:"ppx_lwt" ~args Versions.ocaml_410 +- (fun _config _cookies -> mapper) ++ let mapper = new mapper in ++ Driver.register_transformation "ppx_lwt" ++ ~impl:mapper#structure ++ ~intf:mapper#signature ; ++ List.iter (fun (key, spec, doc) -> Driver.add_arg key spec ~doc) args +--- lwt-5.3.0-orig/src/ppx/ppx_lwt.mli 2020-04-23 16:32:55.000000000 +1000 ++++ lwt-5.3.0/src/ppx/ppx_lwt.mli 2020-10-12 22:10:45.384889535 +1100 +@@ -161,4 +161,4 @@ + *) + + +-val mapper : Migrate_parsetree.OCaml_410.Ast.Ast_mapper.mapper ++class mapper : Ppxlib.Ast_traverse.map diff --git a/dev-ml/lwt/lwt-5.3.0.ebuild b/dev-ml/lwt/lwt-5.3.0.ebuild new file mode 100644 index 000000000000..417b2d5dfd1b --- /dev/null +++ b/dev-ml/lwt/lwt-5.3.0.ebuild @@ -0,0 +1,37 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit dune + +DESCRIPTION="Cooperative light-weight thread library for OCaml" +SRC_URI="https://github.com/ocsigen/lwt/archive/${PV}.tar.gz -> ${P}.tar.gz" +HOMEPAGE="http://ocsigen.org/lwt" + +IUSE="+ocamlopt" + +DEPEND=" + dev-ml/seq:= + dev-ml/result:= + dev-ml/mmap:= + dev-ml/ocplib-endian:= + >=dev-ml/ppxlib-0.18.0:= + dev-ml/react:= + dev-ml/dune-configurator:= + dev-libs/libev" + +RDEPEND="${DEPEND} + !<www-servers/ocsigen-1.1" +DEPEND="${DEPEND} + dev-ml/cppo + dev-ml/findlib" + +SLOT="0/${PV}" +LICENSE="LGPL-2.1-with-linking-exception" +KEYWORDS="~amd64 ~arm ~arm64 ~x86" + +# backported from https://github.com/ocsigen/lwt/pull/807 +PATCHES=( + "${FILESDIR}"/${PN}-5.3.0-ppxlib-0.18.0.patch +) diff --git a/dev-ml/lwt/metadata.xml b/dev-ml/lwt/metadata.xml index 78de251d544a..876bdf620f96 100644 --- a/dev-ml/lwt/metadata.xml +++ b/dev-ml/lwt/metadata.xml @@ -1,7 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> <pkgmetadata> - <!-- maintainer-needed --> + <maintainer type="person"> + <email>gienah@gentoo.org</email> + <name>Mark Wright</name> + </maintainer> <use> <flag name="camlp4">Enable camlp4 syntax extension</flag> <flag name="libev">Enable the <pkg>dev-libs/libev</pkg>-based backend.</flag> |