Mercurial > repos > tabletprog
comparison runtime/progfoot.inc @ 170:18598163e3ef
Add linked list implementation and cons operator
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 13 Aug 2013 21:58:03 -0700 |
parents | 25bc8a5ab41e |
children |
comparison
equal
deleted
inserted
replaced
153:075b1e71feff | 170:18598163e3ef |
---|---|
14 | 14 |
15 object * make_array(uint32_t num_els, ...) | 15 object * make_array(uint32_t num_els, ...) |
16 { | 16 { |
17 va_list els; | 17 va_list els; |
18 int i; | 18 int i; |
19 array * arr = alloc_array(num_els); | 19 array * arr = alloc_array(num_els); |
20 va_start(els, num_els); | 20 va_start(els, num_els); |
21 for (i = 0; i < num_els; i++) | 21 for (i = 0; i < num_els; i++) |
22 arr->data[i] = va_arg(els, object *); | 22 arr->data[i] = va_arg(els, object *); |
23 va_end(els); | 23 va_end(els); |
24 return &(arr->header); | 24 return &(arr->header); |
25 } | |
26 | |
27 object * make_list(uint32_t num_els, ...) | |
28 { | |
29 va_list els; | |
30 int i; | |
31 object * cur = mcall(METHOD_ID_EMPTY, 1, module_list); | |
32 va_start(els, num_els); | |
33 for (i = 0; i < num_els; i++) | |
34 cur = mcall(METHOD_ID_CONS, 2, cur, va_arg(els, object *)); | |
35 va_end(els); | |
36 return cur; | |
25 } | 37 } |
26 | 38 |
27 object * make_lambda(void * env, closure_func func) | 39 object * make_lambda(void * env, closure_func func) |
28 { | 40 { |
29 lambda * ret = GC_MALLOC(sizeof(lambda)); | 41 lambda * ret = GC_MALLOC(sizeof(lambda)); |