From 8b79e6a28a965d9e02e4ec0f1fd6ae4513743752 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Sun, 28 Nov 2004 09:15:58 +0000 Subject: [PATCH] fix non public overload order git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@6770 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- .../Examples/test-suite/default_constructor.i | 20 +++++++++++++++- .../python/default_constructor_runme.py | 5 ++++ SWIG/Source/Swig/symbol.c | 23 +++++++++++++++++-- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/SWIG/Examples/test-suite/default_constructor.i b/SWIG/Examples/test-suite/default_constructor.i index 944f0fd76..c8b141188 100644 --- a/SWIG/Examples/test-suite/default_constructor.i +++ b/SWIG/Examples/test-suite/default_constructor.i @@ -102,8 +102,26 @@ protected: class GG : public G { }; +template +class HH_T +{ + + +public: + + HH_T(int i,int j) + { + } + + +protected: + HH_T(); + +}; + + %} - +%template(HH) HH_T; diff --git a/SWIG/Examples/test-suite/python/default_constructor_runme.py b/SWIG/Examples/test-suite/python/default_constructor_runme.py index d7d811d4c..0de720e3d 100644 --- a/SWIG/Examples/test-suite/python/default_constructor_runme.py +++ b/SWIG/Examples/test-suite/python/default_constructor_runme.py @@ -94,3 +94,8 @@ except AttributeError: gg = dc.new_GG del_gg = dc.delete_GG + +import default_constructor +hh = default_constructor.HH(1,1) +print hh + diff --git a/SWIG/Source/Swig/symbol.c b/SWIG/Source/Swig/symbol.c index 1d5fd92de..588710f4d 100644 --- a/SWIG/Source/Swig/symbol.c +++ b/SWIG/Source/Swig/symbol.c @@ -524,6 +524,17 @@ Swig_symbol_cadd(String_or_char *name, Node *n) { * for namespace support, type resolution, and other issues. * ----------------------------------------------------------------------------- */ +static Node* +symbol_head(Node *n) +{ + Node *pn = Getattr(n, "sym:previousSibling"); + while (pn) { + n = pn; + pn = Getattr(n, "sym:previousSibling"); + } + return n; +} + Node * Swig_symbol_add(String_or_char *symname, Node *n) { Hash *c, *cn, *cl = 0; @@ -710,10 +721,18 @@ Swig_symbol_add(String_or_char *symname, Node *n) { assert(!Getattr(n,"sym:overname")); Setattr(n,"sym:overname", NewStringf("__SWIG_%d", pn)); /*Printf(stdout,"%s %s %s\n", symname, Getattr(n,"decl"), Getattr(n,"sym:overname")); */ - Setattr(cl,"sym:nextSibling",n); - Setattr(n,"sym:previousSibling",cl); + if (Getattr(n,"access")) { + /* add the protected/private members at the top of the overload list*/ + Node *hl = symbol_head(cl); + Setattr(n,"sym:nextSibling",hl); + Setattr(hl,"sym:previousSibling",n); + } else { + Setattr(cl,"sym:nextSibling",n); + Setattr(n,"sym:previousSibling",cl); + } Setattr(cl,"sym:overloaded",c); Setattr(n,"sym:overloaded",c); + return n; }