#pragma once void add_finalizer(sl_cv *cv) sl_nonnull(1);void sweep_finalizers(void);void cv_autorelease(sl_cv *cv) sl_nonnull(1);void sweep_cv(sl_cv *cv) sl_nonnull(1);sl_v cvalue_(const sl_type *type, usize sz, bool nofinalizer) sl_nonnull(1);#define cvalue(type, sz) cvalue_(type, sz, false)#define cvalue_nofinalizer(type, sz) cvalue_(type, sz, true)void cvalue_cutdown(sl_v cv, usize nb);sl_v cvalue_from_ref(const sl_type *type, void *ptr, usize sz) sl_nonnull(1, 2);sl_v cvalue_str(usize sz);sl_v cvalue_static_cstr(const char *str) sl_nonnull(1) sl_cstr(1);sl_v str_from_cstr(const char *str) sl_nonnull(1) sl_cstr(1);bool isstr(sl_v v) sl_purefn;void cv_pin(sl_cv *cv) sl_nonnull(1);sl_v size_wrap(usize sz);u32int tou32(sl_v n);u64int tou64(sl_v n);usize tosize(sl_v n);soffset tooffset(sl_v n);bool isarr(sl_v v) sl_purefn;void cvalue_arr_init(const sl_type *ft, sl_v arg, void *dest) sl_nonnull(1, 3) sl_wr(3);usize cvalue_arrlen(sl_v v) sl_purefn;usize ctype_sizeof(sl_v type);u8int *to_sized_ptr(sl_v v, usize *psz, usize *pesz, u64int *tmp) sl_nonnull(2, 3, 4) sl_returns_nonnull;sl_v cvalue_relocate(sl_v v);sl_v cvalue_compare(sl_v a, sl_v b, int bound, bool eq) sl_purefn;sl_v cvalue_arr_aref(sl_v *args) sl_nonnull(1);sl_v cvalue_arr_aset(sl_v *args) sl_nonnull(1);sl_v mk_cbuiltin(const char *name, sl_builtinfn f) sl_nonnull(1) sl_cstr(1);sl_v return_from_u64(u64int Uaccum);sl_v return_from_s64(s64int Saccum);sl_v return_from_p32(u32int p);sl_v return_from_p64(u32int p);sl_v sl_add_any(sl_v *args, u32int nargs) sl_nonnull(1) sl_rd(1, 2);sl_v sl_neg(sl_v n);sl_v sl_mul_any(sl_v *args, u32int nargs) sl_nonnull(1) sl_rd(1, 2);bool num_to_ptr(sl_v a, sl_fx *pi, sl_numtype *pt, void **pp) sl_nonnull(2, 3, 4);sl_v sl_div2(sl_v a, sl_v b);sl_v sl_idiv2(sl_v a, sl_v b);void cvalues_init(void); sl_v mk_s8(s8int n);sl_v mk_u8(u8int n);sl_v mk_s16(s16int n);sl_v mk_u16(u16int n);sl_v mk_s32(s32int n);sl_v mk_u32(u32int n);sl_v mk_s64(s64int n);sl_v mk_u64(u64int n);sl_v mk_p32(u32int n);sl_v mk_p64(u64int n);sl_v mk_bignum(mpint *n) sl_nonnull(1);sl_v mk_f32(float n);sl_v mk_f64(double n); usize llength(sl_v v) sl_purefn; #if defined(BITS64)#define NWORDS(sz) (((sz)+7)>>3)#define mk_ptr(n) mk_p64(n)#else#define NWORDS(sz) (((sz)+3)>>2)#define mk_ptr(n) mk_p32(n)#endif
#pragma once
void add_finalizer(sl_cv *cv) sl_nonnull(1);
void sweep_finalizers(void);
void cv_autorelease(sl_cv *cv) sl_nonnull(1);
void sweep_cv(sl_cv *cv) sl_nonnull(1);
sl_v cvalue_(const sl_type *type, usize sz, bool nofinalizer) sl_nonnull(1);
#define cvalue(type, sz) cvalue_(type, sz, false)
#define cvalue_nofinalizer(type, sz) cvalue_(type, sz, true)
void cvalue_cutdown(sl_v cv, usize nb);
sl_v cvalue_from_ref(const sl_type *type, void *ptr, usize sz) sl_nonnull(1, 2);
sl_v cvalue_str(usize sz);
sl_v cvalue_static_cstr(const char *str) sl_nonnull(1) sl_cstr(1);
sl_v str_from_cstr(const char *str) sl_nonnull(1) sl_cstr(1);
bool isstr(sl_v v) sl_purefn;
void cv_pin(sl_cv *cv) sl_nonnull(1);
sl_v size_wrap(usize sz);
u32int tou32(sl_v n);
u64int tou64(sl_v n);
usize tosize(sl_v n);
soffset tooffset(sl_v n);
bool isarr(sl_v v) sl_purefn;
void cvalue_arr_init(const sl_type *ft, sl_v arg, void *dest) sl_nonnull(1, 3) sl_wr(3);
usize cvalue_arrlen(sl_v v) sl_purefn;
usize ctype_sizeof(sl_v type);
u8int *to_sized_ptr(sl_v v, usize *psz, usize *pesz, u64int *tmp) sl_nonnull(2, 3, 4) sl_returns_nonnull;
sl_v cvalue_relocate(sl_v v);
sl_v cvalue_compare(sl_v a, sl_v b, int bound, bool eq) sl_purefn;
sl_v cvalue_arr_aref(sl_v *args) sl_nonnull(1);
sl_v cvalue_arr_aset(sl_v *args) sl_nonnull(1);
sl_v mk_cbuiltin(const char *name, sl_builtinfn f) sl_nonnull(1) sl_cstr(1);
sl_v return_from_u64(u64int Uaccum);
sl_v return_from_s64(s64int Saccum);
sl_v return_from_p32(u32int p);
sl_v return_from_p64(u32int p);
sl_v sl_add_any(sl_v *args, u32int nargs) sl_nonnull(1) sl_rd(1, 2);
sl_v sl_neg(sl_v n);
sl_v sl_mul_any(sl_v *args, u32int nargs) sl_nonnull(1) sl_rd(1, 2);
bool num_to_ptr(sl_v a, sl_fx *pi, sl_numtype *pt, void **pp) sl_nonnull(2, 3, 4);
sl_v sl_div2(sl_v a, sl_v b);
sl_v sl_idiv2(sl_v a, sl_v b);
void cvalues_init(void);
sl_v mk_s8(s8int n);
sl_v mk_u8(u8int n);
sl_v mk_s16(s16int n);
sl_v mk_u16(u16int n);
sl_v mk_s32(s32int n);
sl_v mk_u32(u32int n);
sl_v mk_s64(s64int n);
sl_v mk_u64(u64int n);
sl_v mk_p32(u32int n);
sl_v mk_p64(u64int n);
sl_v mk_bignum(mpint *n) sl_nonnull(1);
sl_v mk_f32(float n);
sl_v mk_f64(double n);
usize llength(sl_v v) sl_purefn;
#if defined(BITS64)
#define NWORDS(sz) (((sz)+7)>>3)
#define mk_ptr(n) mk_p64(n)
#else
#define NWORDS(sz) (((sz)+3)>>2)
#define mk_ptr(n) mk_p32(n)
#endif