fix protected constructor by using clean_overloaded to utils.cxx
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6801 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
1f242396e6
commit
ce3421c40e
3 changed files with 72 additions and 69 deletions
|
|
@ -343,6 +343,7 @@ void Wrapper_director_mode_set(int);
|
||||||
void Wrapper_director_protected_mode_set(int);
|
void Wrapper_director_protected_mode_set(int);
|
||||||
void Wrapper_template_extmode_set(int);
|
void Wrapper_template_extmode_set(int);
|
||||||
|
|
||||||
|
void clean_overloaded(Node *n);
|
||||||
|
|
||||||
/* Contracts */
|
/* Contracts */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -273,75 +273,6 @@ class TypePass : private Dispatcher {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clean overloaded list. Removes templates, friends, ignored, and errors */
|
|
||||||
|
|
||||||
void clean_overloaded(Node *n) {
|
|
||||||
Node *nn = Getattr(n,"sym:overloaded");
|
|
||||||
Node *first = 0;
|
|
||||||
int cnt = 0;
|
|
||||||
while (nn) {
|
|
||||||
if ((Strcmp(nodeType(nn),"template") == 0) ||
|
|
||||||
(Getattr(nn,"feature:ignore")) ||
|
|
||||||
(Getattr(nn,"error")) ||
|
|
||||||
// (checkAttribute(nn,"storage","friend")) ||
|
|
||||||
((Strcmp(nodeType(nn),"using") == 0) && !firstChild(nn))) {
|
|
||||||
/* Remove from overloaded list */
|
|
||||||
Node *ps = Getattr(nn,"sym:previousSibling");
|
|
||||||
Node *ns = Getattr(nn,"sym:nextSibling");
|
|
||||||
if (ps) {
|
|
||||||
Setattr(ps,"sym:nextSibling",ns);
|
|
||||||
}
|
|
||||||
if (ns) {
|
|
||||||
Setattr(ns,"sym:previousSibling",ps);
|
|
||||||
}
|
|
||||||
Delattr(nn,"sym:previousSibling");
|
|
||||||
Delattr(nn,"sym:nextSibling");
|
|
||||||
Delattr(nn,"sym:overloaded");
|
|
||||||
nn = ns;
|
|
||||||
continue;
|
|
||||||
} else if ((Strcmp(nodeType(nn),"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 */
|
|
||||||
|
|
||||||
Node *ps = Getattr(nn,"sym:previousSibling");
|
|
||||||
Node *ns = Getattr(nn,"sym:nextSibling");
|
|
||||||
Node *un = firstChild(nn);
|
|
||||||
Node *pn = un;
|
|
||||||
|
|
||||||
if (!first) {
|
|
||||||
first = un;
|
|
||||||
}
|
|
||||||
while (pn) {
|
|
||||||
Node *ppn = Getattr(pn,"sym:nextSibling");
|
|
||||||
Setattr(pn,"sym:overloaded",first);
|
|
||||||
Setattr(pn,"sym:overname", NewStringf("%s_%d", Getattr(nn,"sym:overname"), cnt++));
|
|
||||||
if (ppn) pn = ppn;
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
if (ps) {
|
|
||||||
Setattr(ps,"sym:nextSibling",un);
|
|
||||||
Setattr(un,"sym:previousSibling",ps);
|
|
||||||
}
|
|
||||||
if (ns) {
|
|
||||||
Setattr(ns,"sym:previousSibling", pn);
|
|
||||||
Setattr(pn,"sym:nextSibling",ns);
|
|
||||||
}
|
|
||||||
if (!first) {
|
|
||||||
first = un;
|
|
||||||
Setattr(nn,"sym:overloaded",first);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!first) first = nn;
|
|
||||||
Setattr(nn,"sym:overloaded",first);
|
|
||||||
}
|
|
||||||
nn = Getattr(nn,"sym:nextSibling");
|
|
||||||
}
|
|
||||||
if (!first || (first && !Getattr(first,"sym:nextSibling"))) {
|
|
||||||
Delattr(n,"sym:overloaded");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------
|
/* ------------------------------------------------------------
|
||||||
* top()
|
* top()
|
||||||
* ------------------------------------------------------------ */
|
* ------------------------------------------------------------ */
|
||||||
|
|
|
||||||
|
|
@ -40,3 +40,74 @@ int is_member_director(Node* member)
|
||||||
{
|
{
|
||||||
return is_member_director(Getattr(member, "parentNode"), member);
|
return is_member_director(Getattr(member, "parentNode"), member);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Clean overloaded list. Removes templates, friends, ignored, and errors */
|
||||||
|
|
||||||
|
void clean_overloaded(Node *n) {
|
||||||
|
Node *nn = Getattr(n,"sym:overloaded");
|
||||||
|
Node *first = 0;
|
||||||
|
int cnt = 0;
|
||||||
|
while (nn) {
|
||||||
|
if ((Strcmp(nodeType(nn),"template") == 0) ||
|
||||||
|
(Getattr(nn,"feature:ignore")) ||
|
||||||
|
(Getattr(nn,"error")) ||
|
||||||
|
// (checkAttribute(nn,"storage","friend")) ||
|
||||||
|
((Strcmp(nodeType(nn),"using") == 0) && !firstChild(nn))) {
|
||||||
|
/* Remove from overloaded list */
|
||||||
|
Node *ps = Getattr(nn,"sym:previousSibling");
|
||||||
|
Node *ns = Getattr(nn,"sym:nextSibling");
|
||||||
|
if (ps) {
|
||||||
|
Setattr(ps,"sym:nextSibling",ns);
|
||||||
|
}
|
||||||
|
if (ns) {
|
||||||
|
Setattr(ns,"sym:previousSibling",ps);
|
||||||
|
}
|
||||||
|
Delattr(nn,"sym:previousSibling");
|
||||||
|
Delattr(nn,"sym:nextSibling");
|
||||||
|
Delattr(nn,"sym:overloaded");
|
||||||
|
nn = ns;
|
||||||
|
continue;
|
||||||
|
} else if ((Strcmp(nodeType(nn),"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 */
|
||||||
|
|
||||||
|
Node *ps = Getattr(nn,"sym:previousSibling");
|
||||||
|
Node *ns = Getattr(nn,"sym:nextSibling");
|
||||||
|
Node *un = firstChild(nn);
|
||||||
|
Node *pn = un;
|
||||||
|
|
||||||
|
if (!first) {
|
||||||
|
first = un;
|
||||||
|
}
|
||||||
|
while (pn) {
|
||||||
|
Node *ppn = Getattr(pn,"sym:nextSibling");
|
||||||
|
Setattr(pn,"sym:overloaded",first);
|
||||||
|
Setattr(pn,"sym:overname", NewStringf("%s_%d", Getattr(nn,"sym:overname"), cnt++));
|
||||||
|
if (ppn) pn = ppn;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
if (ps) {
|
||||||
|
Setattr(ps,"sym:nextSibling",un);
|
||||||
|
Setattr(un,"sym:previousSibling",ps);
|
||||||
|
}
|
||||||
|
if (ns) {
|
||||||
|
Setattr(ns,"sym:previousSibling", pn);
|
||||||
|
Setattr(pn,"sym:nextSibling",ns);
|
||||||
|
}
|
||||||
|
if (!first) {
|
||||||
|
first = un;
|
||||||
|
Setattr(nn,"sym:overloaded",first);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!first) first = nn;
|
||||||
|
Setattr(nn,"sym:overloaded",first);
|
||||||
|
}
|
||||||
|
nn = Getattr(nn,"sym:nextSibling");
|
||||||
|
}
|
||||||
|
if (!first || (first && !Getattr(first,"sym:nextSibling"))) {
|
||||||
|
Delattr(n,"sym:overloaded");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue