aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2025-05-08 14:56:58 +0200
committerHimbeer <himbeer@disroot.org>2025-05-08 14:56:58 +0200
commit26f15aea436f136575a96af2c57051142f87ba13 (patch)
treebc0240cfcd83b1161b12ab8d49f69a551d47b579 /src
parent999491d046547dafa7238163d6231a5b3257c250 (diff)
Add lexical token for character literals
Diffstat (limited to 'src')
-rw-r--r--src/lex.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lex.c b/src/lex.c
index 97746e2..ca21ba9 100644
--- a/src/lex.c
+++ b/src/lex.c
@@ -218,6 +218,18 @@ lex_number(struct lexer *lexer, struct token *out)
return out->token;
}
+static void
+lex_char(struct lexer *lexer, struct token *out)
+{
+ uint32_t c = next(lexer);
+ if (next(lexer) != '\'') {
+ error(lex_loc(lexer), "unclosed or multi-character char literal");
+ }
+
+ out->info.chr = c;
+ out->token = T_CHAR;
+}
+
static enum lexical_token
lex_string(struct lexer *lexer, struct token *out, uint32_t delim)
{
@@ -441,6 +453,9 @@ lex_any(struct lexer *lexer, struct token *out)
case '_':
out->token = T_UNDERSCORE;
break;
+ case '\'':
+ lex_char(lexer, out);
+ break;
case '"':
return lex_string(lexer, out, c);
default: