-module(l4u@l4u_obj). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([process_get_env/1, generate_new_l4u_obj/2]). -export_type([l4u_obj/0]). -type l4u_obj() :: {l4u_obj, binary(), l4u@sys_bridge:pid_(), fun(() -> l4u@l4u_type:env()), fun((list(l4u@l4u_type:expr())) -> {ok, l4u@l4u_type:expr()} | {error, binary()}), fun((binary()) -> {ok, list(l4u@l4u_type:expr())} | {error, binary()}), fun((l4u@l4u_type:expr()) -> binary())}. -spec process_get_env(l4u@sys_bridge:pid_()) -> l4u@l4u_type:env(). process_get_env(Pid) -> l4u@process:get_env(Pid). -spec generate_new_l4u_obj(binary(), fun(() -> l4u@l4u_type:env())) -> l4u_obj(). generate_new_l4u_obj(Name, Initializer) -> _assert_subject = l4u@process:new_process(Initializer), {ok, Pid} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail, module => <<"l4u/l4u_obj"/utf8>>, function => <<"generate_new_l4u_obj"/utf8>>, line => 53}) end, {l4u_obj, Name, Pid, fun() -> l4u@process:get_env(Pid) end, fun(Exprs) -> F = fun(Env) -> _assert_subject@1 = l4u@l4u_core:eval(Exprs, undefined, Env), {with_env, Rexpr, New_env} = case _assert_subject@1 of {with_env, _, _} -> _assert_subject@1; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail@1, module => <<"l4u/l4u_obj"/utf8>>, function => <<"generate_new_l4u_obj"/utf8>>, line => 62}) end end, case l4u@process:exec(Pid, F) of {ok, Expr} -> {ok, Expr}; {error, Err} -> {error, Err} end end, fun(S) -> F@1 = fun(Env@1) -> Exprs@1 = l4u@l4u_core:read(S, Env@1), {with_env, {list, Exprs@1}, Env@1} end, case l4u@process:exec(Pid, F@1) of {ok, {list, Rexprs}} -> {ok, Rexprs}; {error, Err@1} -> {error, Err@1}; Unhandable -> l4u@sys_bridge_ffi:throw_err( <<"unhandable exec error in l4u_obj: read"/utf8>> ), {error, <<"unhandable"/utf8>>} end end, fun(Expr@1) -> l4u@l4u_core:print(Expr@1) end}.