cppparser: don't expand function-style macro if not followed by (

This commit is contained in:
rdb 2019-10-07 18:38:21 +02:00
parent 5b938278c2
commit 657af0edb5

View File

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