nifs.c

Include dependency graph for nifs.c:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "9" [label="stdbool.h" tooltip="stdbool.h"]
    "36" [label="bif.h" tooltip="bif.h"]
    "42" [label="dictionary.h" tooltip="dictionary.h"]
    "17" [label="stdatomic.h" tooltip="stdatomic.h"]
    "40" [label="bitstring.h" tooltip="bitstring.h"]
    "45" [label="platform_nifs.h" tooltip="platform_nifs.h"]
    "3" [label="atom.h" tooltip="atom.h"]
    "47" [label="posix_nifs.h" tooltip="posix_nifs.h"]
    "12" [label="assert.h" tooltip="assert.h"]
    "18" [label="synclist.h" tooltip="synclist.h"]
    "41" [label="defaultatoms.h" tooltip="defaultatoms.h"]
    "31" [label="fenv.h" tooltip="fenv.h"]
    "4" [label="stdint.h" tooltip="stdint.h"]
    "5" [label="stdlib.h" tooltip="stdlib.h"]
    "39" [label="valueshashtable.h" tooltip="valueshashtable.h"]
    "48" [label="scheduler.h" tooltip="scheduler.h"]
    "29" [label="exportedfunction.h" tooltip="exportedfunction.h"]
    "6" [label="context.h" tooltip="context.h"]
    "30" [label="errno.h" tooltip="errno.h"]
    "46" [label="port.h" tooltip="port.h"]
    "23" [label="utils.h" tooltip="utils.h"]
    "8" [label="atom_table.h" tooltip="atom_table.h"]
    "11" [label="term_typedef.h" tooltip="term_typedef.h"]
    "24" [label="stddef.h" tooltip="stddef.h"]
    "13" [label="limits.h" tooltip="limits.h"]
    "25" [label="refc_binary.h" tooltip="refc_binary.h"]
    "21" [label="string.h" tooltip="string.h"]
    "28" [label="mailbox.h" tooltip="mailbox.h"]
    "37" [label="module.h" tooltip="module.h"]
    "35" [label="avmpack.h" tooltip="avmpack.h"]
    "34" [label="avm_version.h" tooltip="avm_version.h"]
    "20" [label="term.h" tooltip="term.h"]
    "10" [label="erl_nif.h" tooltip="erl_nif.h"]
    "44" [label="interop.h" tooltip="interop.h"]
    "33" [label="time.h" tooltip="time.h"]
    "50" [label="unicode.h" tooltip="unicode.h"]
    "32" [label="math.h" tooltip="math.h"]
    "26" [label="resources.h" tooltip="resources.h"]
    "16" [label="smp.h" tooltip="smp.h"]
    "49" [label="sys.h" tooltip="sys.h"]
    "38" [label="atomshashtable.h" tooltip="atomshashtable.h"]
    "51" [label="nifs_hash.h" tooltip="nifs_hash.h"]
    "1" [label="/home/runner/work/AtomVM/AtomVM/src/libAtomVM/nifs.c" tooltip="/home/runner/work/AtomVM/AtomVM/src/libAtomVM/nifs.c" fillcolor="#BFBFBF"]
    "2" [label="nifs.h" tooltip="nifs.h"]
    "7" [label="globalcontext.h" tooltip="globalcontext.h"]
    "22" [label="memory.h" tooltip="memory.h"]
    "19" [label="stdio.h" tooltip="stdio.h"]
    "27" [label="timer_list.h" tooltip="timer_list.h"]
    "15" [label="list.h" tooltip="list.h"]
    "14" [label="inttypes.h" tooltip="inttypes.h"]
    "43" [label="externalterm.h" tooltip="externalterm.h"]
    "36" -> "9" [dir=forward tooltip="include"]
    "36" -> "3" [dir=forward tooltip="include"]
    "36" -> "6" [dir=forward tooltip="include"]
    "36" -> "29" [dir=forward tooltip="include"]
    "36" -> "37" [dir=forward tooltip="include"]
    "42" -> "15" [dir=forward tooltip="include"]
    "42" -> "20" [dir=forward tooltip="include"]
    "40" -> "20" [dir=forward tooltip="include"]
    "40" -> "9" [dir=forward tooltip="include"]
    "40" -> "4" [dir=forward tooltip="include"]
    "45" -> "29" [dir=forward tooltip="include"]
    "45" -> "37" [dir=forward tooltip="include"]
    "3" -> "4" [dir=forward tooltip="include"]
    "3" -> "5" [dir=forward tooltip="include"]
    "47" -> "29" [dir=forward tooltip="include"]
    "47" -> "7" [dir=forward tooltip="include"]
    "47" -> "20" [dir=forward tooltip="include"]
    "18" -> "15" [dir=forward tooltip="include"]
    "18" -> "19" [dir=forward tooltip="include"]
    "18" -> "16" [dir=forward tooltip="include"]
    "41" -> "7" [dir=forward tooltip="include"]
    "48" -> "6" [dir=forward tooltip="include"]
    "48" -> "7" [dir=forward tooltip="include"]
    "29" -> "20" [dir=forward tooltip="include"]
    "6" -> "7" [dir=forward tooltip="include"]
    "6" -> "15" [dir=forward tooltip="include"]
    "6" -> "28" [dir=forward tooltip="include"]
    "6" -> "16" [dir=forward tooltip="include"]
    "6" -> "20" [dir=forward tooltip="include"]
    "6" -> "27" [dir=forward tooltip="include"]
    "46" -> "6" [dir=forward tooltip="include"]
    "46" -> "41" [dir=forward tooltip="include"]
    "46" -> "7" [dir=forward tooltip="include"]
    "46" -> "22" [dir=forward tooltip="include"]
    "46" -> "20" [dir=forward tooltip="include"]
    "23" -> "24" [dir=forward tooltip="include"]
    "8" -> "9" [dir=forward tooltip="include"]
    "8" -> "3" [dir=forward tooltip="include"]
    "11" -> "12" [dir=forward tooltip="include"]
    "11" -> "13" [dir=forward tooltip="include"]
    "11" -> "14" [dir=forward tooltip="include"]
    "11" -> "4" [dir=forward tooltip="include"]
    "25" -> "9" [dir=forward tooltip="include"]
    "25" -> "5" [dir=forward tooltip="include"]
    "25" -> "15" [dir=forward tooltip="include"]
    "25" -> "26" [dir=forward tooltip="include"]
    "25" -> "16" [dir=forward tooltip="include"]
    "28" -> "9" [dir=forward tooltip="include"]
    "28" -> "15" [dir=forward tooltip="include"]
    "28" -> "16" [dir=forward tooltip="include"]
    "28" -> "11" [dir=forward tooltip="include"]
    "28" -> "23" [dir=forward tooltip="include"]
    "37" -> "9" [dir=forward tooltip="include"]
    "37" -> "4" [dir=forward tooltip="include"]
    "37" -> "3" [dir=forward tooltip="include"]
    "37" -> "8" [dir=forward tooltip="include"]
    "37" -> "38" [dir=forward tooltip="include"]
    "37" -> "6" [dir=forward tooltip="include"]
    "37" -> "29" [dir=forward tooltip="include"]
    "37" -> "7" [dir=forward tooltip="include"]
    "37" -> "20" [dir=forward tooltip="include"]
    "37" -> "39" [dir=forward tooltip="include"]
    "35" -> "7" [dir=forward tooltip="include"]
    "35" -> "15" [dir=forward tooltip="include"]
    "35" -> "9" [dir=forward tooltip="include"]
    "35" -> "24" [dir=forward tooltip="include"]
    "35" -> "4" [dir=forward tooltip="include"]
    "20" -> "9" [dir=forward tooltip="include"]
    "20" -> "4" [dir=forward tooltip="include"]
    "20" -> "19" [dir=forward tooltip="include"]
    "20" -> "5" [dir=forward tooltip="include"]
    "20" -> "21" [dir=forward tooltip="include"]
    "20" -> "22" [dir=forward tooltip="include"]
    "20" -> "25" [dir=forward tooltip="include"]
    "20" -> "23" [dir=forward tooltip="include"]
    "20" -> "11" [dir=forward tooltip="include"]
    "10" -> "11" [dir=forward tooltip="include"]
    "44" -> "6" [dir=forward tooltip="include"]
    "44" -> "20" [dir=forward tooltip="include"]
    "50" -> "9" [dir=forward tooltip="include"]
    "50" -> "24" [dir=forward tooltip="include"]
    "50" -> "4" [dir=forward tooltip="include"]
    "26" -> "5" [dir=forward tooltip="include"]
    "26" -> "10" [dir=forward tooltip="include"]
    "26" -> "15" [dir=forward tooltip="include"]
    "26" -> "22" [dir=forward tooltip="include"]
    "16" -> "9" [dir=forward tooltip="include"]
    "16" -> "17" [dir=forward tooltip="include"]
    "49" -> "7" [dir=forward tooltip="include"]
    "49" -> "37" [dir=forward tooltip="include"]
    "49" -> "4" [dir=forward tooltip="include"]
    "49" -> "33" [dir=forward tooltip="include"]
    "38" -> "3" [dir=forward tooltip="include"]
    "1" -> "2" [dir=forward tooltip="include"]
    "1" -> "30" [dir=forward tooltip="include"]
    "1" -> "31" [dir=forward tooltip="include"]
    "1" -> "32" [dir=forward tooltip="include"]
    "1" -> "19" [dir=forward tooltip="include"]
    "1" -> "21" [dir=forward tooltip="include"]
    "1" -> "33" [dir=forward tooltip="include"]
    "1" -> "8" [dir=forward tooltip="include"]
    "1" -> "34" [dir=forward tooltip="include"]
    "1" -> "35" [dir=forward tooltip="include"]
    "1" -> "36" [dir=forward tooltip="include"]
    "1" -> "40" [dir=forward tooltip="include"]
    "1" -> "6" [dir=forward tooltip="include"]
    "1" -> "41" [dir=forward tooltip="include"]
    "1" -> "42" [dir=forward tooltip="include"]
    "1" -> "43" [dir=forward tooltip="include"]
    "1" -> "7" [dir=forward tooltip="include"]
    "1" -> "44" [dir=forward tooltip="include"]
    "1" -> "28" [dir=forward tooltip="include"]
    "1" -> "22" [dir=forward tooltip="include"]
    "1" -> "37" [dir=forward tooltip="include"]
    "1" -> "45" [dir=forward tooltip="include"]
    "1" -> "46" [dir=forward tooltip="include"]
    "1" -> "47" [dir=forward tooltip="include"]
    "1" -> "48" [dir=forward tooltip="include"]
    "1" -> "16" [dir=forward tooltip="include"]
    "1" -> "18" [dir=forward tooltip="include"]
    "1" -> "49" [dir=forward tooltip="include"]
    "1" -> "20" [dir=forward tooltip="include"]
    "1" -> "50" [dir=forward tooltip="include"]
    "1" -> "23" [dir=forward tooltip="include"]
    "1" -> "51" [dir=forward tooltip="include"]
    "2" -> "3" [dir=forward tooltip="include"]
    "2" -> "6" [dir=forward tooltip="include"]
    "2" -> "29" [dir=forward tooltip="include"]
    "7" -> "4" [dir=forward tooltip="include"]
    "7" -> "3" [dir=forward tooltip="include"]
    "7" -> "8" [dir=forward tooltip="include"]
    "7" -> "10" [dir=forward tooltip="include"]
    "7" -> "15" [dir=forward tooltip="include"]
    "7" -> "16" [dir=forward tooltip="include"]
    "7" -> "18" [dir=forward tooltip="include"]
    "7" -> "20" [dir=forward tooltip="include"]
    "7" -> "27" [dir=forward tooltip="include"]
    "22" -> "10" [dir=forward tooltip="include"]
    "22" -> "11" [dir=forward tooltip="include"]
    "22" -> "23" [dir=forward tooltip="include"]
    "22" -> "4" [dir=forward tooltip="include"]
    "22" -> "5" [dir=forward tooltip="include"]
    "27" -> "9" [dir=forward tooltip="include"]
    "27" -> "4" [dir=forward tooltip="include"]
    "27" -> "15" [dir=forward tooltip="include"]
    "43" -> "20" [dir=forward tooltip="include"]
}

Defines

_GNU_SOURCE
MAX_NIF_NAME_LEN 260
FLOAT_BUF_SIZE 64
RAISE(a, b)

ctx->x[0] = (a); \

ctx->x[1] = (b); \

return term_invalid_term();


MAX(x, y) (((x) > (y)) ? (x) : (y))
NOT_FOUND (0xFF)
DECLARE_MATH_NIF_FUN(moniker)     static term nif_math_##moniker(Context *ctx, int argc, term argv[]);
DEFINE_MATH_NIF(moniker)     static const struct Nif

math_##moniker##_nif =  \

{                                               \

.base.type =

NIFFunctionType

,               \

.nif_ptr = nif_math_##moniker               \

};


IF_HAVE_OPEN_CLOSE(expr) NULL
IF_HAVE_MKFIFO(expr) NULL
IF_HAVE_CLOCK_SETTIME_OR_SETTIMEOFDAY(expr) NULL
DEFINE_UNARY_MATH_OP(moniker)     static avm_float_t math_##moniker(avm_float_t

x)                    \

{                                                                   \

return moniker(x);                                              \

}                                                                   \

\

static

term nif_math_##moniker(Context *ctx, int argc, term

argv[]) \

{                                                                   \

UNUSED(argc);                                                   \         VALIDATE_VALUE(argv[0], term_is_number);                        \         term t = math_unary_op(ctx, argv[0], math_##moniker);           \         if (term_is_atom(t)) {                                          \             RAISE_ERROR

(t);                                             \

}

else

{                                                        \

return t;                                                   \

}                                                               \

}


DEFINE_BINARY_MATH_OP(moniker)     static avm_float_t math_##moniker(avm_float_t x, avm_float_t

y)     \

{                                                                   \

return moniker(x, y);                                           \

}                                                                   \

\

static

term nif_math_##moniker(Context *ctx, int argc, term

argv[]) \

{                                                                   \

UNUSED(argc);                                                   \         VALIDATE_VALUE(argv[0], term_is_number);                        \         VALIDATE_VALUE(argv[1], term_is_number);                        \         term t = math_binary_op(ctx, argv[0], argv[1], math_##moniker); \         if (term_is_atom(t)) {                                          \             RAISE_ERROR

(t);                                             \

}

else

{                                                        \

return t;                                                   \

}                                                               \

}


Typedefs

typedef void *(*context_iterator)(Context *ctx, void *accum)
typedef avm_float_t (*unary_math_f)(avm_float_t x)
typedef avm_float_t (*binary_math_f)(avm_float_t x, avm_float_t y)

Functions

static NativeHandlerResult process_echo_mailbox(Context *ctx)
static NativeHandlerResult process_console_mailbox(Context *ctx)
static term binary_to_atom(Context *ctx, int argc, term argv[], int create_new)
static term list_to_atom(Context *ctx, int argc, term argv[], int create_new)
static term nif_binary_at_2(Context *ctx, int argc, term argv[])
static term nif_binary_first_1(Context *ctx, int argc, term argv[])
static term nif_binary_last_1(Context *ctx, int argc, term argv[])
static term nif_binary_part_3(Context *ctx, int argc, term argv[])
static term nif_binary_split_2(Context *ctx, int argc, term argv[])
static term nif_calendar_system_time_to_universal_time_2(Context *ctx, int argc, term argv[])
static term nif_erlang_delete_element_2(Context *ctx, int argc, term argv[])
static term nif_erlang_atom_to_binary_2(Context *ctx, int argc, term argv[])
static term nif_erlang_atom_to_list_1(Context *ctx, int argc, term argv[])
static term nif_erlang_binary_to_atom_2(Context *ctx, int argc, term argv[])
static term nif_erlang_binary_to_float_1(Context *ctx, int argc, term argv[])
static term nif_erlang_binary_to_integer_1(Context *ctx, int argc, term argv[])
static term nif_erlang_binary_to_list_1(Context *ctx, int argc, term argv[])
static term nif_erlang_binary_to_existing_atom_2(Context *ctx, int argc, term argv[])
static term nif_erlang_concat_2(Context *ctx, int argc, term argv[])
static term nif_erlang_display_1(Context *ctx, int argc, term argv[])
static term nif_erlang_erase_1(Context *ctx, int argc, term argv[])
static term nif_erlang_error(Context *ctx, int argc, term argv[])
static term nif_erlang_exit(Context *ctx, int argc, term argv[])
static term nif_erlang_make_fun_3(Context *ctx, int argc, term argv[])
static term nif_erlang_make_ref_0(Context *ctx, int argc, term argv[])
static term nif_erlang_make_tuple_2(Context *ctx, int argc, term argv[])
static term nif_erlang_insert_element_3(Context *ctx, int argc, term argv[])
static term nif_erlang_integer_to_binary_2(Context *ctx, int argc, term argv[])
static term nif_erlang_integer_to_list_2(Context *ctx, int argc, term argv[])
static term nif_erlang_is_process_alive_1(Context *ctx, int argc, term argv[])
static term nif_erlang_float_to_binary(Context *ctx, int argc, term argv[])
static term nif_erlang_float_to_list(Context *ctx, int argc, term argv[])
static term nif_erlang_list_to_binary_1(Context *ctx, int argc, term argv[])
static term nif_erlang_list_to_integer_1(Context *ctx, int argc, term argv[])
static term nif_erlang_list_to_float_1(Context *ctx, int argc, term argv[])
static term nif_erlang_list_to_atom_1(Context *ctx, int argc, term argv[])
static term nif_erlang_list_to_existing_atom_1(Context *ctx, int argc, term argv[])
static term nif_erlang_monotonic_time_1(Context *ctx, int argc, term argv[])
static term nif_erlang_iolist_size_1(Context *ctx, int argc, term argv[])
static term nif_erlang_iolist_to_binary_1(Context *ctx, int argc, term argv[])
static term nif_erlang_open_port_2(Context *ctx, int argc, term argv[])
static term nif_erlang_register_2(Context *ctx, int argc, term argv[])
static term nif_erlang_unregister_1(Context *ctx, int argc, term argv[])
static term nif_erlang_send_2(Context *ctx, int argc, term argv[])
static term nif_erlang_setelement_3(Context *ctx, int argc, term argv[])
static term nif_erlang_spawn_opt(Context *ctx, int argc, term argv[])
static term nif_erlang_spawn_fun_opt(Context *ctx, int argc, term argv[])
static term nif_erlang_whereis_1(Context *ctx, int argc, term argv[])
static term nif_erlang_system_time_1(Context *ctx, int argc, term argv[])
static term nif_erlang_tuple_to_list_1(Context *ctx, int argc, term argv[])
static term nif_erlang_list_to_tuple_1(Context *ctx, int argc, term argv[])
static term nif_erlang_universaltime_0(Context *ctx, int argc, term argv[])
static term nif_erlang_localtime(Context *ctx, int argc, term argv[])
static term nif_erlang_timestamp_0(Context *ctx, int argc, term argv[])
static term nif_erts_debug_flat_size(Context *ctx, int argc, term argv[])
static term nif_erlang_process_flag(Context *ctx, int argc, term argv[])
static term nif_erlang_processes(Context *ctx, int argc, term argv[])
static term nif_erlang_process_info(Context *ctx, int argc, term argv[])
static term nif_erlang_put_2(Context *ctx, int argc, term argv[])
static term nif_erlang_system_info(Context *ctx, int argc, term argv[])
static term nif_erlang_system_flag(Context *ctx, int argc, term argv[])
static term nif_erlang_binary_to_term(Context *ctx, int argc, term argv[])
static term nif_erlang_term_to_binary(Context *ctx, int argc, term argv[])
static term nif_erlang_throw(Context *ctx, int argc, term argv[])
static term nif_erlang_raise(Context *ctx, int argc, term argv[])
static term nif_erlang_pid_to_list(Context *ctx, int argc, term argv[])
static term nif_erlang_ref_to_list(Context *ctx, int argc, term argv[])
static term nif_erlang_fun_to_list(Context *ctx, int argc, term argv[])
static term nif_erlang_function_exported(Context *ctx, int argc, term argv[])
static term nif_erlang_garbage_collect(Context *ctx, int argc, term argv[])
static term nif_erlang_group_leader(Context *ctx, int argc, term argv[])
static term nif_erlang_get_module_info(Context *ctx, int argc, term argv[])
static term nif_erlang_memory(Context *ctx, int argc, term argv[])
static term nif_erlang_monitor(Context *ctx, int argc, term argv[])
static term nif_erlang_demonitor(Context *ctx, int argc, term argv[])
static term nif_atomvm_add_avm_pack_binary(Context *ctx, int argc, term argv[])
static term nif_atomvm_add_avm_pack_file(Context *ctx, int argc, term argv[])
static term nif_atomvm_close_avm_pack(Context *ctx, int argc, term argv[])
static term nif_atomvm_get_start_beam(Context *ctx, int argc, term argv[])
static term nif_atomvm_read_priv(Context *ctx, int argc, term argv[])
static term nif_console_print(Context *ctx, int argc, term argv[])
static term nif_base64_encode(Context *ctx, int argc, term argv[])
static term nif_base64_decode(Context *ctx, int argc, term argv[])
static term nif_base64_encode_to_string(Context *ctx, int argc, term argv[])
static term nif_base64_decode_to_string(Context *ctx, int argc, term argv[])
static term nif_code_load_abs(Context *ctx, int argc, term argv[])
static term nif_code_load_binary(Context *ctx, int argc, term argv[])
static term nif_lists_reverse(Context *ctx, int argc, term argv[])
static term nif_maps_next(Context *ctx, int argc, term argv[])
static term nif_unicode_characters_to_list(Context *ctx, int argc, term argv[])
static term nif_unicode_characters_to_binary(Context *ctx, int argc, term argv[])
const struct Nif *nifs_get(AtomString module, AtomString function, int arity)
static inline term make_maybe_boxed_int64(Context *ctx, avm_int64_t value)
static bool is_tagged_tuple(term t, term tag, int size)
static NativeHandlerResult process_console_message(Context *ctx, term msg)
static term do_spawn(Context *ctx, Context *new_ctx, term opts_term)
static term build_datetime_from_tm(Context *ctx, struct tm *broken_down_time)
static int is_valid_float_string(const char *str, int len)
static term parse_float(Context *ctx, const char *buf, int len)
static size_t lltoa(avm_int64_t int_value, unsigned base, char *integer_string)
static int format_float(term value, int scientific, int decimals, int compact, char *out_buf, int outbuf_len)
int get_float_format_opts(term opts, int *scientific, int *decimals, int *compact)
static term nif_erlang_process_flag_3(Context *ctx, Context *target, term flag, term value)
static void *nif_increment_context_count(Context *ctx, void *accum)
static void *nif_increment_port_count(Context *ctx, void *accum)
static void *nif_cons_context(Context *ctx, void *p)
static void *nif_iterate_processes(GlobalContext *glb, context_iterator fun, void *accum)
static size_t nif_num_processes(GlobalContext *glb)
static size_t nif_num_ports(GlobalContext *glb)
static term nif_list_processes(Context *ctx)
static void refc_binary_avm_pack_destructor(struct AVMPackData *obj, GlobalContext *global)
static term open_avm_error_tuple(Context *ctx, enum OpenAVMResult result)
static term base64_encode(Context *ctx, int argc, term argv[], bool return_binary)
static inline uint8_t find_index(uint8_t c)
static term base64_decode(Context *ctx, int argc, term argv[], bool return_binary)
static void maybe_clear_exceptions()
static term get_exception(avm_float_t f)
static term math_unary_op(Context *ctx, term x_term, unary_math_f f)
static term math_binary_op(Context *ctx, term x_term, term y_term, binary_math_f f)

Variables

static const struct Nif binary_at_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_binary_at_2}
static const struct Nif binary_first_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_binary_first_1}
static const struct Nif binary_last_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_binary_last_1}
static const struct Nif binary_part_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_binary_part_3}
static const struct Nif binary_split_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_binary_split_2}
static const struct Nif make_ref_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_make_ref_0}
static const struct Nif atom_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_atom_to_binary_2}
static const struct Nif atom_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_atom_to_list_1}
static const struct Nif binary_to_atom_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_binary_to_atom_2}
static const struct Nif binary_to_float_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_binary_to_float_1}
static const struct Nif binary_to_integer_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_binary_to_integer_1}
static const struct Nif binary_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_binary_to_list_1}
static const struct Nif binary_to_existing_atom_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_binary_to_existing_atom_2}
static const struct Nif delete_element_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_delete_element_2}
static const struct Nif display_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_display_1}
static const struct Nif erase_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_erase_1}
static const struct Nif error_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_error}
static const struct Nif exit_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_exit}
static const struct Nif insert_element_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_insert_element_3}
static const struct Nif integer_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_integer_to_binary_2}
static const struct Nif integer_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_integer_to_list_2}
static const struct Nif float_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_float_to_binary}
static const struct Nif float_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_float_to_list}
static const struct Nif is_process_alive_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_is_process_alive_1}
static const struct Nif list_to_atom_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_list_to_atom_1}
static const struct Nif list_to_existing_atom_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_list_to_existing_atom_1}
static const struct Nif list_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_list_to_binary_1}
static const struct Nif list_to_integer_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_list_to_integer_1}
static const struct Nif list_to_float_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_list_to_float_1}
static const struct Nif list_to_tuple_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_list_to_tuple_1}
static const struct Nif iolist_size_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_iolist_size_1}
static const struct Nif iolist_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_iolist_to_binary_1}
static const struct Nif open_port_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_open_port_2}
static const struct Nif make_tuple_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_make_tuple_2}
static const struct Nif register_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_register_2}
static const struct Nif unregister_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_unregister_1}
static const struct Nif spawn_opt_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_spawn_opt}
static const struct Nif spawn_fun_opt_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_spawn_fun_opt}
static const struct Nif send_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_send_2}
static const struct Nif setelement_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_setelement_3}
static const struct Nif whereis_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_whereis_1}
static const struct Nif concat_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_concat_2}
static const struct Nif monotonic_time_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_monotonic_time_1}
static const struct Nif system_time_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_system_time_1}
static const struct Nif universaltime_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_universaltime_0}
static const struct Nif localtime_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_localtime}
static const struct Nif timestamp_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_timestamp_0}
static const struct Nif system_time_to_universal_time_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_calendar_system_time_to_universal_time_2}
static const struct Nif tuple_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_tuple_to_list_1}
static const struct Nif flat_size_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erts_debug_flat_size}
static const struct Nif process_flag_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_process_flag}
static const struct Nif processes_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_processes}
static const struct Nif process_info_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_process_info}
static const struct Nif put_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_put_2}
static const struct Nif system_info_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_system_info}
static const struct Nif system_flag_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_system_flag}
static const struct Nif binary_to_term_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_binary_to_term}
static const struct Nif term_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_term_to_binary}
static const struct Nif throw_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_throw}
static const struct Nif pid_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_pid_to_list}
static const struct Nif ref_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_ref_to_list}
static const struct Nif fun_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_fun_to_list}
static const struct Nif function_exported_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_function_exported}
static const struct Nif garbage_collect_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_garbage_collect}
static const struct Nif make_fun_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_make_fun_3}
static const struct Nif memory_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_memory}
static const struct Nif monitor_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_monitor}
static const struct Nif demonitor_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_demonitor}
static const struct Nif group_leader_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_group_leader}
static const struct Nif get_module_info_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_get_module_info}
static const struct Nif raise_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_erlang_raise}
static const struct Nif atomvm_add_avm_pack_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_atomvm_add_avm_pack_binary}
static const struct Nif atomvm_add_avm_pack_file_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_atomvm_add_avm_pack_file}
static const struct Nif atomvm_close_avm_pack_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_atomvm_close_avm_pack}
static const struct Nif atomvm_get_start_beam_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_atomvm_get_start_beam}
static const struct Nif atomvm_read_priv_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_atomvm_read_priv}
static const struct Nif console_print_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_console_print}
static const struct Nif base64_encode_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_base64_encode}
static const struct Nif base64_decode_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_base64_decode}
static const struct Nif base64_encode_to_string_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_base64_encode_to_string}
static const struct Nif base64_decode_to_string_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_base64_decode_to_string}
static const struct Nif code_load_abs_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_code_load_abs}
static const struct Nif code_load_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_code_load_binary}
static const struct Nif lists_reverse_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_lists_reverse}
static const struct Nif maps_next_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_maps_next}
static const struct Nif unicode_characters_to_list_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_unicode_characters_to_list}
static const struct Nif unicode_characters_to_binary_nif = {.base.type = NIFFunctionType, .nif_ptr = nif_unicode_characters_to_binary}
static const struct AVMPackInfo refc_binary_avm_pack_info = {.destructor = refc_binary_avm_pack_destructor}
static char b64_table[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
struct ContextAccumulator

Collaboration diagram for ContextAccumulator:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "20" [label="SpinLock" tooltip="SpinLock"]
    "7" [label="Module" tooltip="Module"]
    "6" [label="ListHead" tooltip="ListHead"]
    "12" [label="HeapFragment" tooltip="HeapFragment"]
    "13" [label="GlobalContext" tooltip="GlobalContext"]
    "9" [label="ModuleFilename" tooltip="ModuleFilename"]
    "16" [label="HNodeGroup" tooltip="HNodeGroup"]
    "19" [label="TimerList" tooltip="TimerList"]
    "10" [label="LiteralEntry" tooltip="LiteralEntry"]
    "4" [label="MailboxMessage" tooltip="MailboxMessage"]
    "11" [label="Heap" tooltip="Heap"]
    "2" [label="Context" tooltip="Context"]
    "18" [label="AtomsHashTable" tooltip="AtomsHashTable"]
    "1" [label="ContextAccumulator" tooltip="ContextAccumulator" fillcolor="#BFBFBF"]
    "3" [label="Mailbox" tooltip="Mailbox"]
    "14" [label="AtomTable" tooltip="AtomTable"]
    "8" [label="ExportedFunction" tooltip="ExportedFunction"]
    "5" [label="TimerListItem" tooltip="TimerListItem"]
    "17" [label="SyncList" tooltip="SyncList"]
    "15" [label="HNode" tooltip="HNode"]
    "7" -> "8" [dir=forward tooltip="usage"]
    "7" -> "9" [dir=forward tooltip="usage"]
    "7" -> "10" [dir=forward tooltip="usage"]
    "7" -> "6" [dir=forward tooltip="usage"]
    "6" -> "6" [dir=forward tooltip="usage"]
    "12" -> "12" [dir=forward tooltip="usage"]
    "13" -> "14" [dir=forward tooltip="usage"]
    "13" -> "17" [dir=forward tooltip="usage"]
    "13" -> "7" [dir=forward tooltip="usage"]
    "13" -> "18" [dir=forward tooltip="usage"]
    "13" -> "19" [dir=forward tooltip="usage"]
    "13" -> "20" [dir=forward tooltip="usage"]
    "13" -> "6" [dir=forward tooltip="usage"]
    "16" -> "15" [dir=forward tooltip="usage"]
    "16" -> "16" [dir=forward tooltip="usage"]
    "19" -> "6" [dir=forward tooltip="usage"]
    "4" -> "4" [dir=forward tooltip="usage"]
    "11" -> "12" [dir=forward tooltip="usage"]
    "2" -> "2" [dir=forward tooltip="usage"]
    "2" -> "3" [dir=forward tooltip="usage"]
    "2" -> "5" [dir=forward tooltip="usage"]
    "2" -> "7" [dir=forward tooltip="usage"]
    "2" -> "11" [dir=forward tooltip="usage"]
    "2" -> "13" [dir=forward tooltip="usage"]
    "2" -> "6" [dir=forward tooltip="usage"]
    "18" -> "15" [dir=forward tooltip="usage"]
    "1" -> "2" [dir=forward tooltip="usage"]
    "3" -> "4" [dir=forward tooltip="usage"]
    "14" -> "15" [dir=forward tooltip="usage"]
    "14" -> "16" [dir=forward tooltip="usage"]
    "5" -> "6" [dir=forward tooltip="usage"]
    "17" -> "6" [dir=forward tooltip="usage"]
    "15" -> "15" [dir=forward tooltip="usage"]
}

Public Members

Context *ctx
term result
struct RefcBinaryAVMPack

Collaboration diagram for RefcBinaryAVMPack:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "18" [label="SpinLock" tooltip="SpinLock"]
    "6" [label="ResourceType" tooltip="ResourceType"]
    "12" [label="Module" tooltip="Module"]
    "2" [label="AVMPackData" tooltip="AVMPackData"]
    "4" [label="ListHead" tooltip="ListHead"]
    "7" [label="GlobalContext" tooltip="GlobalContext"]
    "3" [label="AVMPackInfo" tooltip="AVMPackInfo"]
    "14" [label="ModuleFilename" tooltip="ModuleFilename"]
    "10" [label="HNodeGroup" tooltip="HNodeGroup"]
    "17" [label="TimerList" tooltip="TimerList"]
    "15" [label="LiteralEntry" tooltip="LiteralEntry"]
    "1" [label="RefcBinaryAVMPack" tooltip="RefcBinaryAVMPack" fillcolor="#BFBFBF"]
    "16" [label="AtomsHashTable" tooltip="AtomsHashTable"]
    "5" [label="RefcBinary" tooltip="RefcBinary"]
    "8" [label="AtomTable" tooltip="AtomTable"]
    "13" [label="ExportedFunction" tooltip="ExportedFunction"]
    "11" [label="SyncList" tooltip="SyncList"]
    "9" [label="HNode" tooltip="HNode"]
    "6" -> "7" [dir=forward tooltip="usage"]
    "6" -> "4" [dir=forward tooltip="usage"]
    "12" -> "13" [dir=forward tooltip="usage"]
    "12" -> "14" [dir=forward tooltip="usage"]
    "12" -> "15" [dir=forward tooltip="usage"]
    "12" -> "4" [dir=forward tooltip="usage"]
    "2" -> "3" [dir=forward tooltip="usage"]
    "2" -> "4" [dir=forward tooltip="usage"]
    "4" -> "4" [dir=forward tooltip="usage"]
    "7" -> "8" [dir=forward tooltip="usage"]
    "7" -> "11" [dir=forward tooltip="usage"]
    "7" -> "12" [dir=forward tooltip="usage"]
    "7" -> "16" [dir=forward tooltip="usage"]
    "7" -> "17" [dir=forward tooltip="usage"]
    "7" -> "18" [dir=forward tooltip="usage"]
    "7" -> "4" [dir=forward tooltip="usage"]
    "10" -> "9" [dir=forward tooltip="usage"]
    "10" -> "10" [dir=forward tooltip="usage"]
    "17" -> "4" [dir=forward tooltip="usage"]
    "1" -> "2" [dir=forward tooltip="usage"]
    "1" -> "5" [dir=forward tooltip="usage"]
    "16" -> "9" [dir=forward tooltip="usage"]
    "5" -> "6" [dir=forward tooltip="usage"]
    "5" -> "4" [dir=forward tooltip="usage"]
    "8" -> "9" [dir=forward tooltip="usage"]
    "8" -> "10" [dir=forward tooltip="usage"]
    "11" -> "4" [dir=forward tooltip="usage"]
    "9" -> "9" [dir=forward tooltip="usage"]
}

Public Members

struct AVMPackData base
struct RefcBinary *refc