Packages

A project that aims to fuse the concurrency models of OTP and Javascript to allow the careful user to write concurrent code that runs on both the otp backend and the gleam backend

Retired package: This is fundamentally broken, a new version will be published soon

Current section

Files

Jump to
fused src fused@erlang@process.erl
Raw

src/fused@erlang@process.erl

-module(fused@erlang@process).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/fused/erlang/process.gleam").
-export([is_available/0, new/0, send/2, recv/1, new_selector/0, select/2, select_map/3, map_selector/2, merge_selector/2, selector_recv/2, spawn/2, spawn_unlinked/1, link/2, monitor/2, select_monitors/2, select_specific_monitor/3]).
-file("src/fused/erlang/process.gleam", 7).
-spec is_available() -> boolean().
is_available() ->
true.
-file("src/fused/erlang/process.gleam", 25).
-spec new() -> {gleam@erlang@process:subject(FQK),
gleam@erlang@process:subject(FQK)}.
new() ->
Subject = gleam@erlang@process:new_subject(),
{Subject, Subject}.
-file("src/fused/erlang/process.gleam", 31).
-spec send(gleam@erlang@process:subject(FQN), FQN) -> nil.
send(Send, X) ->
gleam@erlang@process:send(Send, X).
-file("src/fused/erlang/process.gleam", 36).
-spec recv(gleam@erlang@process:subject(FQP)) -> FQP.
recv(Recv) ->
gleam_erlang_ffi:'receive'(Recv).
-file("src/fused/erlang/process.gleam", 45).
-spec new_selector() -> gleam@erlang@process:selector(any()).
new_selector() ->
gleam_erlang_ffi:new_selector().
-file("src/fused/erlang/process.gleam", 50).
-spec select(
gleam@erlang@process:selector(FQU),
gleam@erlang@process:subject(FQU)
) -> gleam@erlang@process:selector(FQU).
select(Selector, Receiver) ->
gleam@erlang@process:select(Selector, Receiver).
-file("src/fused/erlang/process.gleam", 55).
-spec select_map(
gleam@erlang@process:selector(FQY),
gleam@erlang@process:subject(FRA),
fun((FRA) -> FQY)
) -> gleam@erlang@process:selector(FQY).
select_map(Selector, Receiver, Transform) ->
gleam@erlang@process:select_map(Selector, Receiver, Transform).
-file("src/fused/erlang/process.gleam", 64).
-spec map_selector(gleam@erlang@process:selector(FRD), fun((FRD) -> FRF)) -> gleam@erlang@process:selector(FRF).
map_selector(A, B) ->
gleam_erlang_ffi:map_selector(A, B).
-file("src/fused/erlang/process.gleam", 69).
-spec merge_selector(
gleam@erlang@process:selector(FRH),
gleam@erlang@process:selector(FRH)
) -> gleam@erlang@process:selector(FRH).
merge_selector(A, B) ->
gleam_erlang_ffi:merge_selector(A, B).
-file("src/fused/erlang/process.gleam", 74).
-spec selector_recv(
gleam@erlang@process:pid_(),
gleam@erlang@process:selector(FRL)
) -> FRL.
selector_recv(Self, From) ->
_assert_subject = erlang:self(),
case Self =:= _assert_subject of
true -> nil;
false -> erlang:error(#{gleam_error => assert,
message => <<"Assertion failed."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"selector_recv"/utf8>>,
line => 75,
kind => binary_operator,
operator => '==',
left => #{kind => expression,
value => Self,
start => 1458,
'end' => 1462
},
right => #{kind => expression,
value => _assert_subject,
start => 1466,
'end' => 1480
},
start => 1451,
'end' => 1480,
expression_start => 1458})
end,
gleam_erlang_ffi:select(From).
-file("src/fused/erlang/process.gleam", 88).
-spec spawn(
gleam@erlang@process:pid_(),
fun((gleam@erlang@process:pid_()) -> any())
) -> gleam@erlang@process:pid_().
spawn(_, F) ->
proc_lib:spawn_link(fun() -> F(erlang:self()) end).
-file("src/fused/erlang/process.gleam", 94).
-spec spawn_unlinked(fun((gleam@erlang@process:pid_()) -> any())) -> gleam@erlang@process:pid_().
spawn_unlinked(F) ->
proc_lib:spawn(fun() -> F(erlang:self()) end).
-file("src/fused/erlang/process.gleam", 100).
-spec link(gleam@erlang@process:pid_(), gleam@erlang@process:pid_()) -> nil.
link(Self, Pid) ->
_assert_subject = erlang:self(),
case Self =:= _assert_subject of
true -> nil;
false -> erlang:error(#{gleam_error => assert,
message => <<"Assertion failed."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"link"/utf8>>,
line => 101,
kind => binary_operator,
operator => '==',
left => #{kind => expression,
value => Self,
start => 1951,
'end' => 1955
},
right => #{kind => expression,
value => _assert_subject,
start => 1959,
'end' => 1973
},
start => 1944,
'end' => 1973,
expression_start => 1951})
end,
gleam_erlang_ffi:link(Pid),
nil.
-file("src/fused/erlang/process.gleam", 107).
-spec monitor(gleam@erlang@process:pid_(), gleam@erlang@process:pid_()) -> gleam@erlang@process:monitor().
monitor(Self, Pid) ->
_assert_subject = erlang:self(),
case Self =:= _assert_subject of
true -> nil;
false -> erlang:error(#{gleam_error => assert,
message => <<"Assertion failed."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"monitor"/utf8>>,
line => 108,
kind => binary_operator,
operator => '==',
left => #{kind => expression,
value => Self,
start => 2086,
'end' => 2090
},
right => #{kind => expression,
value => _assert_subject,
start => 2094,
'end' => 2108
},
start => 2079,
'end' => 2108,
expression_start => 2086})
end,
gleam@erlang@process:monitor(Pid).
-file("src/fused/erlang/process.gleam", 113).
-spec select_monitors(
gleam@erlang@process:selector(FRP),
fun((gleam@erlang@process:pid_()) -> FRP)
) -> gleam@erlang@process:selector(FRP).
select_monitors(Selector, Mapping) ->
gleam@erlang@process:select_monitors(
Selector,
fun(Down) ->
Pid@1 = case Down of
{process_down, _, Pid, _} -> Pid;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"select_monitors"/utf8>>,
line => 118,
value => _assert_fail,
start => 2313,
'end' => 2360,
pattern_start => 2324,
pattern_end => 2353})
end,
Mapping(Pid@1)
end
).
-file("src/fused/erlang/process.gleam", 124).
-spec select_specific_monitor(
gleam@erlang@process:selector(FRS),
gleam@erlang@process:monitor(),
fun((gleam@erlang@process:pid_()) -> FRS)
) -> gleam@erlang@process:selector(FRS).
select_specific_monitor(Selector, Monitor, Mapping) ->
gleam@erlang@process:select_specific_monitor(
Selector,
Monitor,
fun(Down) ->
Pid@1 = case Down of
{process_down, _, Pid, _} -> Pid;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fused/erlang/process"/utf8>>,
function => <<"select_specific_monitor"/utf8>>,
line => 130,
value => _assert_fail,
start => 2609,
'end' => 2656,
pattern_start => 2620,
pattern_end => 2649})
end,
Mapping(Pid@1)
end
).