aboutsummaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-02-12 02:07:12 -0500
committerBruce Hill <bruce@bruce-hill.com>2024-02-12 02:07:12 -0500
commitda1081387f2ae645fece8715481385973775941d (patch)
tree1926b3a09e2c931ad28f8f2ceaa06ee5d293d809 /compile.c
parentade25eeb5a1f76ac1b7b82c5d4f82dcaeedcc3e4 (diff)
Fix doctests for declarations
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/compile.c b/compile.c
index 2b4c39e4..3170369d 100644
--- a/compile.c
+++ b/compile.c
@@ -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);