aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPreston Pan <preston@nullring.xyz>2024-01-22 13:38:32 -0800
committerPreston Pan <preston@nullring.xyz>2024-01-22 13:38:32 -0800
commitab4eaabe940c1593ac060d91c652fcdb587786c0 (patch)
tree91589c287408cc94135885cd8ac9e811e492263d /src
parent69b443d4de3dd0217968fd4482abc13b8988116b (diff)
fix curry
Diffstat (limited to 'src')
-rw-r--r--src/builtins.c34
-rw-r--r--src/stem.c12
2 files changed, 15 insertions, 31 deletions
diff --git a/src/builtins.c b/src/builtins.c
index bb18bb1..4714c23 100644
--- a/src/builtins.c
+++ b/src/builtins.c
@@ -25,9 +25,8 @@ extern parser_t *PARSER;
extern ht_t *FLIT;
extern ht_t *OBJ_TABLE;
-/* TODO: rotr, rotl, dip, map, filter, errstr, join (for strings), switch
- * (for quotes), split (split array, string, word into two), del (deleting
- * entries from quotes, strings, words) */
+/* TODO: switch (for quotes), del (deleting entries from quotes, strings, words)
+ */
/* taken from stackoverflow */
char *get_line(FILE *f) {
@@ -400,7 +399,7 @@ void curry(value_t *v) {
return;
}
- array_append(v2->quote, v1);
+ array_curry(v2->quote, v1);
array_append(STACK, v2);
}
@@ -567,33 +566,6 @@ void stemlen(value_t *v) {
array_append(STACK, retval);
}
-/* void dip(value_t *v) { */
-/* value_t *v2 = array_pop(STACK); */
-/* if (v2 == NULL) { */
-/* eval_error("EMPTY STACK"); */
-/* return; */
-/* } */
-/* value_t *v1 = array_pop(STACK); */
-/* if (v1 == NULL) { */
-/* array_append(STACK, v2); */
-/* eval_error("EMPTY STACK"); */
-/* return; */
-/* } */
-
-/* if (v2->type == VQUOTE) { */
-/* array_append(EVAL_STACK, v1); */
-/* array_append(EVAL_STACK, v2); */
-/* for (int i = 0; i < v2->quote->size; i++) { */
-/* eval(value_copy(v2->quote->items[i])); */
-/* } */
-/* value_free(array_pop(EVAL_STACK)); */
-/* array_pop(EVAL_STACK); */
-/* } else { */
-/* eval(v2); */
-/* } */
-/* array_append(STACK, v1); */
-/* } */
-
void dip(value_t *v) {
value_t *v2 = array_pop(STACK);
if (v2 == NULL) {
diff --git a/src/stem.c b/src/stem.c
index 57905cb..5c2e379 100644
--- a/src/stem.c
+++ b/src/stem.c
@@ -39,6 +39,18 @@ void array_append(array_t *a, value_t *v) {
a->size++;
}
+void array_curry(array_t *a, value_t *v) {
+ if (a->size >= a->capacity - 3) {
+ a->capacity = a->capacity * 2;
+ a->items = realloc(a->items, a->capacity * sizeof(value_t *));
+ }
+ for (int i = a->size - 1; i >= 0; i--) {
+ a->items[i + 1] = a->items[i];
+ }
+ a->items[0] = v;
+ a->size++;
+}
+
value_t *array_pop(array_t *a) {
if (a->size > 0) {
value_t *v = a->items[a->size - 1];