From e84097f46b69b50660f96046a7c9eba8b6731264 Mon Sep 17 00:00:00 2001 From: Enric Tejedor Saavedra <enric.tejedor.saavedra@cern.ch> Date: Thu, 14 Mar 2019 10:29:15 +0100 Subject: [PATCH] [Exp PyROOT] Implement and test converter for TString& --- .../pyroot_experimental/PyROOT/test/tstring_converter.py | 7 +++++++ .../pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx | 1 + .../cppyy/patches/tstring_converter.patch | 5 +++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/bindings/pyroot_experimental/PyROOT/test/tstring_converter.py b/bindings/pyroot_experimental/PyROOT/test/tstring_converter.py index c8d3eb57762..97c9b666a91 100644 --- a/bindings/pyroot_experimental/PyROOT/test/tstring_converter.py +++ b/bindings/pyroot_experimental/PyROOT/test/tstring_converter.py @@ -31,6 +31,13 @@ class TStringConverter(unittest.TestCase): self.check_type_conversion() def test_by_reference(self): + ROOT.gInterpreter.Declare(""" + const char* myfun(TString &s) { return s.Data(); } + """) + + self.check_type_conversion() + + def test_by_const_reference(self): ROOT.gInterpreter.Declare(""" const char* myfun(const TString &s) { return s.Data(); } """) diff --git a/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx b/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx index e1b49618a0b..56d486d3654 100644 --- a/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx +++ b/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx @@ -2070,6 +2070,7 @@ public: // factories for special cases gf["TString"] = (cf_t)+[](long) { return new TStringConverter{}; }; + gf["TString&"] = (cf_t)+[](long) { return new TStringConverter{}; }; gf["const TString&"] = (cf_t)+[](long) { return new TStringConverter{}; }; gf["const char*"] = (cf_t)+[](long) { return new CStringConverter{}; }; gf["const char[]"] = (cf_t)+[](long) { return new CStringConverter{}; }; diff --git a/bindings/pyroot_experimental/cppyy/patches/tstring_converter.patch b/bindings/pyroot_experimental/cppyy/patches/tstring_converter.patch index f8e0f93a5b7..7b9ac8435bf 100644 --- a/bindings/pyroot_experimental/cppyy/patches/tstring_converter.patch +++ b/bindings/pyroot_experimental/cppyy/patches/tstring_converter.patch @@ -1,5 +1,5 @@ diff --git a/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx b/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx -index a470a41..e1b4961 100644 +index a470a41..56d486d 100644 --- a/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx +++ b/bindings/pyroot_experimental/cppyy/CPyCppyy/src/Converters.cxx @@ -1026,6 +1026,7 @@ bool CPyCppyy::name##Converter::ToMemory(PyObject* value, void* address) \ @@ -10,11 +10,12 @@ index a470a41..e1b4961 100644 CPPYY_IMPL_STRING_AS_PRIMITIVE_CONVERTER(STLString, std::string, c_str, size) CPPYY_IMPL_STRING_AS_PRIMITIVE_CONVERTER(STLStringViewBase, std::string_view, data, size) bool CPyCppyy::STLStringViewConverter::SetArg( -@@ -2068,6 +2069,8 @@ public: +@@ -2068,6 +2069,9 @@ public: gf["const ULong64_t&"] = gf["const unsigned long long&"]; // factories for special cases + gf["TString"] = (cf_t)+[](long) { return new TStringConverter{}; }; ++ gf["TString&"] = (cf_t)+[](long) { return new TStringConverter{}; }; + gf["const TString&"] = (cf_t)+[](long) { return new TStringConverter{}; }; gf["const char*"] = (cf_t)+[](long) { return new CStringConverter{}; }; gf["const char[]"] = (cf_t)+[](long) { return new CStringConverter{}; }; -- GitLab