aboutsummaryrefslogtreecommitdiff
path: root/src/parse.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-03-25 15:40:59 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-03-25 15:40:59 -0400
commit1f9147187d66e95a0ffedd4d5595ec98646b5fe1 (patch)
tree14281e5cbde8e15fae63953b72844fb1a11d6f73 /src/parse.c
parentd88d8648dc7802fbeac2f28dc5f2ef8fdfe1a9e4 (diff)
Make docstring tests use an actual expression AST instead of text
matching
Diffstat (limited to 'src/parse.c')
-rw-r--r--src/parse.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/src/parse.c b/src/parse.c
index 9ad0db34..cc716578 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -2418,22 +2418,14 @@ PARSER(parse_doctest) {
spaces(&pos);
ast_t *expr = expect(ctx, start, &pos, parse_statement, "I couldn't parse the expression for this doctest");
whitespace(&pos);
- const char* output = NULL;
+ ast_t *expected = NULL;
if (match(&pos, "=")) {
spaces(&pos);
- const char *output_start = pos,
- *output_end = pos + strcspn(pos, "\r\n");
- if (output_end <= output_start)
- parser_err(ctx, output_start, output_end, "You're missing expected output here");
- int64_t trailing_spaces = 0;
- while (output_end - trailing_spaces - 1 > output_start && (output_end[-trailing_spaces-1] == ' ' || output_end[-trailing_spaces-1] == '\t'))
- ++trailing_spaces;
- output = GC_strndup(output_start, (size_t)((output_end - output_start) - trailing_spaces));
- pos = output_end;
+ expected = expect(ctx, start, &pos, parse_extended_expr, "I couldn't parse the expected expression here");
} else {
pos = expr->end;
}
- return NewAST(ctx->file, start, pos, DocTest, .expr=expr, .output=output);
+ return NewAST(ctx->file, start, pos, DocTest, .expr=expr, .expected=expected);
}
PARSER(parse_say) {