From 657af0edb5bacd7899ad3b09ec0d853be4d19567 Mon Sep 17 00:00:00 2001 From: rdb Date: Mon, 7 Oct 2019 18:38:21 +0200 Subject: [PATCH] cppparser: don't expand function-style macro if not followed by ( --- dtool/src/cppparser/cppPreprocessor.cxx | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dtool/src/cppparser/cppPreprocessor.cxx b/dtool/src/cppparser/cppPreprocessor.cxx index 24784a98c8..f594291e0c 100644 --- a/dtool/src/cppparser/cppPreprocessor.cxx +++ b/dtool/src/cppparser/cppPreprocessor.cxx @@ -1942,7 +1942,22 @@ get_identifier(int c) { // Is it a manifest? Manifests::const_iterator mi = _manifests.find(name); if (mi != _manifests.end() && !should_ignore_manifest((*mi).second)) { - return expand_manifest((*mi).second); + // If the manifest is expecting arguments, we don't expand it unless the + // the next token is an open-parenthesis. + CPPManifest *manifest = (*mi).second; + if (manifest->_has_parameters) { + while (c != EOF && isspace(c)) { + get(); + c = peek(); + } + if (c == '(') { + // It is followed by a parenthesis, so we can expand this. + return expand_manifest(manifest); + } + } else { + // Non-function-like macros are always expanded. + return expand_manifest(manifest); + } } if (name == "__FILE__") { return get_literal(SIMPLE_STRING, loc, loc.file._filename_as_referenced);