diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-02-12 02:07:12 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-02-12 02:07:12 -0500 |
| commit | da1081387f2ae645fece8715481385973775941d (patch) | |
| tree | 1926b3a09e2c931ad28f8f2ceaa06ee5d293d809 | |
| parent | ade25eeb5a1f76ac1b7b82c5d4f82dcaeedcc3e4 (diff) | |
Fix doctests for declarations
| -rw-r--r-- | compile.c | 22 | ||||
| -rw-r--r-- | nextlang.h | 2 |
2 files changed, 18 insertions, 6 deletions
@@ -306,11 +306,23 @@ CORD compile(ast_t *ast) case DocTest: { auto test = Match(ast, DocTest); CORD src = heap_strn(test->expr->start, (size_t)(test->expr->end - test->expr->start)); - return CORD_asprintf( - "__test(%r, %r, %r);\n", - compile(WrapAST(test->expr, StringLiteral, .cord=src)), - compile(test->expr), - compile(WrapAST(test->expr, StringLiteral, .cord=test->output))); + if (test->expr->tag == Declare) { + auto decl = Match(test->expr, Declare); + return CORD_asprintf( + "__declare(%r, %r);\n__test(%r, %r, %r);\n", + compile(decl->var), compile(decl->value), + compile(WrapAST(test->expr, StringLiteral, .cord=src)), + compile(decl->var), + compile(WrapAST(test->expr, StringLiteral, .cord=test->output))); + } else if (test->expr->tag == Assign) { + errx(1, "Not implemented"); + } else { + return CORD_asprintf( + "__test(%r, %r, %r);\n", + compile(WrapAST(test->expr, StringLiteral, .cord=src)), + compile(test->expr), + compile(WrapAST(test->expr, StringLiteral, .cord=test->output))); + } } case FieldAccess: { auto f = Match(ast, FieldAccess); @@ -78,7 +78,7 @@ CORD as_cord(void *x, const char *fmt, ...); #define say(str) puts(CORD_to_const_char_star(__cord(str))) #define __test(src, expr, expected) do { \ CORD __result = __cord(expr); \ - say(CORD_catn(5, USE_COLOR ? "\x1b[33;1m>>>\x1b[0m " : ">>> ", src, USE_COLOR ? "\n\x1b[0;2m=\x1b[0;35m " : "\n=== ", __result, "\x1b[m")); \ + say(CORD_catn(5, USE_COLOR ? "\x1b[33;1m>>>\x1b[0m " : ">>> ", src, USE_COLOR ? "\n\x1b[0;2m=\x1b[0;35m " : "\n= ", __result, "\x1b[m")); \ if (expected && CORD_cmp(__result, expected)) { \ errx(1, "I expected:\n%s but got:\n%s", CORD_to_const_char_star(expected), CORD_to_const_char_star(__result)); \ } \ |
