Packages
kirala_l4u
0.1.1
An embedded lisp interpreter based on the gleam implementation of MAL lisp.
Current section
Files
Jump to
Current section
Files
src/l4u/sys_bridge.gleam
import gleam/dynamic.{type Dynamic}
@target(javascript)
import gleam/javascript/promise.{type Promise}
import gleam/order.{type Order}
import l4u/l4u_type.{type Expr, type PDic, type Ref}
pub type Pid
pub type ErlSym
@external(erlang, "erlang", "binary_to_atom")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "erl_sym")
pub fn erl_sym(str: String) -> ErlSym
@target(erlang)
@external(erlang, "l4u_ffi", "l4u_to_native")
pub fn l4u_to_native(value: Expr) -> any
@target(javascript)
pub fn l4u_to_native(value: Expr) -> any {
l4u_type.unbox_l4u(value)
}
@external(erlang, "l4u_ffi", "native_to_l4u")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "native_to_l4u")
pub fn native_to_l4u(value: Dynamic) -> any
@external(erlang, "l4u_ffi", "to_bin_string")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "to_bin_string")
pub fn to_string(x: any) -> String
// ----------------------------------------------------------------------------
@external(erlang, "l4u@sys_bridge_ffi", "unique_pdic")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "unique_pdic")
pub fn unique_pdic() -> PDic
@external(erlang, "l4u@sys_bridge_ffi", "aux_pdic")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "aux_pdic")
pub fn aux_pdic(pdic: PDic, id: String) -> PDic
@target(javascript)
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "set_gleam_bridge")
pub fn set_gleam_bridge(key: String, value: any) -> Nil
@target(erlang)
@external(erlang, "l4u@sys_bridge_ffi", "console_readline")
pub fn console_readline(prompt: String) -> String
@target(javascript)
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "console_readline")
pub fn console_readline(prompt: String) -> Promise(String)
@external(erlang, "l4u@sys_bridge_ffi", "console_writeln")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "console_writeln")
pub fn console_writeln(s: any) -> Nil
@external(erlang, "l4u@sys_bridge_ffi", "do_async")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "do_async")
pub fn do_async(f: fn() -> Nil) -> Nil
@external(erlang, "l4u@sys_bridge_ffi", "dbgout1")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "dbgout1")
pub fn dbgout1(a: a) -> Bool
@external(erlang, "l4u@sys_bridge_ffi", "dbgout2")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "dbgout2")
pub fn dbgout2(a: a, b: b) -> Bool
@external(erlang, "l4u@sys_bridge_ffi", "dbgout3")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "dbgout3")
pub fn dbgout3(a: a, b: b, c: c) -> Bool
@external(erlang, "l4u@sys_bridge_ffi", "dbgout4")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "dbgout4")
pub fn dbgout4(a: a, b: b, c: c, d: d) -> Bool
@external(erlang, "l4u@sys_bridge_ffi", "catch_ex")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "catch_ex")
pub fn catch_ex(try_fn: fn() -> any) -> Result(any, err)
pub fn catch_dummy(try_fn: fn() -> any) -> Result(any, err) {
Ok(try_fn())
}
@external(erlang, "l4u@sys_bridge_ffi", "throw_err")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "throw_err")
pub fn throw_err(s: String) -> Nil
@external(erlang, "l4u@sys_bridge_ffi", "throw_expr")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "throw_expr")
pub fn throw_expr(expr: expr) -> Nil
@external(erlang, "l4u@sys_bridge_ffi", "load_file")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "load_file")
pub fn load_file(filename: String) -> String
@external(erlang, "l4u@sys_bridge_ffi", "make_ref")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "make_ref")
pub fn make_ref(value: any) -> Ref
@external(erlang, "l4u@sys_bridge_ffi", "deref")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "deref")
pub fn deref(ref: Ref) -> any
@external(erlang, "l4u@sys_bridge_ffi", "reset_ref")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "reset_ref")
pub fn reset_ref(ref: Ref, value: any) -> any
@external(erlang, "l4u@sys_bridge_ffi", "internal_form")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "internal_form")
pub fn internal_form(value: any) -> String
@external(erlang, "l4u@sys_bridge_ffi", "external_form")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "external_form")
pub fn external_form(value: any) -> String
@external(erlang, "l4u@process", "new_process")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "new_process")
pub fn new_process(initializer: fn() -> env) -> Result(Pid, error)
@external(erlang, "l4u@process", "exec")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "exec")
pub fn exec(pid: Pid, f: fn(env) -> any) -> Result(any, error)
@external(erlang, "l4u@process", "exec_native")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "exec_native")
pub fn exec_native(pid: Pid, f: fn(env) -> any) -> Result(any, error)
@external(erlang, "l4u@sys_bridge_ffi", "get_command_line_args")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "get_command_line_args")
pub fn get_command_line_args() -> List(String)
@external(erlang, "l4u@sys_bridge_ffi", "escape_binary_string")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "escape_binary_string")
pub fn escape_binary_string(str: String) -> String
@external(erlang, "l4u@sys_bridge_ffi", "unescape_binary_string")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "unescape_binary_string")
pub fn unescape_binary_string(str: String) -> String
@external(erlang, "l4u@sys_bridge_ffi", "tick_count")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "tick_count")
pub fn tick_count() -> Int
@external(erlang, "l4u@sys_bridge_ffi", "unique_int")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "unique_int")
pub fn unique_int() -> Int
@external(erlang, "l4u@sys_bridge_ffi", "unique_str")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "unique_str")
pub fn unique_str() -> String
@target(erlang)
@external(erlang, "l4u@sys_bridge_ffi", "compare_any")
pub fn compare_any(x: Expr, y: Expr) -> Order
@target(javascript)
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "compare_any_")
fn compare_any_(x: any, y: any) -> Int
@target(javascript)
pub fn compare_any(x: Expr, y: Expr) -> Order {
case compare_any_(l4u_to_native(x), l4u_to_native(y)) {
0 -> order.Eq
n if n < 0 -> order.Lt
_ -> order.Gt
}
}
@external(erlang, "l4u@sys_bridge_ffi", "os_cmd")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "os_cmd")
pub fn os_cmd(cmdline: String) -> String
@external(erlang, "l4u@sys_bridge_ffi", "stringify")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "stringify")
pub fn stringify(x: any) -> String
@external(erlang, "l4u@sys_bridge_ffi", "error_to_string")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "error_to_string")
pub fn error_to_string(x: any, verbose: Bool) -> String
// ----------------------------------------------------------------------------
// # process dictionary
// ----------------------------------------------------------------------------
@external(erlang, "l4u@sys_bridge_ffi", "process_dict_set")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "process_dict_set")
pub fn process_dict_set(pdic: PDic, key: String, value: any) -> Nil
@external(erlang, "l4u@sys_bridge_ffi", "process_dict_get")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "process_dict_get")
pub fn process_dict_get(pdic: PDic, key: String) -> any
@external(erlang, "l4u@sys_bridge_ffi", "process_dict_erase")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "process_dict_erase")
pub fn process_dict_erase(pdic: PDic, key: String) -> any
@external(erlang, "l4u@sys_bridge_ffi", "process_dict_keys")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "process_dict_keys")
pub fn process_dict_keys(pdic: PDic) -> List(String)
// ----------------------------------------------------------------------------
// # file system
// ----------------------------------------------------------------------------
@external(erlang, "l4u@sys_bridge_ffi", "file_exists")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "file_exists")
pub fn file_exists(file_path: String) -> Bool
@external(erlang, "l4u@sys_bridge_ffi", "dir_exists")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "dir_exists")
pub fn dir_exists(dir_path: String) -> Bool
@external(erlang, "l4u@sys_bridge_ffi", "get_cwd")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "get_cwd")
pub fn get_cwd() -> String
@external(erlang, "l4u@sys_bridge_ffi", "set_cwd")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "set_cwd")
pub fn set_cwd(dir_path: String) -> Nil
@external(erlang, "l4u@sys_bridge_ffi", "abspath")
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "abspath")
pub fn abspath(path: String) -> String
// ----------------------------------------------------------------------------
// # javascript only
// ----------------------------------------------------------------------------
@target(javascript)
@external(javascript, "../l4u_sys_bridge_ffi.mjs", "tco_loop")
pub fn tco_loop(f: tco_function, initial_param: initial_param) -> any
@target(erlang)
pub fn tco_loop(f: tco_function, initial_param: initial_param) -> any {
dynamic.unsafe_coerce(dynamic.from(Nil))
}