summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev-ml/lwt/Manifest1
-rw-r--r--dev-ml/lwt/files/lwt-5.3.0-ppxlib-0.18.0.patch401
-rw-r--r--dev-ml/lwt/lwt-5.3.0.ebuild37
-rw-r--r--dev-ml/lwt/metadata.xml5
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>