Mercurial > repos > tabletprog
diff runtime/progfoot.inc @ 58:7b454d100dc8
Add length method to array. Pass array of arguments to main method. Initialize parent field of environment struct for closures
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 14 Jul 2012 00:35:50 -0700 |
parents | 2a9c6eed0c70 |
children | abc6f3d644a4 |
line wrap: on
line diff
--- a/runtime/progfoot.inc Sat Jul 14 00:00:24 2012 -0700 +++ b/runtime/progfoot.inc Sat Jul 14 00:35:50 2012 -0700 @@ -1,8 +1,6 @@ -object * make_array(uint32_t num_els, ...) +array * alloc_array(uint32_t num_els) { - va_list els; - int i; array * arr = malloc(sizeof(array)); arr->header.meta = &array_meta; arr->header.parent = NULL; @@ -11,6 +9,13 @@ arr->storage = 4; } arr->data = malloc(sizeof(object *) * arr->storage); +} + +object * make_array(uint32_t num_els, ...) +{ + va_list els; + int i; + array * arr = alloc_array(num_els); va_start(els, num_els); for (i = 0; i < num_els; i++) arr->data[i] = va_arg(els, object *); @@ -30,7 +35,16 @@ int main(int argc, char ** argv) { - object * ret = mcall(METHOD_ID_MAIN, 1, mainModule()); + int i; + string * arg; + array * arr = alloc_array(argc); + for (i = 0; i < argc; ++i) { + arg = (string *)make_object(&string_meta, NULL, 0); + arg->data = argv[i]; + arg->bytes = arg->length = strlen(argv[i]); + arr->data[i] = &(arg->header); + } + object * ret = mcall(METHOD_ID_MAIN, 2, mainModule(), &(arr->header)); if (ret->meta == &obj_int32_meta) { obj_int32 * reti32 = (obj_int32 *) ret; return reti32->num;