aboutsummaryrefslogtreecommitdiffstats
path: root/builtins.c
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2018-04-13 08:43:47 -0400
committerClyne Sullivan <tullivan99@gmail.com>2018-04-13 08:43:47 -0400
commit7f64da46ffe3b2e2a2b46a3dd2effc4f4f7d45da (patch)
tree4bc9fa6dc51a327823bcf508d4a64db3a4a2876d /builtins.c
parent14fd4de5d5f0a4e8e51fc2fc180d5ec4c92fa22c (diff)
arrays, implicit multiply
Diffstat (limited to 'builtins.c')
-rw-r--r--builtins.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/builtins.c b/builtins.c
index 73ce360..e3be39c 100644
--- a/builtins.c
+++ b/builtins.c
@@ -42,11 +42,11 @@
#define FUNC_SIG (uint32_t)-4
variable bopen = {
- 0, CFUNC, 0, {.p = (uint32_t)bracket_open}
+ 0, CFUNC, 0, 0, {.p = (uint32_t)bracket_open}
};
variable bclose = {
- 0, CFUNC, 0, {.p = (uint32_t)bracket_close}
+ 0, CFUNC, 0, 0, {.p = (uint32_t)bracket_close}
};
int bn_if(instance *it);
@@ -55,6 +55,7 @@ int bn_end(instance *it);
int bn_while(instance *it);
int bn_func(instance *it);
int bn_solve(instance *it);
+int bn_array(instance *it);
void iload_builtins(instance *it)
{
@@ -63,6 +64,7 @@ void iload_builtins(instance *it)
inew_cfunc(it, "while", bn_while);
inew_cfunc(it, "func", bn_func);
inew_cfunc(it, "solve", bn_solve);
+ inew_cfunc(it, "array", bn_array);
}
/**
@@ -187,3 +189,15 @@ int bn_solve(instance *it)
return 0;
}
+int bn_array(instance *it)
+{
+ variable *a = igetarg(it, 0);
+ int size = igetarg(it, 1)->value.f;
+ uint32_t i0 = a->value.p;
+ variable *array = calloc(size, sizeof(variable));
+ array[0].type = a->type;
+ array[0].value.p = i0;
+ a->array = size;
+ a->value.p = (uint32_t)array;
+ return 0;
+}