add virtual destructors where needed
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@5873 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b8f2bb553a
commit
f6340798c4
22 changed files with 55 additions and 4 deletions
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
class A {
|
class A {
|
||||||
|
public:
|
||||||
|
virtual ~A()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual int x() = 0;
|
virtual int x() = 0;
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,11 @@
|
||||||
|
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
virtual int blah() = 0;
|
virtual ~Foo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int blah() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Bar : public Foo { };
|
class Bar : public Foo { };
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo() { }
|
||||||
virtual int blah() = 0;
|
virtual int blah() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,10 @@
|
||||||
|
|
||||||
struct AbstractBaseClass
|
struct AbstractBaseClass
|
||||||
{
|
{
|
||||||
|
virtual ~AbstractBaseClass()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
virtual bool write(Engine& archive) const = 0;
|
virtual bool write(Engine& archive) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@
|
||||||
template <FieldDim Dim>
|
template <FieldDim Dim>
|
||||||
struct Base
|
struct Base
|
||||||
{
|
{
|
||||||
|
virtual ~Base() {}
|
||||||
|
|
||||||
typedef unsigned int size_type;
|
typedef unsigned int size_type;
|
||||||
typedef Facet<Dim>* facet_ptr;
|
typedef Facet<Dim>* facet_ptr;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,10 @@
|
||||||
%inline %{
|
%inline %{
|
||||||
struct A
|
struct A
|
||||||
{
|
{
|
||||||
|
virtual ~A()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
virtual int foo() = 0;
|
virtual int foo() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
%inline %{
|
%inline %{
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo() { }
|
||||||
virtual char *blah() = 0;
|
virtual char *blah() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,8 @@ int test_prepost(int x, int y) {
|
||||||
%inline %{
|
%inline %{
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo() { }
|
||||||
|
|
||||||
virtual int test_preassert(int x, int y) {
|
virtual int test_preassert(int x, int y) {
|
||||||
if ((x > 0) && (y > 0)) return 1;
|
if ((x > 0) && (y > 0)) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -140,6 +142,7 @@ public:
|
||||||
%inline %{
|
%inline %{
|
||||||
class A {
|
class A {
|
||||||
public:
|
public:
|
||||||
|
virtual ~A() {}
|
||||||
virtual int foo(int a, int b, int c, int d, int e) {
|
virtual int foo(int a, int b, int c, int d, int e) {
|
||||||
if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
|
if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
@ -150,6 +153,7 @@ public:
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
public:
|
public:
|
||||||
|
virtual ~B() {}
|
||||||
virtual int bar(int a, int b, int c, int d, int e) {
|
virtual int bar(int a, int b, int c, int d, int e) {
|
||||||
if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
|
if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@ namespace Foo {
|
||||||
typedef int Integer;
|
typedef int Integer;
|
||||||
class Test2 {
|
class Test2 {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Test2() { }
|
||||||
virtual char *method() {
|
virtual char *method() {
|
||||||
return (char *) "Test2::method";
|
return (char *) "Test2::method";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,11 @@
|
||||||
|
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
virtual Foo *blah() {
|
virtual ~Foo() { }
|
||||||
return this;
|
|
||||||
}
|
virtual Foo *blah() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,4 +23,5 @@ bar2(enum foo2 x) {}
|
||||||
void
|
void
|
||||||
bar3(foo3 x) {}
|
bar3(foo3 x) {}
|
||||||
|
|
||||||
|
|
||||||
%}
|
%}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
/* Define the class internally, but don't tell SWIG about it */
|
/* Define the class internally, but don't tell SWIG about it */
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo() {}
|
||||||
virtual char *blah() {
|
virtual char *blah() {
|
||||||
return (char *) "Foo::blah";
|
return (char *) "Foo::blah";
|
||||||
}
|
}
|
||||||
|
|
@ -21,6 +22,7 @@ class Foo;
|
||||||
|
|
||||||
class Bar : public Foo {
|
class Bar : public Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Bar() {}
|
||||||
virtual char *blah() {
|
virtual char *blah() {
|
||||||
return (char *) "Bar::blah";
|
return (char *) "Bar::blah";
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
public:
|
public:
|
||||||
|
virtual ~A() { }
|
||||||
|
|
||||||
virtual void f(void) = 0;
|
virtual void f(void) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ private:
|
||||||
int x;
|
int x;
|
||||||
public:
|
public:
|
||||||
Foo() { x = 1; }
|
Foo() { x = 1; }
|
||||||
|
virtual ~Foo() {}
|
||||||
virtual int xget() { return x; };
|
virtual int xget() { return x; };
|
||||||
};
|
};
|
||||||
typedef Foo *FooPtr;
|
typedef Foo *FooPtr;
|
||||||
|
|
@ -26,6 +27,7 @@ private:
|
||||||
int y;
|
int y;
|
||||||
public:
|
public:
|
||||||
Bar() { y = 2; }
|
Bar() { y = 2; }
|
||||||
|
virtual ~Bar() {}
|
||||||
virtual int yget() { return y; }
|
virtual int yget() { return y; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -347,6 +347,11 @@ macro(size_t, pfx, sizet)
|
||||||
: var_pchar(0), var_pcharc(0), var_pint(0)
|
: var_pchar(0), var_pcharc(0), var_pint(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual ~Test()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
%test_prim_types_stc(stc_decl, stc);
|
%test_prim_types_stc(stc_decl, stc);
|
||||||
%test_prim_types(var_decl, var);
|
%test_prim_types(var_decl, var);
|
||||||
var_decl(namet, var, namet);
|
var_decl(namet, var, namet);
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ class D : public C {
|
||||||
/* Another abstract class */
|
/* Another abstract class */
|
||||||
class AA {
|
class AA {
|
||||||
public:
|
public:
|
||||||
|
virtual ~AA() { }
|
||||||
virtual void method2() = 0;
|
virtual void method2() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
{
|
{
|
||||||
struct A
|
struct A
|
||||||
{
|
{
|
||||||
|
virtual ~A() { }
|
||||||
virtual int value(A*) = 0;
|
virtual int value(A*) = 0;
|
||||||
int index;
|
int index;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ class MyHandle_Foo2 {
|
||||||
|
|
||||||
class Foo2 {
|
class Foo2 {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo2() {}
|
||||||
virtual int sum(int i, int j) { return i+j; }
|
virtual int sum(int i, int j) { return i+j; }
|
||||||
static int sum(int i, int j, int k);
|
static int sum(int i, int j, int k);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
template<class T> class Foo {
|
template<class T> class Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo() { }
|
||||||
virtual char *blah() {
|
virtual char *blah() {
|
||||||
return (char *) "Foo";
|
return (char *) "Foo";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@
|
||||||
class A
|
class A
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
virtual ~A() { }
|
||||||
|
|
||||||
virtual void say_hi() = 0; // only fails with pure virtual methods
|
virtual void say_hi() = 0; // only fails with pure virtual methods
|
||||||
|
|
||||||
virtual void say_hello(); // this works fine
|
virtual void say_hello(); // this works fine
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
// Inheritance through a typedef name
|
// Inheritance through a typedef name
|
||||||
%module typedef_inherit
|
%module typedef_inherit
|
||||||
|
|
||||||
|
|
||||||
%inline %{
|
%inline %{
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
|
virtual ~Foo () { }
|
||||||
|
|
||||||
virtual char *blah() {
|
virtual char *blah() {
|
||||||
return (char *) "Foo::blah";
|
return (char *) "Foo::blah";
|
||||||
}
|
}
|
||||||
|
|
@ -29,6 +32,7 @@ typedef struct {
|
||||||
} Spam;
|
} Spam;
|
||||||
|
|
||||||
struct Grok : public Spam {
|
struct Grok : public Spam {
|
||||||
|
virtual ~Grok() { }
|
||||||
virtual char *blah() {
|
virtual char *blah() {
|
||||||
return (char *) "Grok::blah";
|
return (char *) "Grok::blah";
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
class Foo {
|
class Foo {
|
||||||
public:
|
public:
|
||||||
int x;
|
int x;
|
||||||
|
virtual ~Foo() { }
|
||||||
virtual Foo* blah() { return this; }
|
virtual Foo* blah() { return this; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue