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));