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);