-
Notifications
You must be signed in to change notification settings - Fork 43
Fix lambda term work with lwt3 and lwt4 #61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -112,12 +112,12 @@ let () = | |
| match LTerm_unix.sigwinch with | ||
| | None -> | ||
| (* Check for size when something happen. *) | ||
| ignore (Lwt_sequence.add_r send_resize Lwt_main.enter_iter_hooks) | ||
| ignore (LTerm_sequence.add_r send_resize Lwt_main.enter_iter_hooks) | ||
| | Some signum -> | ||
| try | ||
| ignore (Lwt_unix.on_signal signum (fun _ -> send_resize ())) | ||
| with Not_found -> | ||
| ignore (Lwt_sequence.add_r send_resize Lwt_main.enter_iter_hooks) | ||
| ignore (LTerm_sequence.add_r send_resize Lwt_main.enter_iter_hooks) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure if this will compile. Is
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Checkout the lwt3.mli. We are making sure |
||
|
|
||
| (* +-----------------------------------------------------------------+ | ||
| | Creation | | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| [@@@ocaml.warning "-3"] | ||
| include Lwt_sequence |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| [@@@ocaml.warning "-3"] | ||
| include module type of Lwt_sequence with type 'a t = 'a Lwt_sequence.t |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,242 @@ | ||
| (* OCaml promise library | ||
| * http://www.ocsigen.org/lwt | ||
| * Copyright (C) 2009 Jérémie Dimino | ||
| * | ||
| * This program is free software; you can redistribute it and/or modify | ||
| * it under the terms of the GNU Lesser General Public License as | ||
| * published by the Free Software Foundation, with linking exceptions; | ||
| * either version 2.1 of the License, or (at your option) any later | ||
| * version. See COPYING file for details. | ||
| * | ||
| * This program is distributed in the hope that it will be useful, but | ||
| * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| * Lesser General Public License for more details. | ||
| * | ||
| * You should have received a copy of the GNU Lesser General Public | ||
| * License along with this program; if not, write to the Free Software | ||
| * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | ||
| * 02111-1307, USA. | ||
| *) | ||
|
|
||
| exception Empty | ||
|
|
||
| type 'a t = { | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not sure how this will work. Will this
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We don't need the type equality for Lwt4 since Lwt_sequence isn't going to be present, right? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm. I think we do since we use |
||
| mutable prev : 'a t; | ||
| mutable next : 'a t; | ||
| } | ||
|
|
||
| type 'a node = { | ||
| mutable node_prev : 'a t; | ||
| mutable node_next : 'a t; | ||
| mutable node_data : 'a; | ||
| mutable node_active : bool; | ||
| } | ||
|
|
||
| external seq_of_node : 'a node -> 'a t = "%identity" | ||
| external node_of_seq : 'a t -> 'a node = "%identity" | ||
|
|
||
| (* +-----------------------------------------------------------------+ | ||
| | Operations on nodes | | ||
| +-----------------------------------------------------------------+ *) | ||
|
|
||
| let get node = | ||
| node.node_data | ||
|
|
||
| let set node data = | ||
| node.node_data <- data | ||
|
|
||
| let remove node = | ||
| if node.node_active then begin | ||
| node.node_active <- false; | ||
| let seq = seq_of_node node in | ||
| seq.prev.next <- seq.next; | ||
| seq.next.prev <- seq.prev | ||
| end | ||
|
|
||
| (* +-----------------------------------------------------------------+ | ||
| | Operations on sequences | | ||
| +-----------------------------------------------------------------+ *) | ||
|
|
||
| let create () = | ||
| let rec seq = { prev = seq; next = seq } in | ||
| seq | ||
|
|
||
| let is_empty seq = seq.next == seq | ||
|
|
||
| let length seq = | ||
| let rec loop curr len = | ||
| if curr == seq then | ||
| len | ||
| else | ||
| let node = node_of_seq curr in loop node.node_next (len + 1) | ||
| in | ||
| loop seq.next 0 | ||
|
|
||
| let add_l data seq = | ||
| let node = { node_prev = seq; node_next = seq.next; node_data = data; node_active = true } in | ||
| seq.next.prev <- seq_of_node node; | ||
| seq.next <- seq_of_node node; | ||
| node | ||
|
|
||
| let add_r data seq = | ||
| let node = { node_prev = seq.prev; node_next = seq; node_data = data; node_active = true } in | ||
| seq.prev.next <- seq_of_node node; | ||
| seq.prev <- seq_of_node node; | ||
| node | ||
|
|
||
| let take_l seq = | ||
| if is_empty seq then | ||
| raise Empty | ||
| else begin | ||
| let node = node_of_seq seq.next in | ||
| remove node; | ||
| node.node_data | ||
| end | ||
|
|
||
| let take_r seq = | ||
| if is_empty seq then | ||
| raise Empty | ||
| else begin | ||
| let node = node_of_seq seq.prev in | ||
| remove node; | ||
| node.node_data | ||
| end | ||
|
|
||
| let take_opt_l seq = | ||
| if is_empty seq then | ||
| None | ||
| else begin | ||
| let node = node_of_seq seq.next in | ||
| remove node; | ||
| Some node.node_data | ||
| end | ||
|
|
||
| let take_opt_r seq = | ||
| if is_empty seq then | ||
| None | ||
| else begin | ||
| let node = node_of_seq seq.prev in | ||
| remove node; | ||
| Some node.node_data | ||
| end | ||
|
|
||
| let transfer_l s1 s2 = | ||
| s2.next.prev <- s1.prev; | ||
| s1.prev.next <- s2.next; | ||
| s2.next <- s1.next; | ||
| s1.next.prev <- s2; | ||
| s1.prev <- s1; | ||
| s1.next <- s1 | ||
|
|
||
| let transfer_r s1 s2 = | ||
| s2.prev.next <- s1.next; | ||
| s1.next.prev <- s2.prev; | ||
| s2.prev <- s1.prev; | ||
| s1.prev.next <- s2; | ||
| s1.prev <- s1; | ||
| s1.next <- s1 | ||
|
|
||
| let iter_l f seq = | ||
| let rec loop curr = | ||
| if curr != seq then begin | ||
| let node = node_of_seq curr in | ||
| if node.node_active then f node.node_data; | ||
| loop node.node_next | ||
| end | ||
| in | ||
| loop seq.next | ||
|
|
||
| let iter_r f seq = | ||
| let rec loop curr = | ||
| if curr != seq then begin | ||
| let node = node_of_seq curr in | ||
| if node.node_active then f node.node_data; | ||
| loop node.node_prev | ||
| end | ||
| in | ||
| loop seq.prev | ||
|
|
||
| let iter_node_l f seq = | ||
| let rec loop curr = | ||
| if curr != seq then begin | ||
| let node = node_of_seq curr in | ||
| if node.node_active then f node; | ||
| loop node.node_next | ||
| end | ||
| in | ||
| loop seq.next | ||
|
|
||
| let iter_node_r f seq = | ||
| let rec loop curr = | ||
| if curr != seq then begin | ||
| let node = node_of_seq curr in | ||
| if node.node_active then f node; | ||
| loop node.node_prev | ||
| end | ||
| in | ||
| loop seq.prev | ||
|
|
||
| let fold_l f seq acc = | ||
| let rec loop curr acc = | ||
| if curr == seq then | ||
| acc | ||
| else | ||
| let node = node_of_seq curr in | ||
| if node.node_active then | ||
| loop node.node_next (f node.node_data acc) | ||
| else | ||
| loop node.node_next acc | ||
| in | ||
| loop seq.next acc | ||
|
|
||
| let fold_r f seq acc = | ||
| let rec loop curr acc = | ||
| if curr == seq then | ||
| acc | ||
| else | ||
| let node = node_of_seq curr in | ||
| if node.node_active then | ||
| loop node.node_prev (f node.node_data acc) | ||
| else | ||
| loop node.node_prev acc | ||
| in | ||
| loop seq.prev acc | ||
|
|
||
| let find_node_l f seq = | ||
| let rec loop curr = | ||
| if curr != seq then | ||
| let node = node_of_seq curr in | ||
| if node.node_active then | ||
| if f node.node_data then | ||
| node | ||
| else | ||
| loop node.node_next | ||
| else | ||
| loop node.node_next | ||
| else | ||
| raise Not_found | ||
| in | ||
| loop seq.next | ||
|
|
||
| let find_node_r f seq = | ||
| let rec loop curr = | ||
| if curr != seq then | ||
| let node = node_of_seq curr in | ||
| if node.node_active then | ||
| if f node.node_data then | ||
| node | ||
| else | ||
| loop node.node_prev | ||
| else | ||
| loop node.node_prev | ||
| else | ||
| raise Not_found | ||
| in | ||
| loop seq.prev | ||
|
|
||
| let find_node_opt_l f seq = | ||
| try Some (find_node_l f seq) with Not_found -> None | ||
|
|
||
| let find_node_opt_r f seq = | ||
| try Some (find_node_r f seq) with Not_found -> None | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think
lwt 4.0.0still defineslwt.unixfindlib package aslwt.unixand notlwt-unix. See https://github.com/ocsigen/lwt/blob/master/src/unix/jbuild#L56. Isn't the dune(library (public_name)field the findlib package name?Incidentally, I tried
ocamlfind query lwt-unixand it returns withocamlfind: Package `lwt-unix' not found. and when I doocamlfind query lwt.unixit returns the correct correct path.cc @aantron. Were you looking to rename
lwt.unixtolwt-unixinlwt 4.0.0?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indeed,
lwt.unixis correct, and we haven't renamed it.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah yes, ok so we'll need a different check. Unfortunately, we might not be able to do with a select form anymore, which will complicate things.