From ae8d643907509aa0bf6bd96b412487199b16d67d Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 28 Mar 2024 21:02:32 +0100 Subject: [PATCH] cppparser: Prefer function over type when searching symbol This is meant to fix the "stat problem", which means you can define a function with the same name as a struct, which is allowed, since you can still refer to the struct with an explicit `struct stat`. It can be reproduced with the following code: struct stat; void stat(); void *ptr = (void *)stat; --- dtool/src/cppparser/cppScope.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/dtool/src/cppparser/cppScope.cxx b/dtool/src/cppparser/cppScope.cxx index d091cae756..a88961d4b7 100644 --- a/dtool/src/cppparser/cppScope.cxx +++ b/dtool/src/cppparser/cppScope.cxx @@ -724,6 +724,12 @@ find_symbol(const string &name, bool recurse) const { return _struct_type; } + Functions::const_iterator fi; + fi = _functions.find(name); + if (fi != _functions.end()) { + return (*fi).second; + } + Types::const_iterator ti; ti = _types.find(name); if (ti != _types.end()) { @@ -741,12 +747,6 @@ find_symbol(const string &name, bool recurse) const { return (*vi).second; } - Functions::const_iterator fi; - fi = _functions.find(name); - if (fi != _functions.end()) { - return (*fi).second; - } - Using::const_iterator ui; for (ui = _using.begin(); ui != _using.end(); ++ui) { CPPDeclaration *decl = (*ui)->find_symbol(name, false);