From c923cf6ee568f4cb1050b921ea5c906c7f748043 Mon Sep 17 00:00:00 2001 From: rdb Date: Wed, 27 Mar 2024 02:26:14 +0100 Subject: [PATCH] cppparser: Perform macro expansion on macro arguments Fixes #1638 --- dtool/src/cppparser/cppPreprocessor.cxx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/dtool/src/cppparser/cppPreprocessor.cxx b/dtool/src/cppparser/cppPreprocessor.cxx index 97076caa81..2b4a502365 100644 --- a/dtool/src/cppparser/cppPreprocessor.cxx +++ b/dtool/src/cppparser/cppPreprocessor.cxx @@ -2180,8 +2180,12 @@ expand_manifest(const CPPManifest *manifest, const YYLTYPE &loc) { manifest->_variadic_param, args); } - string expanded = " " + manifest->expand(args) + " "; - push_string(expanded, true); + // Perform expansion on the macro arguments. + for (string &arg : args) { + std::set expanded; + expanded.insert(manifest); + r_expand_manifests(arg, false, loc, expanded); + } string expanded = " " + manifest->expand(args) + " "; push_expansion(expanded, manifest, loc); @@ -2228,6 +2232,13 @@ r_expand_manifests(string &expr, bool expand_undefined, manifest->_variadic_param, args, expr, p); } + // Perform expansion on the macro arguments. + for (string &arg : args) { + std::set ignore = expanded; + ignore.insert(manifest); + r_expand_manifests(arg, expand_undefined, loc, ignore); + } + string result = manifest->expand(args); // Recurse, but adding the manifest we just expanded to the list