From bc80503d9e300ba59889f533b79dc51962083ba7 Mon Sep 17 00:00:00 2001 From: Adam Forbes Date: Sat, 6 Nov 2021 00:25:12 -0400 Subject: [PATCH] Fixed Dialyzer warnings --- examples/basic/NumberAdder.ex | 7 +- nimler/gen_module.nim | 4 +- tests/codec/NimlerWrapper.ex | 43 ++++---- tests/dirty_nif/NimlerWrapper.ex | 13 ++- tests/init_api/NimlerWrapper.ex | 15 +-- tests/init_resource/NimlerWrapper.ex | 15 +-- tests/integration/NimlerWrapper.ex | 149 ++++++++++++++------------- tests/message/NimlerWrapper.ex | 13 ++- tests/positional/NimlerWrapper.ex | 33 +++--- tests/resource/NimlerWrapper.ex | 15 +-- tests/timeslice/NimlerWrapper.ex | 11 +- 11 files changed, 173 insertions(+), 145 deletions(-) diff --git a/examples/basic/NumberAdder.ex b/examples/basic/NumberAdder.ex index f74af3c..e63edd0 100644 --- a/examples/basic/NumberAdder.ex +++ b/examples/basic/NumberAdder.ex @@ -1,7 +1,8 @@ defmodule NumberAdder do @on_load :init - def init(), do: :erlang.load_nif(to_charlist(Path.join(Path.dirname(__ENV__.file), 'libnif')), 0) + def init(), + do: :erlang.load_nif(to_charlist(Path.join(Path.dirname(__ENV__.file), 'libnif')), 0) - def add_numbers(_, _), do: exit(:nif_library_not_loaded) - def sub_numbers(_, _), do: exit(:nif_library_not_loaded) + def add_numbers(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def sub_numbers(_, _), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/nimler/gen_module.nim b/nimler/gen_module.nim index 1e46dd0..fbb2ebc 100644 --- a/nimler/gen_module.nim +++ b/nimler/gen_module.nim @@ -20,7 +20,7 @@ $4 end """ const elixirFn = """ - def $1($2), do: exit(:nif_library_not_loaded) + def $1($2), do: :erlang.nif_error(:nif_library_not_loaded) """ const erlangModule = """ @@ -35,7 +35,7 @@ $4 $5 """ const erlangFn = """ - $1($2) -> exit(nif_library_not_loaded). + $1($2) -> :erlang.nif_error(:nif_library_not_loaded). """ proc genFn(templ: string, fn: ErlNifFunc): string {.compileTime.} = diff --git a/tests/codec/NimlerWrapper.ex b/tests/codec/NimlerWrapper.ex index f99dd84..94d5e4b 100644 --- a/tests/codec/NimlerWrapper.ex +++ b/tests/codec/NimlerWrapper.ex @@ -1,25 +1,28 @@ defmodule NimlerCodec do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def codec_options(_, _), do: exit(:nif_library_not_loaded) - def codec_int(_, _), do: exit(:nif_library_not_loaded) - def codec_int32(_, _), do: exit(:nif_library_not_loaded) - def codec_uint32(_, _), do: exit(:nif_library_not_loaded) - def codec_uint64(_), do: exit(:nif_library_not_loaded) - def codec_double(_), do: exit(:nif_library_not_loaded) - def codec_atom(_), do: exit(:nif_library_not_loaded) - def codec_charlist(_), do: exit(:nif_library_not_loaded) - def codec_string(_), do: exit(:nif_library_not_loaded) - def codec_binary(_), do: exit(:nif_library_not_loaded) - def codec_list_int(_), do: exit(:nif_library_not_loaded) - def codec_list_string(_), do: exit(:nif_library_not_loaded) - def codec_tuple(_), do: exit(:nif_library_not_loaded) - def codec_map(_, _, _), do: exit(:nif_library_not_loaded) - def codec_keywords(_), do: exit(:nif_library_not_loaded) - def codec_result_ok(_), do: exit(:nif_library_not_loaded) - def codec_result_error(_), do: exit(:nif_library_not_loaded) - + def codec_options(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_int(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_int32(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_uint32(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_uint64(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_double(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_atom(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_charlist(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_string(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_binary(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_list_int(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_list_string(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_tuple(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_map(_, _, _), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_keywords(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_result_ok(_), do: :erlang.nif_error(:nif_library_not_loaded) + def codec_result_error(_), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/dirty_nif/NimlerWrapper.ex b/tests/dirty_nif/NimlerWrapper.ex index 3f4383a..038a937 100644 --- a/tests/dirty_nif/NimlerWrapper.ex +++ b/tests/dirty_nif/NimlerWrapper.ex @@ -1,10 +1,13 @@ defmodule NimlerDirtyNif do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def dirty_cpu(), do: exit(:nif_library_not_loaded) - def dirty_io(), do: exit(:nif_library_not_loaded) - + def dirty_cpu(), do: :erlang.nif_error(:nif_library_not_loaded) + def dirty_io(), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/init_api/NimlerWrapper.ex b/tests/init_api/NimlerWrapper.ex index 2271c9d..93fdf16 100644 --- a/tests/init_api/NimlerWrapper.ex +++ b/tests/init_api/NimlerWrapper.ex @@ -1,11 +1,14 @@ defmodule NimlerInitApi do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 123) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 123 + ) - def test(), do: exit(:nif_library_not_loaded) - def test_priv(), do: exit(:nif_library_not_loaded) - def test_dirty(), do: exit(:nif_library_not_loaded) - + def test(), do: :erlang.nif_error(:nif_library_not_loaded) + def test_priv(), do: :erlang.nif_error(:nif_library_not_loaded) + def test_dirty(), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/init_resource/NimlerWrapper.ex b/tests/init_resource/NimlerWrapper.ex index 92c6ec5..9d6ed52 100644 --- a/tests/init_resource/NimlerWrapper.ex +++ b/tests/init_resource/NimlerWrapper.ex @@ -1,11 +1,14 @@ defmodule NimlerInitResource do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def new(), do: exit(:nif_library_not_loaded) - def set(_, _), do: exit(:nif_library_not_loaded) - def check(_, _), do: exit(:nif_library_not_loaded) - + def new(), do: :erlang.nif_error(:nif_library_not_loaded) + def set(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def check(_, _), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/integration/NimlerWrapper.ex b/tests/integration/NimlerWrapper.ex index a42db61..5bcd2f8 100644 --- a/tests/integration/NimlerWrapper.ex +++ b/tests/integration/NimlerWrapper.ex @@ -1,78 +1,81 @@ defmodule NimlerIntegration do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def is_atom(_), do: exit(:nif_library_not_loaded) - def is_binary(_), do: exit(:nif_library_not_loaded) - def is_current_process_alive(), do: exit(:nif_library_not_loaded) - def is_empty_list(_), do: exit(:nif_library_not_loaded) - def is_exception(_), do: exit(:nif_library_not_loaded) - def is_fun(_), do: exit(:nif_library_not_loaded) - def is_identical(_, _), do: exit(:nif_library_not_loaded) - def is_list(_), do: exit(:nif_library_not_loaded) - def is_map(_), do: exit(:nif_library_not_loaded) - def is_number(_), do: exit(:nif_library_not_loaded) - def is_pid(_), do: exit(:nif_library_not_loaded) - def is_pid_undefined(_), do: exit(:nif_library_not_loaded) - def is_process_alive(_), do: exit(:nif_library_not_loaded) - def is_ref(_), do: exit(:nif_library_not_loaded) - def is_tuple(_), do: exit(:nif_library_not_loaded) - def get_atom(_), do: exit(:nif_library_not_loaded) - def get_atom_length(_), do: exit(:nif_library_not_loaded) - def get_string(_), do: exit(:nif_library_not_loaded) - def get_int(_), do: exit(:nif_library_not_loaded) - def get_long(_), do: exit(:nif_library_not_loaded) - def get_int64(_), do: exit(:nif_library_not_loaded) - def get_uint(_), do: exit(:nif_library_not_loaded) - def get_ulong(_), do: exit(:nif_library_not_loaded) - def get_uint64(_), do: exit(:nif_library_not_loaded) - def get_double(_), do: exit(:nif_library_not_loaded) - def get_tuple(_), do: exit(:nif_library_not_loaded) - def get_list_length(_), do: exit(:nif_library_not_loaded) - def get_list_cell(_), do: exit(:nif_library_not_loaded) - def get_map_size(_), do: exit(:nif_library_not_loaded) - def get_map_value(_, _), do: exit(:nif_library_not_loaded) - def get_local_pid(_), do: exit(:nif_library_not_loaded) - def make_map_put(_, _, _), do: exit(:nif_library_not_loaded) - def make_map_remove(_, _), do: exit(:nif_library_not_loaded) - def make_map_update(_, _, _), do: exit(:nif_library_not_loaded) - def make_string(), do: exit(:nif_library_not_loaded) - def make_string_len(), do: exit(:nif_library_not_loaded) - def make_list(), do: exit(:nif_library_not_loaded) - def make_list_cell(), do: exit(:nif_library_not_loaded) - def make_list_from_array(), do: exit(:nif_library_not_loaded) - def make_reverse_list(_), do: exit(:nif_library_not_loaded) - def make_tuple(), do: exit(:nif_library_not_loaded) - def make_tuple_from_array(), do: exit(:nif_library_not_loaded) - def make_int(), do: exit(:nif_library_not_loaded) - def make_long(), do: exit(:nif_library_not_loaded) - def make_int64(), do: exit(:nif_library_not_loaded) - def make_uint(), do: exit(:nif_library_not_loaded) - def make_ulong(), do: exit(:nif_library_not_loaded) - def make_uint64(), do: exit(:nif_library_not_loaded) - def make_double(), do: exit(:nif_library_not_loaded) - def make_new_binary(), do: exit(:nif_library_not_loaded) - def make_new_map(), do: exit(:nif_library_not_loaded) - def make_map_from_arrays(), do: exit(:nif_library_not_loaded) - def make_atom(), do: exit(:nif_library_not_loaded) - def make_existing_atom(), do: exit(:nif_library_not_loaded) - def make_existing_atom_len(), do: exit(:nif_library_not_loaded) - def make_copy(), do: exit(:nif_library_not_loaded) - def make_pid(), do: exit(:nif_library_not_loaded) - def make_ref(), do: exit(:nif_library_not_loaded) - def make_unique_integer(), do: exit(:nif_library_not_loaded) - def e_compare(_, _), do: exit(:nif_library_not_loaded) - def term_type(_, _, _, _, _, _), do: exit(:nif_library_not_loaded) - def system_info(), do: exit(:nif_library_not_loaded) - def e_raise_exception(_), do: exit(:nif_library_not_loaded) - def e_monotonic_time(), do: exit(:nif_library_not_loaded) - def e_convert_time_unit(), do: exit(:nif_library_not_loaded) - def e_time_offset(), do: exit(:nif_library_not_loaded) - def e_cpu_time(), do: exit(:nif_library_not_loaded) - def e_now_time(), do: exit(:nif_library_not_loaded) - def e_fprintf(), do: exit(:nif_library_not_loaded) - def e_snprintf(), do: exit(:nif_library_not_loaded) - + def is_atom(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_binary(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_current_process_alive(), do: :erlang.nif_error(:nif_library_not_loaded) + def is_empty_list(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_exception(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_fun(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_identical(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def is_list(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_map(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_number(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_pid(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_pid_undefined(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_process_alive(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_ref(_), do: :erlang.nif_error(:nif_library_not_loaded) + def is_tuple(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_atom(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_atom_length(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_string(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_int(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_long(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_int64(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_uint(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_ulong(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_uint64(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_double(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_tuple(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_list_length(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_list_cell(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_map_size(_), do: :erlang.nif_error(:nif_library_not_loaded) + def get_map_value(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def get_local_pid(_), do: :erlang.nif_error(:nif_library_not_loaded) + def make_map_put(_, _, _), do: :erlang.nif_error(:nif_library_not_loaded) + def make_map_remove(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def make_map_update(_, _, _), do: :erlang.nif_error(:nif_library_not_loaded) + def make_string(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_string_len(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_list(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_list_cell(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_list_from_array(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_reverse_list(_), do: :erlang.nif_error(:nif_library_not_loaded) + def make_tuple(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_tuple_from_array(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_int(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_long(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_int64(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_uint(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_ulong(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_uint64(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_double(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_new_binary(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_new_map(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_map_from_arrays(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_atom(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_existing_atom(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_existing_atom_len(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_copy(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_pid(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_ref(), do: :erlang.nif_error(:nif_library_not_loaded) + def make_unique_integer(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_compare(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def term_type(_, _, _, _, _, _), do: :erlang.nif_error(:nif_library_not_loaded) + def system_info(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_raise_exception(_), do: :erlang.nif_error(:nif_library_not_loaded) + def e_monotonic_time(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_convert_time_unit(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_time_offset(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_cpu_time(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_now_time(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_fprintf(), do: :erlang.nif_error(:nif_library_not_loaded) + def e_snprintf(), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/message/NimlerWrapper.ex b/tests/message/NimlerWrapper.ex index b0f9321..42043b6 100644 --- a/tests/message/NimlerWrapper.ex +++ b/tests/message/NimlerWrapper.ex @@ -1,10 +1,13 @@ defmodule NimlerMessage do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def send_message(_, _), do: exit(:nif_library_not_loaded) - def send_message_caller(_), do: exit(:nif_library_not_loaded) - + def send_message(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def send_message_caller(_), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/positional/NimlerWrapper.ex b/tests/positional/NimlerWrapper.ex index 664130a..e118f25 100644 --- a/tests/positional/NimlerWrapper.ex +++ b/tests/positional/NimlerWrapper.ex @@ -1,20 +1,23 @@ defmodule NimlerPositionalArgs do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def pos_int(_, _), do: exit(:nif_library_not_loaded) - def pos_bool(_, _, _, _), do: exit(:nif_library_not_loaded) - def pos_bin(_), do: exit(:nif_library_not_loaded) - def pos_str(_), do: exit(:nif_library_not_loaded) - def pos_charlist(_), do: exit(:nif_library_not_loaded) - def pos_seq(_), do: exit(:nif_library_not_loaded) - def pos_map(_), do: exit(:nif_library_not_loaded) - def pos_tup_map(_), do: exit(:nif_library_not_loaded) - def pos_pid(_, _), do: exit(:nif_library_not_loaded) - def pos_ok?(_), do: exit(:nif_library_not_loaded) - def pos_keywords(_), do: exit(:nif_library_not_loaded) - def pos_result(_, _), do: exit(:nif_library_not_loaded) - + def pos_int(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_bool(_, _, _, _), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_bin(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_str(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_charlist(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_seq(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_map(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_tup_map(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_pid(_, _), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_ok?(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_keywords(_), do: :erlang.nif_error(:nif_library_not_loaded) + def pos_result(_, _), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/resource/NimlerWrapper.ex b/tests/resource/NimlerWrapper.ex index 4353224..f90fe79 100644 --- a/tests/resource/NimlerWrapper.ex +++ b/tests/resource/NimlerWrapper.ex @@ -1,11 +1,14 @@ defmodule NimlerWrapper do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def create_resource(), do: exit(:nif_library_not_loaded) - def update_resource(_), do: exit(:nif_library_not_loaded) - def check_resource(_), do: exit(:nif_library_not_loaded) - + def create_resource(), do: :erlang.nif_error(:nif_library_not_loaded) + def update_resource(_), do: :erlang.nif_error(:nif_library_not_loaded) + def check_resource(_), do: :erlang.nif_error(:nif_library_not_loaded) end diff --git a/tests/timeslice/NimlerWrapper.ex b/tests/timeslice/NimlerWrapper.ex index c7fd66a..404e52f 100644 --- a/tests/timeslice/NimlerWrapper.ex +++ b/tests/timeslice/NimlerWrapper.ex @@ -1,9 +1,12 @@ defmodule NimlerTimeslice do @on_load :init - def init(), do: :erlang.load_nif(to_charlist( - Path.join(Path.dirname(__ENV__.file), 'nif')), 0) + def init(), + do: + :erlang.load_nif( + to_charlist(Path.join(Path.dirname(__ENV__.file), 'nif')), + 0 + ) - def test_consume_timeslice(_, _), do: exit(:nif_library_not_loaded) - + def test_consume_timeslice(_, _), do: :erlang.nif_error(:nif_library_not_loaded) end