From c1026e00046b9c11e7846aab6f558780bf9fab5c Mon Sep 17 00:00:00 2001 From: Axel Naumann <Axel.Naumann@cern.ch> Date: Tue, 1 Dec 2015 14:47:21 +0100 Subject: [PATCH] ROOT-7825: dereference address for "*&". --- bindings/pyroot/src/Converters.cxx | 4 ++-- bindings/pyroot/src/Converters.h | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/bindings/pyroot/src/Converters.cxx b/bindings/pyroot/src/Converters.cxx index f14f6217ef6..2648630120d 100644 --- a/bindings/pyroot/src/Converters.cxx +++ b/bindings/pyroot/src/Converters.cxx @@ -1021,7 +1021,7 @@ Bool_t PyROOT::TCppObjectPtrConverter::SetArg( // set pointer (may be null) and declare success para.fValue.fVoidp = &((ObjectProxy*)pyobject)->fObject; - para.fTypeCode = 'p'; + para.fTypeCode = fIsReference ? 'V' : 'p'; return kTRUE; } @@ -1372,7 +1372,7 @@ PyROOT::TConverter* PyROOT::CreateConverter( const std::string& fullType, Long_t else // -- CLING WORKAROUND if ( cpd == "**" || cpd == "*&" || cpd == "&*" ) - result = new TCppObjectPtrConverter( klass, control ); + result = new TCppObjectPtrConverter( klass, control, cpd[1] == '&'); else if ( cpd == "*" && size <= 0 ) result = new TCppObjectConverter( klass, control ); else if ( cpd == "&" ) diff --git a/bindings/pyroot/src/Converters.h b/bindings/pyroot/src/Converters.h index b19d03e3773..1b4d61b5ce5 100644 --- a/bindings/pyroot/src/Converters.h +++ b/bindings/pyroot/src/Converters.h @@ -209,12 +209,16 @@ namespace PyROOT { class TCppObjectPtrConverter : public TCppObjectConverter { public: - using TCppObjectConverter::TCppObjectConverter; + TCppObjectPtrConverter( Cppyy::TCppType_t klass, Bool_t keepControl, Bool_t isReference) : + TCppObjectConverter(klass, keepControl), + fIsReference(isReference) {} public: virtual Bool_t SetArg( PyObject*, TParameter&, TCallContext* ctxt = 0 ); virtual PyObject* FromMemory( void* address ); virtual Bool_t ToMemory( PyObject* value, void* address ); + protected: + Bool_t fIsReference; }; class TCppObjectArrayConverter : public TCppObjectConverter { -- GitLab