From 5bca0635363fc677576a4313d36ac0645df781fa Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 18 May 2015 09:53:13 -0700 Subject: [PATCH] [Go] Fix bug with ignored destructor--generated code did not compile. --- Examples/test-suite/director_ignore.i | 17 +++++++++- Source/Modules/go.cxx | 49 ++++++++++++++------------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/Examples/test-suite/director_ignore.i b/Examples/test-suite/director_ignore.i index 57cbc13d8..edb657320 100644 --- a/Examples/test-suite/director_ignore.i +++ b/Examples/test-suite/director_ignore.i @@ -10,6 +10,7 @@ %ignore OverloadedProtectedMethod(int n, int xoffset = 0, int yoffset = 0); %ignore DIgnoreConstructor(bool b); %ignore DIgnoreOnlyConstructor(bool b); +%ignore DIgnoreDestructor::~DIgnoreDestructor; %ignore Pointers; %ignore References; %ignore PublicMethod1; @@ -101,6 +102,13 @@ class DIgnoreOnlyConstructor DIgnoreOnlyConstructor(bool b) {} }; +class DIgnoreDestructor +{ + public: + DIgnoreDestructor() {} + virtual ~DIgnoreDestructor() {} +}; + %{ class DIgnoreConstructor { @@ -118,5 +126,12 @@ class DIgnoreOnlyConstructor private: // Hide constructor DIgnoreOnlyConstructor(bool b) {} }; -%} +class DIgnoreDestructor +{ + public: + DIgnoreDestructor() {} + virtual ~DIgnoreDestructor() {} +}; + +%} diff --git a/Source/Modules/go.cxx b/Source/Modules/go.cxx index 502b41091..5cdb7baf2 100644 --- a/Source/Modules/go.cxx +++ b/Source/Modules/go.cxx @@ -3891,36 +3891,37 @@ private: String *director_struct_name = NewString("_swig_Director"); Append(director_struct_name, cn); - Printv(f_c_directors_h, " virtual ~SwigDirector_", class_name, "()", NULL); - - String *throws = buildThrow(n); - if (throws) { - Printv(f_c_directors_h, " ", throws, NULL); - } - - Printv(f_c_directors_h, ";\n", NULL); - - String *director_sig = NewString(""); - - Printv(director_sig, "SwigDirector_", class_name, "::~SwigDirector_", class_name, "()", NULL); - - if (throws) { - Printv(director_sig, " ", throws, NULL); - Delete(throws); - } - - Printv(director_sig, "\n", NULL); - Printv(director_sig, "{\n", NULL); - if (!is_ignored) { + Printv(f_c_directors_h, " virtual ~SwigDirector_", class_name, "()", NULL); + + String *throws = buildThrow(n); + if (throws) { + Printv(f_c_directors_h, " ", throws, NULL); + } + + Printv(f_c_directors_h, ";\n", NULL); + + String *director_sig = NewString(""); + + Printv(director_sig, "SwigDirector_", class_name, "::~SwigDirector_", class_name, "()", NULL); + + if (throws) { + Printv(director_sig, " ", throws, NULL); + Delete(throws); + } + + Printv(director_sig, "\n", NULL); + Printv(director_sig, "{\n", NULL); + makeDirectorDestructorWrapper(go_name, director_struct_name, director_sig); Printv(f_c_directors, " delete swig_mem;\n", NULL); + + Printv(f_c_directors, "}\n\n", NULL); + + Delete(director_sig); } - Printv(f_c_directors, "}\n\n", NULL); - - Delete(director_sig); Delete(go_name); Delete(cn); Delete(director_struct_name);