From ec1e3f8bf4ccf96f7bfa6e4633c4567fb87c0cc8 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Wed, 27 Dec 2023 17:40:26 +0100 Subject: [PATCH] define preproc directive allows macro replacement for nexted defines --- src/test.c | 3 +++ src/ulas.c | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test.c b/src/test.c index 8ab2c8d..66091a2 100644 --- a/src/test.c +++ b/src/test.c @@ -104,6 +104,9 @@ void test_preproc(void) { assert_preproc("", -1, " #define\n"); assert_preproc("this is a 123 for defs", 0, " #define test 123\nthis is a test for defs"); + // define used inside define + assert_preproc("this is a 123 for defs", 0, + " #define ftest 123\n#define test ftest\nthis is a test for defs"); // undefined assert_preproc("123\ntest", 0, diff --git a/src/ulas.c b/src/ulas.c index dffea89..da38d98 100644 --- a/src/ulas.c +++ b/src/ulas.c @@ -714,7 +714,8 @@ char *ulas_preprocexpand(struct ulas_preproc *pp, const char *raw_line, // otherwise memcpy the read bytes 1:1 into the new string while ((read = ulas_tok(&pp->tok, &praw_line, *n))) { // if it is the first token, and it begins with a # do not process at all! - if (first_tok && pp->tok.buf[0] == ULAS_TOK_PREPROC_BEGIN) { + // only apply this to certain preproc types such as #undefine, #ifdef and #ifndef + if (first_tok && pp->tok.buf[0] == ULAS_TOK_PREPROC_BEGIN && strcmp(ULAS_PPSTR_DEF, pp->tok.buf) != 0) { ulas_strensr(&pp->line, (*n) + 1); strncat(pp->line.buf, raw_line, *n); break; -- 2.30.2