diff options
| author | Mistivia <i@mistivia.com> | 2025-07-15 13:22:41 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-07-15 13:23:35 +0800 |
| commit | 4fdde0172948dfd875f58779b91cfa8e517acedf (patch) | |
| tree | 34cacc524d878cf8dd54c44cd1c1302983e5f5a9 /src/parser.c | |
| parent | dab2284cd5aae14bb166c90105a8e7b1bd290dcd (diff) | |
add stacktracec
Diffstat (limited to 'src/parser.c')
| -rw-r--r-- | src/parser.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parser.c b/src/parser.c index ec21b44..f21c90b 100644 --- a/src/parser.c +++ b/src/parser.c @@ -103,7 +103,9 @@ int Parser_getchar(Parser *ctx) { ctx->str_cursor++; return ret; } else if (ctx->parse_type == kParseFile) { - return fgetc(ctx->fp); + int ret = fgetc(ctx->fp); + if (ret == '\n') ctx->ctx->linenum++; + return ret; #ifdef WITHREADLINE } else if (ctx->parse_type == kParseReadline) { if (ctx->readline_eof) return EOF; @@ -240,6 +242,8 @@ static SExpRef build_list_from_vector(Interp *ctx, SExpRefVector elems) { SExpRef cur = *SExpRefVector_ref(&elems, i); ret = lisp_cons(ctx, cur, ret); } + Interp_ref(ctx, ret)->pair.filename = ctx->filename; + Interp_ref(ctx, ret)->pair.line = ctx->linenum; return ret; } @@ -247,9 +251,9 @@ ParseResult parse_list(Parser *parser) { SExpRefVector elems; SExpRefVector_init(&elems); ParseResult ret; - ret = expect_char(parser, '('); if (ParseResult_is_err(ret)) goto end; + int line = parser->ctx->linenum; skip_blank(parser); while (1) { if (Parser_peek(parser) == EOF) { |
