From: Lukas Krickl Date: Wed, 27 Dec 2023 16:40:26 +0000 (+0100) Subject: define preproc directive allows macro replacement for nexted defines X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=ec1e3f8bf4ccf96f7bfa6e4633c4567fb87c0cc8;p=ulas%2F.git define preproc directive allows macro replacement for nexted defines --- 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;