diff --git a/Examples/test-suite/smart_pointer_extend.i b/Examples/test-suite/smart_pointer_extend.i index 6127cb608..3e9a37d79 100644 --- a/Examples/test-suite/smart_pointer_extend.i +++ b/Examples/test-suite/smart_pointer_extend.i @@ -99,30 +99,32 @@ public: %inline %{ - - class DFoo; - - class DPtrFoo - { - DFoo *p; - public: - DPtrFoo(DFoo *ptr) : p(ptr) - { - } + namespace foo { - DFoo* operator->(void) {return p;}; - }; - - class DFoo - { - public: - void F(void) {}; - }; - + class DFoo; + + class DPtrFoo + { + DFoo *p; + public: + DPtrFoo(DFoo *ptr) : p(ptr) + { + } + + DFoo* operator->(void) {return p;}; + }; + + class DFoo + { + public: + void F(void) {}; + }; + } %} -%extend DFoo { + +%extend foo::DFoo { static int SExt(int i = 1) {return i;}; int Ext(int i = 2) {return i;}; } diff --git a/Source/Modules/lang.cxx b/Source/Modules/lang.cxx index 3e4873c36..da41c788d 100644 --- a/Source/Modules/lang.cxx +++ b/Source/Modules/lang.cxx @@ -1083,14 +1083,17 @@ Language::staticmemberfunctionHandler(Node *n) { String *cname, *mrename; if (!Extend) { - String *sname = Getattr(Getattr(n,"cplus:staticbase"),"name"); + Node *sb = Getattr(n,"cplus:staticbase"); + String *sname = sb ? Getattr(sb,"name") : 0; if (sname) { cname = NewStringf("%s::%s",sname,name); } else { cname = NewStringf("%s::%s",ClassName,name); } } else { - cname = Copy(Swig_name_member(ClassPrefix,name)); + String *mname = Swig_name_mangle(ClassName); + cname = Swig_name_member(mname,name); + Delete(mname); } mrename = Swig_name_member(ClassPrefix, symname);