@@ -18,9 +18,10 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
1818 [ i ]
1919 in
2020 let add_comment fmt = Format. kasprintf add_comment fmt in
21- let add_comment_dropped_exp ~label exp =
22- add_comment " Dropped expression (%s): [%s]." label
21+ let add_comment_dropped_exp ~label ?( cmt = " " ) exp =
22+ add_comment " Dropped expression (%s): [%s].%s " label
2323 (Ocamlformat_utils. format_expression exp)
24+ cmt
2425 in
2526 (* If [--eio-sw-as-fiber-var] is passed on the command line, this will query
2627 the current switch. Otherwise, this will generate a comment.
@@ -206,7 +207,7 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
206207 (* ]) *)
207208 fd
208209
209- method io_read input buffer buf_offset buf_len =
210+ method io_read ~ exactly input buffer buf_offset buf_len =
210211 add_comment " [%s] should be a [Cstruct.t]."
211212 (Ocamlformat_utils. format_expression buffer);
212213 add_comment
@@ -215,9 +216,12 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
215216 contains an internal buffer) or change the call to \
216217 [Eio.Buf_read.of_flow] used to create the buffer."
217218 (Ocamlformat_utils. format_expression input);
218- add_comment_dropped_exp ~label: " buffer offset" buf_offset;
219- add_comment_dropped_exp ~label: " buffer length" buf_len;
220- mk_apply_simple [ " Eio" ; " Flow" ; " single_read" ] [ input; buffer ]
219+ add_comment_dropped_exp ~label: " buffer offset"
220+ ~cmt: " This will behave as if it was [0]." buf_offset;
221+ add_comment_dropped_exp ~label: " buffer length"
222+ ~cmt: " This will behave as if it was [Cstruct.length buffer]." buf_len;
223+ let fun_ = if exactly then " read_exact" else " single_read" in
224+ mk_apply_simple [ " Eio" ; " Flow" ; fun_ ] [ input; buffer ]
221225
222226 method io_read_all input =
223227 mk_apply_simple [ " Eio" ; " Buf_read" ; " take_all" ] [ input ]
@@ -229,6 +233,9 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
229233 unbuffered IO." ;
230234 None
231235
236+ method io_flush output =
237+ mk_apply_simple [ " Eio" ; " Buf_write" ; " flush" ] [ output ]
238+
232239 method fd_close fd =
233240 (* TODO: See [of_unix_file_descr]. mk_apply_simple [ "Eio_unix"; "Fd" ] [ fd ] *)
234241 mk_apply_simple [ " Unix" ; " close" ] [ fd ]
@@ -250,7 +257,8 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
250257 in
251258 mk_apply_ident (switch_ident " run" )
252259 [
253- (Labelled (mk_loc " name" ), mk_const_string " main" );
260+ (* TODO: Add the [~name] argument. Currently commented-out because added in a too recent version of eio.
261+ (Labelled (mk_loc "name"), mk_const_string "main"); *)
254262 (Nolabel , fun_sw);
255263 ]
256264 | None -> k
@@ -310,6 +318,7 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
310318 mk_apply_simple [ " Eio" ; " Buf_write" ; " string" ] [ chan; str ]
311319
312320 method io_close fd = mk_apply_simple [ " Eio" ; " Resource" ; " close" ] [ fd ]
321+ method type_in_channel = mk_typ_constr [ " Eio" ; " Buf_read" ; " t" ]
313322 method type_out_channel = mk_typ_constr [ " Eio" ; " Buf_write" ; " t" ]
314323
315324 method path_stat ~follow path =
@@ -318,4 +327,37 @@ let eio ~eio_sw_as_fiber_var ~eio_env_as_fiber_var add_comment =
318327 (Labelled (mk_loc " follow" ), mk_constr_of_bool follow);
319328 (Nolabel , mk_apply_simple [ " Eio" ; " Path" ; " /" ] [ env " cwd" ; path ]);
320329 ]
330+
331+ method domain_detach thunk =
332+ mk_apply_ident
333+ (fiber_ident " fork_promise" )
334+ [
335+ get_current_switch_arg () ;
336+ ( Nolabel ,
337+ mk_thunk
338+ (mk_apply_simple
339+ [ " Eio" ; " Domain_manager" ; " run" ]
340+ [ env " domain_mgr" ; thunk ]) );
341+ ]
342+
343+ method net_with_connection sockaddr f =
344+ add_comment
345+ " [%s] is of type [Unix.sockaddr] but it should be a \
346+ [Eio.Net.Sockaddr.stream]."
347+ (Ocamlformat_utils. format_expression sockaddr);
348+ mk_apply_simple (switch_ident " run" )
349+ [
350+ mk_fun ~arg_name: " sw" (fun sw ->
351+ Exp. apply f
352+ [
353+ ( Nolabel ,
354+ mk_apply_ident
355+ [ " Eio" ; " Net" ; " connect" ]
356+ [
357+ (Labelled (mk_loc " sw" ), sw);
358+ (Nolabel , env " net" );
359+ (Nolabel , sockaddr);
360+ ] );
361+ ]);
362+ ]
321363 end
0 commit comments