From 32c02216ce3df45004a933cc16745880841262e5 Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Sat, 27 Mar 2021 00:10:49 +0300 Subject: Attempt to make types more generic. Thing doesn't work now. --- src/csxbind.c | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/csxbind.c (limited to 'src/csxbind.c') diff --git a/src/csxbind.c b/src/csxbind.c new file mode 100644 index 0000000..8e31585 --- /dev/null +++ b/src/csxbind.c @@ -0,0 +1,143 @@ +#include "csxbind.h" + +#include + + +char *name; +char *pair; +char *str; +char *_int; +char *base; +char *fn; +char *sx; +char *set; +char *_isset; +char *sethead; +char *settail; +char *head; +char *tail; +char *qt; +char *same; +char *type; +char *_do; +char *_if; +char *_plus; +char *_star; +char *neg; +char *div; +char *mod; +char *_less; +char *_more; +char *out; +char *in; +char *len; +char *run; +char *context; +char *newcontext; +char *_exit; + + +static csxi csx; +static int initialised = 0; + + +void init() +{ + initialised = 1; + csx_init(&csx); + csxbasenames *n = &csx.basenames; + name = n->name; + pair = n->pair; + str = n->str; + _int = n->_int; + base = n->base; + fn = n->fn; + sx = n->sx; + set = n->set; + _isset = n->_isset; + sethead = n->sethead; + settail = n->settail; + head = n->tail; + tail = n->tail; + qt = n->qt; + same = n->same; + type = n->type; + _do = n->_do; + _if = n->_if; + _plus = n->_plus; + _star = n->_star; + neg = n->neg; + div = n->div; + mod = n->mod; + _less = n->_less; + _more = n->_more; + out = n->out; + in = n->in; + len = n->len; + run = n->run; + context = n->context; + newcontext = n->newcontext; + _exit = n->_exit; +} + + +csxpair *L(void *head, ...) +{ + va_list args; + csxpair *res; + csxpair **p; + if (!head) return csx.null; + res = csx_pair(&csx, head, csx.null); + p = (csxpair **)&res->tail; + va_start(args, head); + for (head = va_arg(args, void *); head; head = va_arg(args, void *)) { + *p = csx_pair(&csx, head, csx.null); + p = (csxpair **)&(*p)->tail; + } + va_end(args); + return res; +} +csxpair *D(void *a, void *b, void *c, ...) +{ + va_list args; + csxpair *res; + csxpair **p; + if (!c) return csx_pair(&csx, a, b); + res = csx_pair(&csx, a, b); + p = (csxpair **)&res->tail; + *p = csx_pair(&csx, *p, c); + p = (csxpair **)&(*p)->tail; + va_start(args, c); + for (c = va_arg(args, void *); c; c = va_arg(args, void *)) { + *p = csx_pair(&csx, *p, c); + p = (csxpair **)&(*p)->tail; + } + va_end(args); + return res; +} +csxpair *P(void *head, void *tail) +{ + return csx_pair(&csx, head, tail); +} +char *N(const char *name) +{ + return csx_name(&csx, name); +} +char *S(const char *str) +{ + return csx_str(&csx, str); +} +int *I(int num) +{ + return csx_int(&csx, num); +} + +void *R(void *expression) +{ + return csx_run(&csx, expression); +} + +csxbase *newbase(csxbase base) +{ + return csx_base(&csx, base); +} -- cgit v1.2.3