Browse Source

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;
rdb 1 year ago
parent
commit
ae8d643907
1 changed files with 6 additions and 6 deletions
  1. 6 6
      dtool/src/cppparser/cppScope.cxx

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