#ifndef ANT_ABORT_MODULE_H
#define ANT_ABORT_MODULE_H

#include "types.h"
#include "gc/modules.h"

void init_abort_module(void);

void gc_mark_abort(ant_t *js, gc_mark_fn mark);
void signal_do_abort(ant_t *js, ant_value_t signal, ant_value_t reason);
void abort_signal_add_listener(ant_t *js, ant_value_t signal, ant_value_t callback);
void abort_signal_remove_listener(ant_t *js, ant_value_t signal, ant_value_t callback);

bool abort_signal_is_signal(ant_value_t signal);
bool abort_signal_is_aborted(ant_value_t signal);

ant_value_t abort_signal_get_reason(ant_value_t signal);
ant_value_t abort_signal_create_dependent(ant_t *js, ant_value_t source);

#endif
