aboutsummaryrefslogtreecommitdiffhomepage
path: root/tokenize.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-17 07:20:51 +0900
committernsfisis <nsfisis@gmail.com>2025-08-17 07:20:51 +0900
commit48d5ca9bcf08a0995008759bf5bb9fec5a1631bc (patch)
treedc3e9ce6099e950e97f7674afd04d96263b42a35 /tokenize.c
parentb1307971d1b42556e79607fba0ca4617e25e7c54 (diff)
downloadducc-48d5ca9bcf08a0995008759bf5bb9fec5a1631bc.tar.gz
ducc-48d5ca9bcf08a0995008759bf5bb9fec5a1631bc.tar.zst
ducc-48d5ca9bcf08a0995008759bf5bb9fec5a1631bc.zip
feat: defer keyword check after preprocessing
Diffstat (limited to 'tokenize.c')
-rw-r--r--tokenize.c82
1 files changed, 82 insertions, 0 deletions
diff --git a/tokenize.c b/tokenize.c
index a5b6dc9..283755e 100644
--- a/tokenize.c
+++ b/tokenize.c
@@ -53,6 +53,88 @@ void tokenize_all(Lexer* l) {
tok->kind = TokenKind_literal_str;
tok->raw.data = pp_tok->raw.data + 1;
tok->raw.len = pp_tok->raw.len - 2;
+ } else if (k == TokenKind_ident) {
+ if (string_equals_cstr(&pp_tok->raw, "auto")) {
+ tok->kind = TokenKind_keyword_auto;
+ } else if (string_equals_cstr(&pp_tok->raw, "break")) {
+ tok->kind = TokenKind_keyword_break;
+ } else if (string_equals_cstr(&pp_tok->raw, "case")) {
+ tok->kind = TokenKind_keyword_case;
+ } else if (string_equals_cstr(&pp_tok->raw, "char")) {
+ tok->kind = TokenKind_keyword_char;
+ } else if (string_equals_cstr(&pp_tok->raw, "const")) {
+ tok->kind = TokenKind_keyword_const;
+ } else if (string_equals_cstr(&pp_tok->raw, "continue")) {
+ tok->kind = TokenKind_keyword_continue;
+ } else if (string_equals_cstr(&pp_tok->raw, "default")) {
+ tok->kind = TokenKind_keyword_default;
+ } else if (string_equals_cstr(&pp_tok->raw, "do")) {
+ tok->kind = TokenKind_keyword_do;
+ } else if (string_equals_cstr(&pp_tok->raw, "double")) {
+ tok->kind = TokenKind_keyword_double;
+ } else if (string_equals_cstr(&pp_tok->raw, "else")) {
+ tok->kind = TokenKind_keyword_else;
+ } else if (string_equals_cstr(&pp_tok->raw, "enum")) {
+ tok->kind = TokenKind_keyword_enum;
+ } else if (string_equals_cstr(&pp_tok->raw, "extern")) {
+ tok->kind = TokenKind_keyword_extern;
+ } else if (string_equals_cstr(&pp_tok->raw, "float")) {
+ tok->kind = TokenKind_keyword_float;
+ } else if (string_equals_cstr(&pp_tok->raw, "for")) {
+ tok->kind = TokenKind_keyword_for;
+ } else if (string_equals_cstr(&pp_tok->raw, "goto")) {
+ tok->kind = TokenKind_keyword_goto;
+ } else if (string_equals_cstr(&pp_tok->raw, "if")) {
+ tok->kind = TokenKind_keyword_if;
+ } else if (string_equals_cstr(&pp_tok->raw, "inline")) {
+ tok->kind = TokenKind_keyword_inline;
+ } else if (string_equals_cstr(&pp_tok->raw, "int")) {
+ tok->kind = TokenKind_keyword_int;
+ } else if (string_equals_cstr(&pp_tok->raw, "long")) {
+ tok->kind = TokenKind_keyword_long;
+ } else if (string_equals_cstr(&pp_tok->raw, "register")) {
+ tok->kind = TokenKind_keyword_register;
+ } else if (string_equals_cstr(&pp_tok->raw, "restrict")) {
+ tok->kind = TokenKind_keyword_restrict;
+ } else if (string_equals_cstr(&pp_tok->raw, "return")) {
+ tok->kind = TokenKind_keyword_return;
+ } else if (string_equals_cstr(&pp_tok->raw, "short")) {
+ tok->kind = TokenKind_keyword_short;
+ } else if (string_equals_cstr(&pp_tok->raw, "signed")) {
+ tok->kind = TokenKind_keyword_signed;
+ } else if (string_equals_cstr(&pp_tok->raw, "sizeof")) {
+ tok->kind = TokenKind_keyword_sizeof;
+ } else if (string_equals_cstr(&pp_tok->raw, "static")) {
+ tok->kind = TokenKind_keyword_static;
+ } else if (string_equals_cstr(&pp_tok->raw, "struct")) {
+ tok->kind = TokenKind_keyword_struct;
+ } else if (string_equals_cstr(&pp_tok->raw, "switch")) {
+ tok->kind = TokenKind_keyword_switch;
+ } else if (string_equals_cstr(&pp_tok->raw, "typedef")) {
+ tok->kind = TokenKind_keyword_typedef;
+ } else if (string_equals_cstr(&pp_tok->raw, "union")) {
+ tok->kind = TokenKind_keyword_union;
+ } else if (string_equals_cstr(&pp_tok->raw, "unsigned")) {
+ tok->kind = TokenKind_keyword_unsigned;
+ } else if (string_equals_cstr(&pp_tok->raw, "void")) {
+ tok->kind = TokenKind_keyword_void;
+ } else if (string_equals_cstr(&pp_tok->raw, "volatile")) {
+ tok->kind = TokenKind_keyword_volatile;
+ } else if (string_equals_cstr(&pp_tok->raw, "while")) {
+ tok->kind = TokenKind_keyword_while;
+ } else if (string_equals_cstr(&pp_tok->raw, "_Bool")) {
+ tok->kind = TokenKind_keyword__Bool;
+ } else if (string_equals_cstr(&pp_tok->raw, "_Complex")) {
+ tok->kind = TokenKind_keyword__Complex;
+ } else if (string_equals_cstr(&pp_tok->raw, "_Imaginary")) {
+ tok->kind = TokenKind_keyword__Imaginary;
+ } else if (string_equals_cstr(&pp_tok->raw, "va_start")) {
+ tok->kind = TokenKind_va_start;
+ tok->raw = pp_tok->raw;
+ } else {
+ tok->kind = TokenKind_ident;
+ tok->raw = pp_tok->raw;
+ }
} else if (k == TokenKind_other) {
unreachable();
} else {