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);