diff --git a/Examples/test-suite/overload_simple.i b/Examples/test-suite/overload_simple.i index 88ea6f38c..417e4636e 100644 --- a/Examples/test-suite/overload_simple.i +++ b/Examples/test-suite/overload_simple.i @@ -165,3 +165,15 @@ long long ll(long long ull) { return ull; } #endif + +%inline { + class ClassA + { + public: + ClassA() {} + int method1( int arg1 ) {return arg1;} + protected: + int method1( int arg1, int arg2 ) {return arg1 + arg2;} + + }; +} diff --git a/Examples/test-suite/python/overload_simple_runme.py b/Examples/test-suite/python/overload_simple_runme.py index 8e2f8c4ed..a78f3720a 100644 --- a/Examples/test-suite/python/overload_simple_runme.py +++ b/Examples/test-suite/python/overload_simple_runme.py @@ -96,3 +96,7 @@ if s.type != "void *": free_void(v) + + +a = ClassA() +b = a.method1(1) diff --git a/Source/Modules/utils.cxx b/Source/Modules/utils.cxx index 8c93ce0dd..92631c4c5 100644 --- a/Source/Modules/utils.cxx +++ b/Source/Modules/utils.cxx @@ -49,10 +49,12 @@ void clean_overloaded(Node *n) { Node *first = 0; int cnt = 0; while (nn) { - if ((Strcmp(nodeType(nn),"template") == 0) || - (GetFlag(nn,"feature:ignore")) || + String *ntype = nodeType(nn); + if ((GetFlag(nn,"feature:ignore")) || (Getattr(nn,"error")) || - ((Strcmp(nodeType(nn),"using") == 0) && !firstChild(nn))) { + (Strcmp(ntype,"template") == 0) || + ((Strcmp(ntype,"cdecl") == 0) && is_protected(n) && !is_member_director(n)) || + ((Strcmp(ntype,"using") == 0) && !firstChild(nn))) { /* Remove from overloaded list */ Node *ps = Getattr(nn,"sym:previousSibling"); Node *ns = Getattr(nn,"sym:nextSibling"); @@ -67,7 +69,7 @@ void clean_overloaded(Node *n) { Delattr(nn,"sym:overloaded"); nn = ns; continue; - } else if ((Strcmp(nodeType(nn),"using") == 0)) { + } else if ((Strcmp(ntype,"using") == 0)) { /* A possibly dangerous parse tree hack. We're going to cut the parse tree node out and stick in the resolved using declarations */