From 2e15e2b8e5ca7d9738c3979f4eedb1c6506e85f3 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Tue, 18 Aug 2020 09:41:59 +0900 Subject: [PATCH] Add a do-nothing preprocessor --- chibicc.h | 7 +++++++ main.c | 1 + preprocess.c | 7 +++++++ tokenize.c | 3 +-- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 preprocess.c diff --git a/chibicc.h b/chibicc.h index 1bcd350..17494b8 100644 --- a/chibicc.h +++ b/chibicc.h @@ -69,11 +69,18 @@ void warn_tok(Token *tok, char *fmt, ...); bool equal(Token *tok, char *op); Token *skip(Token *tok, char *op); bool consume(Token **rest, Token *tok, char *str); +void convert_keywords(Token *tok); Token *tokenize_file(char *filename); #define unreachable() \ error("internal error at %s:%d", __FILE__, __LINE__) +// +// preprocess.c +// + +Token *preprocess(Token *tok); + // // parse.c // diff --git a/main.c b/main.c index fc52646..d04556b 100644 --- a/main.c +++ b/main.c @@ -183,6 +183,7 @@ static void run_cc1(int argc, char **argv, char *input, char *output) { static void cc1(void) { // Tokenize and parse. Token *tok = tokenize_file(base_file); + tok = preprocess(tok); Var *prog = parse(tok); // Traverse the AST to emit assembly. diff --git a/preprocess.c b/preprocess.c new file mode 100644 index 0000000..e26e4d9 --- /dev/null +++ b/preprocess.c @@ -0,0 +1,7 @@ +#include "chibicc.h" + +// Entry point function of the preprocessor. +Token *preprocess(Token *tok) { + convert_keywords(tok); + return tok; +} diff --git a/tokenize.c b/tokenize.c index 70bcbd6..81c6f7d 100644 --- a/tokenize.c +++ b/tokenize.c @@ -332,7 +332,7 @@ static Token *read_number(Token *cur, char *start) { return tok; } -static void convert_keywords(Token *tok) { +void convert_keywords(Token *tok) { for (Token *t = tok; t->kind != TK_EOF; t = t->next) if (is_keyword(t)) t->kind = TK_RESERVED; @@ -449,7 +449,6 @@ static Token *tokenize(char *filename, char *p) { new_token(TK_EOF, cur, p, 0); add_line_numbers(head.next); - convert_keywords(head.next); return head.next; } -- GitLab