From 4e57c5536d165db868a6cb0ba7d1518ca5955f45 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Fri, 5 Jun 2020 10:25:20 -0600 Subject: Fix wrapping of virtual comparison operators with directors Closes #1642. --- Examples/test-suite/common.mk | 1 + Examples/test-suite/director_comparison_operators.i | 16 ++++++++++++++++ .../python/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); -- cgit v1.2.1 From b1b13d7d0a5cedf93ceac4d07d7dbad708f4bde3 Mon Sep 17 00:00:00 2001 From: Zackery Spytz Date: Sun, 7 Jun 2020 13:56:07 -0600 Subject: Use %rename --- Examples/test-suite/director_comparison_operators.i | 7 +++++++ Examples/test-suite/ocaml/Makefile.in | 1 + 2 files changed, 8 insertions(+) diff --git a/Examples/test-suite/director_comparison_operators.i b/Examples/test-suite/director_comparison_operators.i index 9577847e1..f2251ed6d 100644 --- a/Examples/test-suite/director_comparison_operators.i +++ b/Examples/test-suite/director_comparison_operators.i @@ -3,6 +3,13 @@ %include "std_string.i" %feature("director"); +#if !defined(SWIGLUA) && !defined(SWIGR) +%rename(EqualEqual) operator ==; +%rename(NotEqual) operator !=; +%rename(LessThanEqual) operator <=; +%rename(GreaterThanEqual) operator >=; +#endif + %inline %{ class Foo { public: diff --git a/Examples/test-suite/ocaml/Makefile.in b/Examples/test-suite/ocaml/Makefile.in index 775b1ea71..3d7230920 100644 --- a/Examples/test-suite/ocaml/Makefile.in +++ b/Examples/test-suite/ocaml/Makefile.in @@ -20,6 +20,7 @@ apply_strings \ cpp_enum \ default_constructor \ director_binary_string \ +director_comparison_operators \ director_enum \ director_primitives \ director_redefined \ -- cgit v1.2.1