Fix unary scope operator (::) (global scope) regression introduced in 2.0.0. The mangled symbol names were incorrect, sometimes resulting in types being incorrectly treated as opaque types.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12264 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2010-10-13 05:48:59 +00:00
parent a4a56acd33
commit c9ede7e622
5 changed files with 104 additions and 7 deletions

View File

@ -5,3 +5,7 @@ See the RELEASENOTES file for a summary of changes in each release.
Version 2.0.2 (in progress)
===========================
2010-10-12: wsfulton
Fix unary scope operator (::) (global scope) regression introduced in 2.0.0, reported by
Ben Walker. The mangled symbol names were incorrect, sometimes resulting in types being
incorrectly treated as opaque types.

View File

@ -58,3 +58,25 @@ struct TheEnumMethods {
}
%}
%inline %{
Klass1 getKlass1A() { return ::Klass1(); }
::Klass1 getKlass1B() { return ::Klass1(); }
Klass2 getKlass2A() { return ::Klass2(); }
::Klass2 getKlass2B() { return ::Klass2(); }
Klass3 getKlass3A() { return ::Klass3(); }
::Klass3 getKlass3B() { return ::Klass3(); }
Klass4 getKlass4A() { return ::Klass4(); }
::Klass4 getKlass4B() { return ::Klass4(); }
Klass5 getKlass5A() { return ::Klass5(); }
::Klass5 getKlass5B() { return ::Klass5(); }
Klass6 getKlass6A() { return ::Klass6(); }
::Klass6 getKlass6B() { return ::Klass6(); }
Klass7 getKlass7A() { return ::Klass7(); }
::Klass7 getKlass7B() { return ::Klass7(); }
%}

View File

@ -13,8 +13,38 @@ public class global_namespace_runme {
public static void main(String argv[]) {
KlassMethods.methodA(new Klass1(), new Klass2(), new Klass3(), new Klass4(), new Klass5(), new Klass6(), new Klass7());
KlassMethods.methodB(new Klass1(), new Klass2(), new Klass3(), new Klass4(), new Klass5(), new Klass6(), new Klass7());
Klass1 k1 = new Klass1();
Klass2 k2 = new Klass2();
Klass3 k3 = new Klass3();
Klass4 k4 = new Klass4();
Klass5 k5 = new Klass5();
Klass6 k6 = new Klass6();
Klass7 k7 = new Klass7();
KlassMethods.methodA(k1, k2, k3, k4, k5, k6, k7);
KlassMethods.methodB(k1, k2, k3, k4, k5, k6, k7);
k1 = global_namespace.getKlass1A();
k2 = global_namespace.getKlass2A();
k3 = global_namespace.getKlass3A();
k4 = global_namespace.getKlass4A();
k5 = global_namespace.getKlass5A();
k6 = global_namespace.getKlass6A();
k7 = global_namespace.getKlass7A();
KlassMethods.methodA(k1, k2, k3, k4, k5, k6, k7);
KlassMethods.methodB(k1, k2, k3, k4, k5, k6, k7);
k1 = global_namespace.getKlass1B();
k2 = global_namespace.getKlass2B();
k3 = global_namespace.getKlass3B();
k4 = global_namespace.getKlass4B();
k5 = global_namespace.getKlass5B();
k6 = global_namespace.getKlass6B();
k7 = global_namespace.getKlass7B();
KlassMethods.methodA(k1, k2, k3, k4, k5, k6, k7);
KlassMethods.methodB(k1, k2, k3, k4, k5, k6, k7);
XYZMethods.methodA(new XYZ1(), new XYZ2(), new XYZ3(), new XYZ4(), new XYZ5(), new XYZ6(), new XYZ7());
XYZMethods.methodB(new XYZ1(), new XYZ2(), new XYZ3(), new XYZ4(), new XYZ5(), new XYZ6(), new XYZ7());

View File

@ -0,0 +1,40 @@
from global_namespace import *
k1 = Klass1()
k2 = Klass2()
k3 = Klass3()
k4 = Klass4()
k5 = Klass5()
k6 = Klass6()
k7 = Klass7()
KlassMethods.methodA(k1, k2, k3, k4, k5, k6, k7)
KlassMethods.methodB(k1, k2, k3, k4, k5, k6, k7)
k1 = getKlass1A()
k2 = getKlass2A()
k3 = getKlass3A()
k4 = getKlass4A()
k5 = getKlass5A()
k6 = getKlass6A()
k7 = getKlass7A()
KlassMethods.methodA(k1, k2, k3, k4, k5, k6, k7)
KlassMethods.methodB(k1, k2, k3, k4, k5, k6, k7)
k1 = getKlass1B()
k2 = getKlass2B()
k3 = getKlass3B()
k4 = getKlass4B()
k5 = getKlass5B()
k6 = getKlass6B()
k7 = getKlass7B()
KlassMethods.methodA(k1, k2, k3, k4, k5, k6, k7)
KlassMethods.methodB(k1, k2, k3, k4, k5, k6, k7)
XYZMethods.methodA(XYZ1(), XYZ2(), XYZ3(), XYZ4(), XYZ5(), XYZ6(), XYZ7())
XYZMethods.methodB(XYZ1(), XYZ2(), XYZ3(), XYZ4(), XYZ5(), XYZ6(), XYZ7())
TheEnumMethods.methodA(theenum1, theenum2, theenum3)
TheEnumMethods.methodA(theenum1, theenum2, theenum3)

View File

@ -906,8 +906,9 @@ String *SwigType_manglestr_default(SwigType *s) {
String *result = 0;
String *base = 0;
SwigType *lt;
SwigType *sr = SwigType_typedef_qualified(s);
SwigType *ss = SwigType_typedef_resolve_all(sr);
SwigType *sr = SwigType_typedef_resolve_all(s);
SwigType *sq = SwigType_typedef_qualified(sr);
SwigType *ss = SwigType_remove_global_scope_prefix(sq);
s = ss;
@ -917,7 +918,6 @@ String *SwigType_manglestr_default(SwigType *s) {
ss = ty;
s = ss;
}
Delete(sr);
lt = SwigType_ltype(s);
result = SwigType_prefix(lt);
@ -966,8 +966,9 @@ String *SwigType_manglestr_default(SwigType *s) {
Insert(result, 0, "_");
Delete(lt);
Delete(base);
if (ss)
Delete(ss);
Delete(ss);
Delete(sq);
Delete(sr);
return result;
}