changeset 161:72a52494df50

built-ins: Fix type error for arithmetic operations
author Lewin Bormann <lbo@spheniscida.de>
date Tue, 03 Sep 2019 17:00:26 +0200
parents 8b04d8628314
children f6c1d15232ee
files src/built-ins.c src/eval_test.c
diffstat 2 files changed, 5 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/built-ins.c	Tue Sep 03 16:55:29 2019 +0200
+++ b/src/built-ins.c	Tue Sep 03 17:00:26 2019 +0200
@@ -220,7 +220,7 @@
     for (size_t i = 1; i < plus_list->len; i++) {
         yexpr_t* expr = YVEC_AT(plus_list, i, yexpr_t);
         yexpr_t evald = yeval(state, expr, false);
-        if (evald.typ != YEXPR_NUMBER) TYPEFAIL(PLUS, *expr, _pattern);
+        if (evald.typ != YEXPR_NUMBER) TYPEFAIL(PLUS, evald, _pattern);
         result += evald.value.n;
         yexpr_destroy(&evald);
     }
@@ -249,7 +249,7 @@
     for (size_t i = 1; i < minus_list->len; i++) {
         yexpr_t* expr = YVEC_AT(minus_list, i, yexpr_t);
         yexpr_t evald = yeval(state, expr, false);
-        if (evald.typ != YEXPR_NUMBER) TYPEFAIL(MINUS, *expr, _pattern);
+        if (evald.typ != YEXPR_NUMBER) TYPEFAIL(MINUS, evald, _pattern);
         if (first) {
             result += evald.value.n;
             first = false;
@@ -282,7 +282,7 @@
     for (size_t i = 1; i < times_list->len; i++) {
         yexpr_t* expr = YVEC_AT(times_list, i, yexpr_t);
         yexpr_t evald = yeval(state, expr, false);
-        if (evald.typ != YEXPR_NUMBER) TYPEFAIL(MULT, *expr, _pattern);
+        if (evald.typ != YEXPR_NUMBER) TYPEFAIL(MULT, evald, _pattern);
         result *= evald.value.n;
         yexpr_destroy(&evald);
     }
--- a/src/eval_test.c	Tue Sep 03 16:55:29 2019 +0200
+++ b/src/eval_test.c	Tue Sep 03 17:00:26 2019 +0200
@@ -113,7 +113,7 @@
 
     ystr_t input = ystr_new(
             "(defn f (a) (+ a 1))"
-            "(g f)");
+            "(f g)");
 
     yexpr_t program = yexpr_new();
     ystr_t error = ystr_new(NULL);
@@ -123,7 +123,7 @@
     yeval_state_t state;
     state.call_stack = YVEC_NEW(NULL, 4, yexpr_t);
     yexpr_t result = yeval_list_return_last(&state, &program.value.list, 0);
-    assert(YEXPR_LIST == result.typ && YEXPR_EXCEPTION == YVEC_AT(&result.value.list, 0, yexpr_t)->typ);
+    assert(YEXPR_EXCEPTION == result.typ);
 
     yexpr_destroy(&program);
     yvec_destroy(&state.call_stack);