X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=libextl%2Fluaextl.h;h=f0160887df1d164bfbc9c01f4dc6f900a8aeea68;hb=ae4260bb64817c11f9a7140324cd3e3ba113e297;hp=28cfde86d0a02c5a863e54178f935fbc03177642;hpb=8366314611bf30a0f31d25bf5f5023186fa87692;p=ion3.git diff --git a/libextl/luaextl.h b/libextl/luaextl.h index 28cfde8..f016088 100644 --- a/libextl/luaextl.h +++ b/libextl/luaextl.h @@ -28,6 +28,7 @@ * t: table * f: function (c or lua) * v: void + * a: ExtlAny */ typedef int ExtlTab; @@ -43,6 +44,11 @@ typedef union{ ExtlTab t; } ExtlL2Param; +typedef struct{ + char type; + ExtlL2Param value; +} ExtlAny; + typedef bool ExtlL2CallHandler(void (*fn)(), ExtlL2Param *in, ExtlL2Param *out); @@ -56,6 +62,7 @@ typedef struct{ ExtlL2CallHandler *l2handler; bool safe; bool untraced; + bool registered; } ExtlExportedFnSpec; typedef struct ExtlSafelist_struct{ @@ -87,6 +94,7 @@ extern bool extl_table_get_vararg(ExtlTab ref, char itype, char type, va_list *args); extern bool extl_table_get(ExtlTab ref, char itype, char type, ...); +extern bool extl_table_gets_a(ExtlTab ref, const char *entry, ExtlAny *ret); extern bool extl_table_gets_o(ExtlTab ref, const char *entry, Obj **ret); extern bool extl_table_gets_i(ExtlTab ref, const char *entry, int *ret); extern bool extl_table_gets_d(ExtlTab ref, const char *entry, double *ret); @@ -96,6 +104,7 @@ extern bool extl_table_gets_f(ExtlTab ref, const char *entry, ExtlFn *ret); extern bool extl_table_gets_t(ExtlTab ref, const char *entry, ExtlTab *ret); extern int extl_table_get_n(ExtlTab ref); +extern bool extl_table_geti_a(ExtlTab ref, int entry, ExtlAny *ret); extern bool extl_table_geti_o(ExtlTab ref, int entry, Obj **ret); extern bool extl_table_geti_i(ExtlTab ref, int entry, int *ret); extern bool extl_table_geti_d(ExtlTab ref, int entry, double *ret); @@ -109,6 +118,7 @@ extern bool extl_table_set_vararg(ExtlTab ref, char itype, char type, va_list *args); extern bool extl_table_set(ExtlTab ref, char itype, char type, ...); +extern bool extl_table_sets_a(ExtlTab ref, const char *entry, const ExtlAny *ret); extern bool extl_table_sets_o(ExtlTab ref, const char *entry, Obj *val); extern bool extl_table_sets_i(ExtlTab ref, const char *entry, int val); extern bool extl_table_sets_d(ExtlTab ref, const char *entry, double val); @@ -117,6 +127,7 @@ extern bool extl_table_sets_s(ExtlTab ref, const char *entry, const char *val); extern bool extl_table_sets_f(ExtlTab ref, const char *entry, ExtlFn val); extern bool extl_table_sets_t(ExtlTab ref, const char *entry, ExtlTab val); +extern bool extl_table_seti_a(ExtlTab ref, int entry, const ExtlAny *ret); extern bool extl_table_seti_o(ExtlTab ref, int entry, Obj *val); extern bool extl_table_seti_i(ExtlTab ref, int entry, int val); extern bool extl_table_seti_d(ExtlTab ref, int entry, double val); @@ -133,6 +144,12 @@ extern bool extl_table_clear(ExtlTab ref, char itype, ...); extern bool extl_table_clears(ExtlTab ref, const char *entry); extern bool extl_table_cleari(ExtlTab ref, int entry); +/* Table/iterate */ + +typedef bool ExtlIterFn(ExtlAny k, ExtlAny v, void *d); + +extern void extl_table_iter(ExtlTab ref, ExtlIterFn *fn, void *d); + /* Call */ extern void extl_protect(ExtlSafelist *sl);