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);
} else {
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));
if (virtual_but_not_pure_virtual) {
// 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 cdecl_director = parent_director || GetFlag(member,"feature:director");
int cdecl_nodirector = GetFlag(member,"feature:nodirector");
return cdecl_director && !cdecl_nodirector;
return cdecl_director && !cdecl_nodirector && !GetFlag(member, "feature:extend");
} else {
return 0;
}

View file

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