Page MenuHomePhorge

ant.h
No OneTemporary

Size
9 KB
Referenced Files
None
Subscribers
None
#ifndef ANT_H
#define ANT_H
#pragma once
#define PCRE2_CODE_UNIT_WIDTH 8
#include "types.h"
#include "common.h"
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>
#define STR_PROTO "__proto__"
#define STR_PROTO_LEN 9
#define CFUNC_HAS_PROTOTYPE 0x01u
#define ANT_ASSERT(cond, msg) ({ \
if (!(cond)) { \
fprintf(stderr, "ANT FATAL: %s\n %s:%d\n", msg, __FILE__, __LINE__); \
abort(); \
}})
#define ANT_STRING(s) js_mkstr(js, s, sizeof(s) - 1)
#define ANT_PTR(ptr) js_mknum((double)(uintptr_t)(ptr))
#define ANT_COPY(buf, len, s) cpy(buf, len, s, sizeof(s) - 1)
#define REMAIN(n, len) ((n) >= (len) ? 0 : (len) - (n))
#define JS_NAN ((double)NAN)
#define JS_NEG_NAN ((double)(-NAN))
#define JS_INF ((double)INFINITY)
#define JS_NEG_INF ((double)(-INFINITY))
#define js_true (NANBOX_PREFIX | ((ant_value_t)T_BOOL << NANBOX_TYPE_SHIFT) | 1)
#define js_false (NANBOX_PREFIX | ((ant_value_t)T_BOOL << NANBOX_TYPE_SHIFT))
#define js_bool(x) (js_false | (ant_value_t)!!(x))
ant_t *js_create(void *buf, size_t len);
ant_t *js_create_dynamic();
ant_value_t js_glob(ant_t *);
void js_mark_constructor(ant_value_t value, bool is_constructor);
// TODO: improve naming
ant_value_t js_eval_bytecode(ant_t *, const char *, size_t);
ant_value_t js_eval_bytecode_module(ant_t *, const char *, size_t);
ant_value_t js_eval_bytecode_eval(ant_t *, const char *, size_t);
ant_value_t js_eval_bytecode_eval_with_strict(ant_t *, const char *, size_t, bool);
ant_value_t js_eval_bytecode_repl(ant_t *, const char *, size_t);
void js_destroy(ant_t *);
bool js_truthy(ant_t *, ant_value_t);
void js_setstackbase(ant_t *, void *);
void js_setstacklimit(ant_t *, size_t);
uint32_t js_to_uint32(double d);
int32_t js_to_int32(double d);
bool js_chkargs(ant_value_t *, int, const char *);
void js_set_filename(ant_t *, const char *);
void js_stats(ant_t *, size_t *total, size_t *min, size_t *cstacksize);
ant_value_t js_mkundef(void);
ant_value_t js_mknull(void);
ant_value_t js_mknum(double);
ant_value_t js_mkpromise(ant_t *js);
ant_value_t js_mkgenerator(ant_t *js);
ant_value_t js_getthis(ant_t *);
void js_setthis(ant_t *, ant_value_t);
ant_value_t js_getcurrentfunc(ant_t *);
ant_value_t js_get(ant_t *, ant_value_t, const char *);
ant_value_t js_getprop_proto(ant_t *, ant_value_t, const char *);
ant_value_t js_getprop_fallback(ant_t *js, ant_value_t obj, const char *name);
ant_value_t js_getprop_super(ant_t *js, ant_value_t super_obj, ant_value_t receiver, const char *name);
ant_offset_t js_arr_len(ant_t *js, ant_value_t arr);
ant_value_t js_arr_get(ant_t *js, ant_value_t arr, ant_offset_t idx);
bool js_iter(
ant_t *js,
ant_value_t iterable,
bool (*callback)(
ant_t *js,
ant_value_t value,
void *udata
),
void *udata
);
const char *js_sym_desc(ant_value_t sym);
const char *js_sym_key(ant_value_t sym);
ant_value_t js_mksym_for(ant_t *, const char *key);
ant_value_t js_symbol_to_string(ant_t *js, ant_value_t sym);
ant_value_t js_get_sym(ant_t *, ant_value_t obj, ant_value_t sym);
ant_value_t js_get_symbol(ant_t *, ant_value_t obj, const char *key);
ant_value_t js_get_sym_with_receiver(ant_t *, ant_value_t obj, ant_value_t sym, ant_value_t receiver);
ant_value_t js_mkobj(ant_t *);
ant_value_t js_mkobj_with_inobj_limit(ant_t *, uint8_t inobj_limit);
ant_value_t js_newobj(ant_t *);
ant_value_t js_mkarr(ant_t *);
ant_value_t js_mkstr(ant_t *, const void *, size_t);
ant_value_t js_mkstr_permanent(ant_t *, const void *, size_t);
ant_value_t js_mkbigint(ant_t *, const char *digits, size_t len, bool negative);
ant_value_t js_mksym(ant_t *, const char *desc);
ant_value_t js_mksym_well_known(ant_t *, const char *desc);
ant_value_t js_mkfun_meta(const ant_cfunc_meta_t *meta);
ant_value_t js_mkfun_dyn(ant_cfunc_t fn);
ant_value_t js_heavy_mkfun(ant_t *js, ant_value_t (*fn)(ant_t *, ant_value_t *, int), ant_value_t data);
ant_value_t js_mkprop_fast(ant_t *js, ant_value_t obj, const char *key, size_t len, ant_value_t v);
ant_offset_t js_mkprop_fast_off(ant_t *js, ant_value_t obj, const char *key, size_t len, ant_value_t v);
#define js_mkfun(fn) ({ \
static const ant_cfunc_meta_t _ant_cfunc_meta = { (fn), NULL, 0, 0 }; \
js_mkfun_meta(&_ant_cfunc_meta); \
})
#define js_mkfun_arity(fn, arity) ({ \
static const ant_cfunc_meta_t _ant_cfunc_meta = { (fn), NULL, (arity), 0 }; \
js_mkfun_meta(&_ant_cfunc_meta); \
})
#define js_mkfun_flags(fn, flags) ({ \
static const ant_cfunc_meta_t _ant_cfunc_meta = { (fn), NULL, 0, (flags) }; \
js_mkfun_meta(&_ant_cfunc_meta); \
})
#define js_mkfun_arity_flags(fn, arity, flags) ({ \
static const ant_cfunc_meta_t _ant_cfunc_meta = { (fn), NULL, (arity), (flags) }; \
js_mkfun_meta(&_ant_cfunc_meta); \
})
void js_set(ant_t *, ant_value_t, const char *, ant_value_t);
void js_set_exact(ant_t *, ant_value_t, const char *, ant_value_t);
void js_set_sym(ant_t *, ant_value_t obj, ant_value_t sym, ant_value_t val);
void js_set_symbol(ant_t *, ant_value_t obj, const char *key, ant_value_t val);
void js_saveval(ant_t *js, ant_offset_t off, ant_value_t v);
void js_merge_obj(ant_t *, ant_value_t dst, ant_value_t src);
void js_arr_push(ant_t *, ant_value_t arr, ant_value_t val);
void js_set_proto(ant_value_t obj, ant_value_t proto);
void js_set_proto_wb(ant_t *js, ant_value_t obj, ant_value_t proto);
void js_set_proto_init(ant_value_t obj, ant_value_t proto);
ant_value_t js_propref_load(ant_t *js, ant_offset_t handle);
ant_value_t js_setprop(ant_t *, ant_value_t obj, ant_value_t key, ant_value_t val);
ant_value_t js_setprop_nonconfigurable(ant_t *, ant_value_t obj, const char *key, size_t keylen, ant_value_t val);
ant_value_t js_get_proto(ant_t *, ant_value_t obj);
ant_value_t js_get_ctor_proto(ant_t *, const char *name, size_t len);
ant_value_t js_tostring_val(ant_t *js, ant_value_t value);
uint8_t vtype(ant_value_t val);
size_t vdata(ant_value_t val);
bool js_is_constructor(ant_value_t value);
ant_object_t *js_obj_ptr(ant_value_t val);
ant_value_t js_obj_from_ptr(ant_object_t *obj);
double js_getnum(ant_value_t val);
char *js_getstr(ant_t *js, ant_value_t val, size_t *len);
const char *js_str(ant_t *, ant_value_t val);
const char *get_str_prop(ant_t *js, ant_value_t obj, const char *key, ant_offset_t klen, ant_offset_t *out_len);
typedef struct {
void *ctx;
ant_offset_t off;
} ant_iter_t;
typedef struct {
uint32_t slot;
bool is_symbol;
const char *str;
size_t key_len;
ant_offset_t sym_off;
} ant_iter_key_t;
ant_iter_t js_prop_iter_begin(ant_t *js, ant_value_t obj);
void js_prop_iter_end(ant_iter_t *iter);
bool js_prop_iter_next_key(ant_iter_t *iter, ant_iter_key_t *key_out, ant_value_t *value);
bool js_prop_iter_next(ant_iter_t *iter, const char **key, size_t *key_len, ant_value_t *value);
bool js_prop_iter_next_val(ant_iter_t *iter, ant_value_t *key_out, ant_value_t *value);
bool js_is_own_enumerable_prop(ant_t *js, ant_value_t source, ant_object_t *source_ptr, const ant_iter_key_t *key);
ant_value_t js_obj_to_func(ant_value_t obj);
ant_value_t js_obj_to_func_ex(ant_value_t obj, uint8_t flags);
ant_value_t js_mktypedarray(void *data);
void *js_gettypedarray(ant_value_t val);
void js_check_unhandled_rejections(ant_t *js);
void js_setup_import_meta(ant_t *js, const char *filename);
void js_process_promise_handlers(ant_t *js, ant_value_t promise);
void js_mark_promise_trigger_dequeued(ant_t *js, ant_value_t promise);
bool js_mark_promise_trigger_queued(ant_t *js, ant_value_t promise);
bool js_try_get_own_data_prop(ant_t *js, ant_value_t obj, const char *key, size_t key_len, ant_value_t *out);
void js_reject_promise(ant_t *js, ant_value_t promise, ant_value_t value);
void js_resolve_promise(ant_t *js, ant_value_t promise, ant_value_t value);
typedef ant_value_t (*js_getter_fn)(ant_t *js, ant_value_t obj, const char *key, size_t key_len);
typedef ant_value_t (*js_keys_fn)(ant_t *js, ant_value_t obj);
typedef bool (*js_setter_fn)(ant_t *js, ant_value_t obj, const char *key, size_t key_len, ant_value_t value);
typedef bool (*js_deleter_fn)(ant_t *js, ant_value_t obj, const char *key, size_t key_len);
typedef void (*js_finalizer_fn)(ant_t *js, ant_object_t *obj);
void js_set_getter(ant_value_t obj, js_getter_fn getter);
void js_set_setter(ant_value_t obj, js_setter_fn setter);
void js_set_deleter(ant_value_t obj, js_deleter_fn deleter);
void js_set_keys(ant_value_t obj, js_keys_fn keys);
void js_set_finalizer(ant_value_t obj, js_finalizer_fn fn);
ant_value_t js_get_slot(ant_value_t obj, internal_slot_t slot);
ant_value_t js_promise_assimilate_awaitable(ant_t *js, ant_value_t value);
ant_value_t js_promise_then(ant_t *js, ant_value_t promise, ant_value_t on_fulfilled, ant_value_t on_rejected);
void js_set_slot(ant_value_t obj, internal_slot_t slot, ant_value_t value);
void js_set_slot_wb(ant_t *, ant_value_t obj, internal_slot_t slot, ant_value_t value);
#endif

File Metadata

Mime Type
text/x-c
Expires
Sat, May 2, 8:30 AM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
541477
Default Alt Text
ant.h (9 KB)

Event Timeline