diff options
| author | Mel <mel@rnrd.eu> | 2025-07-10 00:27:39 +0200 |
|---|---|---|
| committer | Mel <mel@rnrd.eu> | 2025-07-10 00:27:39 +0200 |
| commit | 4ef58f4d2b7ea810ab4d5db08fe45216f6597336 (patch) | |
| tree | 57d9f00a74dabfda6f221b97579cd78f35641182 /boot/lex.c | |
| parent | 961ca5fb2c5aaf45b81c154874e503564afc2290 (diff) | |
| download | catskill-4ef58f4d2b7ea810ab4d5db08fe45216f6597336.tar.zst catskill-4ef58f4d2b7ea810ab4d5db08fe45216f6597336.zip | |
Display causing tokens lexeme directly from source for error messages
Signed-off-by: Mel <mel@rnrd.eu>
Diffstat (limited to 'boot/lex.c')
| -rw-r--r-- | boot/lex.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/boot/lex.c b/boot/lex.c index 2efb33d..594905f 100644 --- a/boot/lex.c +++ b/boot/lex.c @@ -192,6 +192,8 @@ enum Token_Kind TOKEN_ASSIGN_RIGHT_SHIFT, }; +// returns a string representation of the token kind. +// non-human-friendly, for debugging purposes. const ascii* token_kind_to_string(enum Token_Kind kind) { @@ -454,8 +456,9 @@ token_can_begin_declaration(const struct Token* t) return token_is(t, TOKEN_WORD_VAR) || token_is(t, TOKEN_WORD_LET); } +// prints non-human-friendly representation of the token kind, along with its value, if applicable. void -token_print(const struct Token* t) +token_debug_print(const struct Token* t) { printf("%s", token_kind_to_string(t->kind)); @@ -472,6 +475,13 @@ token_print(const struct Token* t) } } +// get a view of the token's lexeme in the source file. +struct String_View +token_lexeme(const struct Token* t, struct String source) +{ + return string_substring(source, t->span.start, t->span.end); +} + bool ascii_in_range(ascii c, ascii from, ascii to) { |
