Mercurial > lbo > hg > ylisp
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);