annotate runtime/progfoot.inc @ 40:927fd7911a01

Add append message to array
author Mike Pavone <pavone@retrodev.com>
date Wed, 11 Jul 2012 19:17:24 -0700
parents e7be612fd3ae
children 9dd370530f69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
1
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
2 object * make_array(uint32_t num_els, ...)
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
3 {
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
4 va_list els;
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
5 int i;
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
6 array * arr = malloc(sizeof(array));
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
7 arr->header.meta = &array_meta;
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
8 arr->header.parent = NULL;
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
9 arr->storage = arr->size = num_els;
40
927fd7911a01 Add append message to array
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
10 if (num_els < 4) {
927fd7911a01 Add append message to array
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
11 arr->storage = 4;
927fd7911a01 Add append message to array
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
12 }
927fd7911a01 Add append message to array
Mike Pavone <pavone@retrodev.com>
parents: 38
diff changeset
13 arr->data = malloc(sizeof(object *) * arr->storage);
38
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
14 va_start(els, num_els);
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
15 for (i = 0; i < num_els; i++)
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
16 arr->data[i] = va_arg(els, object *);
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
17 va_end(els);
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
18 return &(arr->header);
e7be612fd3ae Very basic array support
Mike Pavone <pavone@retrodev.com>
parents: 35
diff changeset
19 }
31
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 int main(int argc, char ** argv)
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 {
35
bf5e88f6419d Use a function/method call strategy that actually works
Mike Pavone <pavone@retrodev.com>
parents: 31
diff changeset
23 object * ret = mcall(METHOD_ID_MAIN, 1, mainModule());
31
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 if (ret->meta == &obj_int32_meta) {
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 obj_int32 * reti32 = (obj_int32 *) ret;
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 printf("%d\n", reti32->num);
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 } else if(ret->meta == &lambda_meta) {
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28 puts("returned lambda????");
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 } else {
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 int i = 0;
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 for(; i < 16; ++i) {
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 if (ret->meta->meth_lookup[i] != &no_impl) {
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 printf("slot %d is set\n", i);
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 }
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 }
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 }
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 return 0;
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 }
668f533e5284 Add initial version of C backend
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39