Add warnings for badly named destructors. Fix %extend and destructors for templates - they weren't always being wrapped. Fix destructor "name" attribute.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12804 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
7d359b7895
commit
4c6f66577a
10 changed files with 226 additions and 28 deletions
104
Examples/test-suite/errors/cpp_extend_destructors.i
Normal file
104
Examples/test-suite/errors/cpp_extend_destructors.i
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
%module xxx
|
||||
|
||||
/////////////////////////////
|
||||
%extend AStruct {
|
||||
~AStruct() {}
|
||||
}
|
||||
struct AStruct {
|
||||
~AStruct() {}
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
struct BStruct {
|
||||
~BStruct() {}
|
||||
~BStruct() {}
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
struct CStruct {
|
||||
};
|
||||
|
||||
%extend CStruct {
|
||||
~NOT_CStruct() {
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
%extend DStruct {
|
||||
~NOT_DStruct() {
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
struct DStruct {
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
struct EStruct {
|
||||
~EStruct() {}
|
||||
};
|
||||
|
||||
%extend EStruct {
|
||||
~NOT_EStruct() {
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
%extend FStruct {
|
||||
~NOT_FStruct() {
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
struct FStruct {
|
||||
~FStruct() {}
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
struct GStruct {
|
||||
};
|
||||
|
||||
%extend GStruct {
|
||||
~GStruct() {}
|
||||
~NOT_GStruct() {
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
%extend HStruct {
|
||||
~HStruct() {}
|
||||
~NOT_HStruct() {
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
struct HStruct {
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
struct IStruct {
|
||||
~IStruct() {}
|
||||
~NOT_IStruct() {}
|
||||
};
|
||||
|
||||
struct JStruct {
|
||||
~JStruct() {}
|
||||
~NOT_JStruct() {}
|
||||
~JStruct() {}
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
struct KStruct {
|
||||
~NOT_KStruct() {}
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
template<typename T>
|
||||
struct LStruct {
|
||||
~LStruct() {}
|
||||
~NOT_LStruct() {}
|
||||
~LStruct() {}
|
||||
};
|
||||
%template(LStructInt) LStruct<int>;
|
||||
%template(LStructShort) LStruct<short>;
|
||||
|
||||
|
|
@ -209,6 +209,27 @@ Doc/Manual/Typemaps.html for complete details.
|
|||
cpp_bad_extern.i:5: Warning 313: Unrecognized extern type "INTERCAL".
|
||||
cpp_bad_extern.i:7: Warning 313: Unrecognized extern type "INTERCAL".
|
||||
|
||||
:::::::::::::::::::::::::::::::: cpp_extend_destructors.i :::::::::::::::::::::::::::::::::::
|
||||
cpp_extend_destructors.i:8: Warning 302: Identifier '~AStruct' redefined by %extend (ignored),
|
||||
cpp_extend_destructors.i:5: Warning 302: %extend definition of '~AStruct'.
|
||||
cpp_extend_destructors.i:14: Warning 302: Identifier '~BStruct' redefined (ignored),
|
||||
cpp_extend_destructors.i:13: Warning 302: previous definition of '~BStruct'.
|
||||
cpp_extend_destructors.i:87: Warning 302: Identifier '~JStruct' redefined (ignored),
|
||||
cpp_extend_destructors.i:85: Warning 302: previous definition of '~JStruct'.
|
||||
cpp_extend_destructors.i:100: Warning 302: Identifier '~LStruct' redefined (ignored),
|
||||
cpp_extend_destructors.i:98: Warning 302: previous definition of '~LStruct'.
|
||||
cpp_extend_destructors.i:24: Warning 521: Illegal destructor name ~NOT_CStruct. Ignored.
|
||||
cpp_extend_destructors.i:30: Warning 521: Illegal destructor name ~NOT_DStruct. Ignored.
|
||||
cpp_extend_destructors.i:44: Warning 521: Illegal destructor name ~NOT_EStruct. Ignored.
|
||||
cpp_extend_destructors.i:50: Warning 521: Illegal destructor name ~NOT_FStruct. Ignored.
|
||||
cpp_extend_destructors.i:65: Warning 521: Illegal destructor name ~NOT_GStruct. Ignored.
|
||||
cpp_extend_destructors.i:72: Warning 521: Illegal destructor name ~NOT_HStruct. Ignored.
|
||||
cpp_extend_destructors.i:81: Warning 521: Illegal destructor name ~NOT_IStruct. Ignored.
|
||||
cpp_extend_destructors.i:86: Warning 521: Illegal destructor name ~NOT_JStruct. Ignored.
|
||||
cpp_extend_destructors.i:92: Warning 521: Illegal destructor name ~NOT_KStruct. Ignored.
|
||||
cpp_extend_destructors.i:99: Warning 521: Illegal destructor name ~NOT_LStruct< int >. Ignored.
|
||||
cpp_extend_destructors.i:99: Warning 521: Illegal destructor name ~NOT_LStruct< short >. Ignored.
|
||||
|
||||
:::::::::::::::::::::::::::::::: cpp_extend_redefine.i :::::::::::::::::::::::::::::::::::
|
||||
cpp_extend_redefine.i:9: Warning 302: Identifier 'bar' redefined by %extend (ignored),
|
||||
cpp_extend_redefine.i:5: Warning 302: %extend definition of 'bar'.
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ swig_typemap_old
|
|||
# Files run in C++ mode
|
||||
CPPFILES='
|
||||
cpp_bad_extern
|
||||
cpp_extend_destructors
|
||||
cpp_extend_redefine
|
||||
cpp_extend_undefined
|
||||
cpp_inline_namespace
|
||||
|
|
|
|||
|
|
@ -20,20 +20,21 @@ namespace Space {
|
|||
typedef struct {
|
||||
int ivar;
|
||||
} DStruct;
|
||||
|
||||
}
|
||||
|
||||
typedef struct tagEStruct {
|
||||
int ivar;
|
||||
} EStruct;
|
||||
|
||||
namespace Space {
|
||||
template<typename T>
|
||||
struct FFStruct {
|
||||
int ivar;
|
||||
};
|
||||
}
|
||||
%}
|
||||
|
||||
%extend Junk {
|
||||
void thingy() {}
|
||||
}
|
||||
%inline %{
|
||||
struct Junk {};
|
||||
%}
|
||||
namespace Space {
|
||||
|
||||
%extend tagAStruct {
|
||||
|
|
@ -103,3 +104,22 @@ namespace Space {
|
|||
}
|
||||
}
|
||||
|
||||
namespace Space {
|
||||
%extend FFStruct {
|
||||
FFStruct(int ivar0) {
|
||||
Space::FFStruct<T> *s = new Space::FFStruct<T>();
|
||||
s->ivar = ivar0;
|
||||
global = ivar0;
|
||||
return s;
|
||||
}
|
||||
~FFStruct() {
|
||||
global = -$self->ivar;
|
||||
delete $self;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
%template(FStruct) Space::FFStruct<long>;
|
||||
%template(GStruct) Space::FFStruct<char>;
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,12 @@ public class extend_constructor_destructor_runme {
|
|||
checkGlobal(30);
|
||||
DStruct d = new DStruct(40);
|
||||
checkGlobal(40);
|
||||
EStruct e = new EStruct(50);
|
||||
checkGlobal(50);
|
||||
FStruct f = new FStruct(60);
|
||||
checkGlobal(60);
|
||||
GStruct g = new GStruct(70);
|
||||
checkGlobal(70);
|
||||
|
||||
a.delete();
|
||||
checkGlobal(-10);
|
||||
|
|
@ -29,6 +35,12 @@ public class extend_constructor_destructor_runme {
|
|||
checkGlobal(-30);
|
||||
d.delete();
|
||||
checkGlobal(-40);
|
||||
e.delete();
|
||||
checkGlobal(-50);
|
||||
f.delete();
|
||||
checkGlobal(-60);
|
||||
g.delete();
|
||||
checkGlobal(-70);
|
||||
}
|
||||
|
||||
public static void checkGlobal(int val) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue