fix parentnode for %extend methods

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9442 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2006-10-12 19:47:24 +00:00
commit 32a59010e4
3 changed files with 5 additions and 5 deletions

View file

@ -975,7 +975,7 @@ Language::functionHandler(Node *n) {
globalfunctionHandler(n); globalfunctionHandler(n);
} else { } else {
Node* explicit_n = 0; Node* explicit_n = 0;
if (directorsEnabled() && is_member_director(CurrentClass,n) && !Extend && !extraDirectorProtectedCPPMethodsRequired()) { if (directorsEnabled() && is_member_director(CurrentClass,n) && !extraDirectorProtectedCPPMethodsRequired()) {
bool virtual_but_not_pure_virtual = (!(Cmp(storage, "virtual")) && (Cmp(Getattr(n, "value"), "0") != 0)); bool virtual_but_not_pure_virtual = (!(Cmp(storage, "virtual")) && (Cmp(Getattr(n, "value"), "0") != 0));
if (virtual_but_not_pure_virtual) { if (virtual_but_not_pure_virtual) {
// Add additional wrapper which makes an explicit call to the virtual method (ie not a virtual call) // Add additional wrapper which makes an explicit call to the virtual method (ie not a virtual call)

View file

@ -39,7 +39,7 @@ int is_member_director(Node* parentnode, Node* member)
int parent_director = director_mode && GetFlag(parentnode,"feature:director"); int parent_director = director_mode && GetFlag(parentnode,"feature:director");
int cdecl_director = parent_director || GetFlag(member,"feature:director"); int cdecl_director = parent_director || GetFlag(member,"feature:director");
int cdecl_nodirector = GetFlag(member,"feature:nodirector"); int cdecl_nodirector = GetFlag(member,"feature:nodirector");
return cdecl_director && !cdecl_nodirector; return cdecl_director && !cdecl_nodirector && !GetFlag(member, "feature:extend");
} else { } else {
return 0; return 0;
} }

View file

@ -986,9 +986,9 @@ Swig_MethodToFunction(Node *n, String *classname, int flags, SwigType *director_
Node* Node*
Swig_methodclass(Node *n) { Swig_methodclass(Node *n) {
Node* type = Getattr(n, k_nodetype); Node* nodetype = Getattr(n, k_nodetype);
if (!Cmp(type, "class")) return n; if (!Cmp(nodetype, "class")) return n;
return Getattr(n, k_parentnode); return GetFlag(n, "feature:extend") ? Getattr(Getattr(n, k_parentnode), k_parentnode) : Getattr(n, k_parentnode);
} }
int int