aboutsummaryrefslogtreecommitdiffstats
path: root/src/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lexer.c b/src/lexer.c
index 0aa26c1..e5bea2e 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -14,6 +14,7 @@ typedef enum TokenKind {
14 TOK_RCURLY, // } 14 TOK_RCURLY, // }
15 15
16 // Basic literals. 16 // Basic literals.
17 TOK_CHAR,
17 TOK_NUM_INT, 18 TOK_NUM_INT,
18 TOK_NUM_FLOAT, 19 TOK_NUM_FLOAT,
19 TOK_SYMBOL, 20 TOK_SYMBOL,
@@ -82,6 +83,7 @@ Str token_str[] = {
82 [TOK_RCURLY] = cstr("RCURLY"), 83 [TOK_RCURLY] = cstr("RCURLY"),
83 84
84 // Basic literals. 85 // Basic literals.
86 [TOK_CHAR] = cstr("CHAR"),
85 [TOK_NUM_INT] = cstr("INUMBER"), 87 [TOK_NUM_INT] = cstr("INUMBER"),
86 [TOK_NUM_FLOAT] = cstr("FNUMBER"), 88 [TOK_NUM_FLOAT] = cstr("FNUMBER"),
87 [TOK_SYMBOL] = cstr("SYMBOL"), 89 [TOK_SYMBOL] = cstr("SYMBOL"),
@@ -237,6 +239,7 @@ scan_is_valid_split(char c) {
237 case '"': 239 case '"':
238 case ' ': 240 case ' ':
239 case ',': 241 case ',':
242 case '\'':
240 case '\f': 243 case '\f':
241 case '\n': 244 case '\n':
242 case '\r': 245 case '\r':
@@ -489,6 +492,13 @@ scan_token(Scanner *scanner) {
489 case ':': return emit_token(current, scanner, TOK_COLON); 492 case ':': return emit_token(current, scanner, TOK_COLON);
490 case '.': return emit_token(current, scanner, TOK_DOT); 493 case '.': return emit_token(current, scanner, TOK_DOT);
491 case '@': return emit_token(current, scanner, TOK_AT); 494 case '@': return emit_token(current, scanner, TOK_AT);
495 case '\'': {
496 c = scan_next(scanner);
497 if (scan_next(scanner) == '\'') {
498 return emit_token(current, scanner, TOK_CHAR);
499 }
500 return emit_token_err(&current, cstr("mismatched char quote"));
501 };
492 case '"': { 502 case '"': {
493 while (scan_has_next(scanner)) { 503 while (scan_has_next(scanner)) {
494 c = scan_next(scanner); 504 c = scan_next(scanner);