From efa510e6b58ce13c53e94f13a5be0007240e9dcc Mon Sep 17 00:00:00 2001 From: Mel Date: Wed, 9 Jul 2025 04:46:58 +0200 Subject: Display human-readable, informative parser error messages w/ source snippet Signed-off-by: Mel --- boot/lex.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'boot/lex.c') diff --git a/boot/lex.c b/boot/lex.c index c705f26..2efb33d 100644 --- a/boot/lex.c +++ b/boot/lex.c @@ -30,6 +30,12 @@ span_new(Pos start, Pos end) return (struct Span){ .start = start, .end = end }; } +struct Span +span_empty(void) +{ + return (struct Span){ 0, 0 }; +} + struct Span span_width(Pos start, uint width) { @@ -74,6 +80,13 @@ span_is_empty(struct Span span) return span_equals(span, (struct Span){ 0, 0 }); } +uint +span_length(struct Span span) +{ + uint length = span.end - span.start; + return length == 0 ? 1 : length; +} + // a cursor position placed within a text file. struct Cursor { @@ -81,6 +94,18 @@ struct Cursor uint column; }; +struct Cursor +cursor_new(uint line, uint column) +{ + return (struct Cursor){ .line = line, .column = column }; +} + +struct Cursor +cursor_empty(void) +{ + return cursor_new(0, 0); +} + // what kind of token is it? enum Token_Kind { -- cgit 1.4.1