diff --git a/SWIG/Examples/test-suite/python/using_extend_runme.py b/SWIG/Examples/test-suite/python/using_extend_runme.py index 1ddc4baa1..14615a05e 100644 --- a/SWIG/Examples/test-suite/python/using_extend_runme.py +++ b/SWIG/Examples/test-suite/python/using_extend_runme.py @@ -15,3 +15,7 @@ if f.blah(3,4) != 7: if f.blah(3.5,7.5) != (3.5+7.5): raise RuntimeError,"blah(double,double)" + + +if f.duh(3) != 3: + raise RuntimeError,"duh(int)" diff --git a/SWIG/Examples/test-suite/using_extend.i b/SWIG/Examples/test-suite/using_extend.i index 21a4c39d5..eccb1009d 100644 --- a/SWIG/Examples/test-suite/using_extend.i +++ b/SWIG/Examples/test-suite/using_extend.i @@ -25,6 +25,7 @@ public: class Bar { public: + int duh(int x) { return x; } double blah(double x) { return x; } }; @@ -37,3 +38,9 @@ public: %} +%extend FooBar +{ + using Bar::duh; +} + + diff --git a/SWIG/Source/Modules/typepass.cxx b/SWIG/Source/Modules/typepass.cxx index dee5ee8fd..04688e626 100644 --- a/SWIG/Source/Modules/typepass.cxx +++ b/SWIG/Source/Modules/typepass.cxx @@ -854,7 +854,20 @@ class TypePass : private Dispatcher { if (!Getattr(nn,"sym:name")) Setattr(nn,"sym:name", symname); if (!GetFlag(nn,"feature:ignore")) { - Setattr(nn,"parms",CopyParmList(Getattr(c,"parms"))); + ParmList *parms = CopyParmList(Getattr(c,"parms")); + Setattr(nn,"parms",parms); + Delete(parms); + if (Getattr(n,"feature:extend")) { + String *ucode = NewStringf("{ self->%s(",Getattr(n,"uname")); + for (ParmList *p = parms; p;) { + StringAppend(ucode,HashGetAttr(p,k_name)); + p = nextSibling(p); + if (p) StringAppend(ucode,","); + } + StringAppend(ucode,"); }"); + Setattr(nn,"code",ucode); + Delete(ucode); + } ParmList *throw_parm_list = Getattr(c,"throws"); if (throw_parm_list) Setattr(nn,"throws",CopyParmList(throw_parm_list));