From 30ef9c6418ec79e31d5fa5b057c3816e70766642 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Thu, 25 Jul 2002 15:20:06 +0000 Subject: [PATCH] back_reference<> uses object instead of handle<> [SVN r14600] --- include/boost/python/back_reference.hpp | 11 ++++++----- include/boost/python/operators2.hpp | 3 ++- test/back_reference.cpp | 4 ++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/boost/python/back_reference.hpp b/include/boost/python/back_reference.hpp index 3ad7d240..5e9f02ba 100644 --- a/include/boost/python/back_reference.hpp +++ b/include/boost/python/back_reference.hpp @@ -7,6 +7,7 @@ # define BACK_REFERENCE_DWA2002510_HPP # include +# include namespace boost { namespace python { @@ -17,10 +18,10 @@ struct back_reference typedef T type; back_reference(PyObject*, T); - handle<> reference() const; + object const& source() const; T get() const; private: - handle<> m_reference; + object m_source; T m_value; }; @@ -75,15 +76,15 @@ class is_back_reference // template back_reference::back_reference(PyObject* p, T x) - : m_reference(python::borrowed(p)) + : m_source(detail::borrowed_reference(p)) , m_value(x) { } template -handle<> back_reference::reference() const +object const& back_reference::source() const { - return m_reference; + return m_source; } template diff --git a/include/boost/python/operators2.hpp b/include/boost/python/operators2.hpp index d4bffb05..8c56abf7 100755 --- a/include/boost/python/operators2.hpp +++ b/include/boost/python/operators2.hpp @@ -15,6 +15,7 @@ # include # include # include +# include # include # include @@ -251,7 +252,7 @@ namespace detail \ execute(back_reference l, R const& r) \ { \ l.get() op r; \ - return l.reference().release(); \ + return python::incref(l.source().ptr()); \ } \ }; \ static char const* name() { return "__" #id "__"; } \ diff --git a/test/back_reference.cpp b/test/back_reference.cpp index 577aa6ef..39f9127e 100644 --- a/test/back_reference.cpp +++ b/test/back_reference.cpp @@ -75,9 +75,9 @@ namespace boost { namespace python }} // prove that back_references get initialized with the right PyObject* -PyObject* y_identity(back_reference y) +object y_identity(back_reference y) { - return y.reference().release(); + return y.source(); } // prove that back_references contain the right value