From 8483d3c4456108cfaf469d4d3867608458f39138 Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Sat, 23 May 2026 19:03:15 -0400 Subject: core: parser: Add initial preprocessing stubs Signed-off-by: Chloe M. --- core/parser.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 5 deletions(-) (limited to 'core/parser.c') diff --git a/core/parser.c b/core/parser.c index 4779803..48640d8 100644 --- a/core/parser.c +++ b/core/parser.c @@ -58,6 +58,35 @@ static const char *toktab[] = { [TT_U64] = qtok("u64") }; +/* + * Push a token to the token buffer in the preprocessing stage + * + * @tokbuf: Token buffer to push to + * @tok: Token to push + * + * Returns zero on success + */ +static int +preprocessor_push(struct tokbuf *tokbuf, struct token *tok) +{ + if (tokbuf == NULL || tok == NULL) { + return -1; + } + + switch (tok->type) { + case TT_IFNDEF: + case TT_IFDEF: + case TT_DEFINE: + break; + default: + if (tokbuf_push(tokbuf, tok) < 0) { + return -1; + } + } + + return 0; +} + static int parser_nom(struct cescal_state *state, struct token *res) { @@ -68,12 +97,24 @@ parser_nom(struct cescal_state *state, struct token *res) return -1; } - if (lexer_nom(state, &tok) < 0) { - return -1; - } + switch (state->pass) { + case 0: /* Pre-processor */ + if (lexer_nom(state, &tok) < 0) { + return -1; + } - if (tokbuf_push(&state->tokbuf, &tok) < 0) { - return -1; + printf("* %s\n", tokstr(&tok)); + if (preprocessor_push(&state->tokbuf, &tok) < 0) { + return -1; + } + + break; + case 1: /* Parse */ + if (tokbuf_pop(&state->tokbuf, &tok) < 0) { + return -1; + } + + break; } *res = tok; @@ -94,5 +135,6 @@ parser_parse(struct cescal_state *state) cc_trace("got token %s\n", tokstr(&tok)); } + ++state->pass; return 0; } -- cgit v1.2.3