From 4e57c5536d165db868a6cb0ba7d1518ca5955f45 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Fri, 5 Jun 2020 10:25:20 -0600 Subject: [PATCH] Fix wrapping of virtual comparison operators with directors Closes #1642. --- Examples/test-suite/common.mk | 1 + .../test-suite/director_comparison_operators.i | 16 ++++++++++++++++ .../director_comparison_operators_runme.py | 11 +++++++++++ Source/Modules/directors.cxx | 4 ---- 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 Examples/test-suite/director_comparison_operators.i create mode 100644 Examples/test-suite/python/director_comparison_operators_runme.py diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index e77f09c86..55cbd2cce 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -184,6 +184,7 @@ CPP_TEST_CASES += \ director_classes \ director_classic \ director_constructor \ + director_comparison_operators \ director_conversion_operators \ director_default \ director_detect \ diff --git a/Examples/test-suite/director_comparison_operators.i b/Examples/test-suite/director_comparison_operators.i new file mode 100644 index 000000000..9577847e1 --- /dev/null +++ b/Examples/test-suite/director_comparison_operators.i @@ -0,0 +1,16 @@ +%module(directors="1") director_comparison_operators + +%include "std_string.i" +%feature("director"); + +%inline %{ +class Foo { +public: + virtual ~Foo() { } + virtual bool operator==(const Foo&) const = 0; + virtual bool operator>=(const Foo&) const = 0; + virtual bool operator<=(const Foo&) const = 0; + virtual bool operator!=(const Foo&) const = 0; + virtual std::string test(const char *foo="a=1,b=2") { return foo; } +}; +%} diff --git a/Examples/test-suite/python/director_comparison_operators_runme.py b/Examples/test-suite/python/director_comparison_operators_runme.py new file mode 100644 index 000000000..4fe733098 --- /dev/null +++ b/Examples/test-suite/python/director_comparison_operators_runme.py @@ -0,0 +1,11 @@ +import director_comparison_operators + + +class PyFoo(director_comparison_operators.Foo): + pass + + +a = PyFoo() + +if a.test() != "a=1,b=2": + raise RuntimeError, a.test() diff --git a/Source/Modules/directors.cxx b/Source/Modules/directors.cxx index a91d5fd9a..3504b2c49 100644 --- a/Source/Modules/directors.cxx +++ b/Source/Modules/directors.cxx @@ -175,10 +175,6 @@ String *Swig_method_decl(SwigType *return_base_type, SwigType *decl, const_Strin if (qualifiers) Printv(result, " ", qualifiers, NIL); - // Reformat result to how it has been historically - Replaceall(result, ",", ", "); - Replaceall(result, "=", " = "); - Delete(args_string); Delete(popped_decl); Delete(qualifiers);