Mercurial > lbo > hg > ylisp
changeset 118:da9989546b1b
built-ins: Use new preprocessing code to resolve built-ins
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 31 Aug 2019 21:30:48 +0200 |
parents | b9ef95fb35dc |
children | af8d59c76155 |
files | src/built-ins_test.c |
diffstat | 1 files changed, 13 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/built-ins_test.c Sat Aug 31 21:30:28 2019 +0200 +++ b/src/built-ins_test.c Sat Aug 31 21:30:48 2019 +0200 @@ -2,6 +2,7 @@ #include <src/atom.h> #include <src/parse.h> +#include <src/preprocess.h> #include <src/value.h> void test_builtin_translate(void) { @@ -38,7 +39,7 @@ yexpr_t* for_expr = YVEC_AT(&program.value.list, 0, yexpr_t); assert(for_expr->typ == YEXPR_LIST); - assert(ybuiltin_translate(YVEC_AT(&for_expr->value.list, 0, yexpr_t))); + ypreprocess_resolve_builtins(&program); yeval_state_t state = {.call_stack = YVEC_NEW(NULL, 0, yexpr_t)}; YVEC_PUSH(&state.call_stack, for_expr); @@ -86,7 +87,7 @@ } void test_builtin_for_noresult(void) { - fprintf(stderr, "test_builtin_for_complex ============\n"); + fprintf(stderr, "test_builtin_for_noresult ============\n"); ystr_t input = ystr_new("(for loopvar (1 2 3) (undef))"), error = ystr_new(NULL); @@ -95,9 +96,7 @@ yexpr_t* for_expr = YVEC_AT(&program.value.list, 0, yexpr_t); assert(for_expr->typ == YEXPR_LIST); - assert(ybuiltin_translate(YVEC_AT(&for_expr->value.list, 0, yexpr_t))); - assert(ybuiltin_translate(YVEC_AT( - &YVEC_AT(&for_expr->value.list, 3, yexpr_t)->value.list, 0, yexpr_t))); + ypreprocess_resolve_builtins(&program); yexpr_debug(for_expr); yeval_state_t state = {.call_stack = YVEC_NEW(NULL, 0, yexpr_t)}; @@ -184,10 +183,9 @@ ystr_t input = ystr_new("(let my-var (1 2 3))"), error = ystr_new(NULL); yexpr_t program = yexpr_new(), *let_expr; assert(yparse_str(&input, &program, &error)); - let_expr = YVEC_AT(&program.value.list, 0, yexpr_t); + ypreprocess_resolve_builtins(&program); - // Replace id:<"let"> with builtin. - yexpr_set_builtin(YVEC_AT(&let_expr->value.list, 0, yexpr_t), YBUILTIN_LET); + let_expr = YVEC_AT(&program.value.list, 0, yexpr_t); yeval_state_t state; YVEC_INIT(&state.call_stack, 4, yexpr_t); @@ -216,26 +214,25 @@ fprintf(stderr, "test_builtin_let_recall ============\n"); ystr_t input = ystr_new( - "(let my-var ('a 'b) (1 2 3))" + "(let my-var ('a 'b) \"cd\")" "(my-var)"); ystr_t error = ystr_new(NULL); - yexpr_t program = yexpr_new(), *let_expr; + yexpr_t program = yexpr_new(); assert(yparse_str(&input, &program, &error)); assert(YEXPR_LIST == program.typ && 2 == program.value.list.len); - let_expr = YVEC_AT(&program.value.list, 0, yexpr_t); - // Replace id:<"let"> with builtin. - yexpr_set_builtin(YVEC_AT(&let_expr->value.list, 0, yexpr_t), YBUILTIN_LET); + ypreprocess_resolve_builtins(&program); yeval_state_t state = { .call_stack = YVEC_NEW(NULL, 0, yexpr_t) }; // Evaluate whole program yexpr_t result = yeval_list_return_last(&state, &program.value.list, 0); - // Check that result is ((1 2 3)) + // Check that result is "cd" assert(YEXPR_LIST == result.typ && 1 == result.value.list.len); yexpr_t* inner = YVEC_AT(&result.value.list, 0, yexpr_t); - assert(YEXPR_LIST == inner->typ); - assert(3 == YVEC_AT(&inner->value.list, 2, yexpr_t)->value.n); + assert(YEXPR_STRING == inner->typ); + yexpr_debug(inner); + assert(0 == ystr_cmp_str(&inner->value.str, "cd")); yvec_destroy(&state.call_stack); yexpr_destroy(&result);