Skip to content

Commit 8aba486

Browse files
committed
Fix tru64cxx problems, remove operator*/-> from object
[SVN r14173]
1 parent 66f2cd8 commit 8aba486

6 files changed

Lines changed: 60 additions & 59 deletions

File tree

include/boost/python/object_core.hpp

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,14 @@ namespace api
3232
typedef proxy<const_item_policies> const_object_item;
3333
typedef proxy<item_policies> object_item;
3434

35-
// A way to turn a conrete type T into a type dependent on U. This
36-
// keeps conforming compilers from complaining about returning an
37-
// incomplete T from a template member function (which must be
38-
// defined in the class body to keep MSVC happy).
39-
template <class T, class U>
40-
struct dependent
41-
{
42-
typedef T type;
43-
};
44-
4535
class object
4636
{
4737
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1200
4838
typedef object const& self_cref;
4939
# else
5040
typedef object self_cref;
51-
# endif
41+
# endif
42+
5243
public:
5344
# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
5445
// copy constructor without NULL checking, for efficiency
@@ -78,7 +69,6 @@ namespace api
7869
)
7970
)
8071
{
81-
8272
}
8373

8474
// Throw error_already_set() if the handle is null.
@@ -116,30 +106,29 @@ namespace api
116106
object_item operator[](self_cref);
117107

118108
template <class T>
119-
# if BOOST_MSVC != 1300
120-
typename dependent<const_object_item,T>::type
121-
# else
122109
const_object_item
123-
# endif
124110
operator[](T const& key) const
111+
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
112+
;
113+
# else
125114
{
126115
return (*this)[object(key)];
127116
}
117+
# endif
128118

129119
template <class T>
130-
# if BOOST_MSVC != 1300
131-
typename dependent<object_item,T>::type
132-
# else
133120
object_item
134-
# endif
135121
operator[](T const& key)
122+
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
123+
;
124+
# else
136125
{
137126
return (*this)[object(key)];
138127
}
128+
# endif
139129

140130
// Underlying object access
141-
PyObject* operator->() const;
142-
PyObject& operator*() const;
131+
handle<> const& ptr() const;
143132

144133
public: // implementation detail -- for internal use only
145134
object(null_ok<detail::borrowed<PyObject> >*);
@@ -218,7 +207,7 @@ inline object::object(handle<> const& x)
218207
# ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
219208
// copy constructor without NULL checking, for efficiency
220209
inline object::object(object const& rhs)
221-
: m_ptr(python::allow_null(python::borrowed(&*rhs)))
210+
: m_ptr(python::allow_null(python::borrowed(rhs.m_ptr.get())))
222211
{}
223212
# endif
224213

@@ -238,24 +227,19 @@ inline object::object(object::new_pyobject_reference* p)
238227
: m_ptr((PyObject*)p)
239228
{}
240229

241-
inline PyObject* object::operator->() const
242-
{
243-
return m_ptr.operator->();
244-
}
245-
246-
inline PyObject& object::operator*() const
230+
inline handle<> const& object::ptr() const
247231
{
248-
return *m_ptr;
232+
return m_ptr;
249233
}
250234

251235
inline object::operator object::bool_type() const
252236
{
253-
return PyObject_IsTrue(&**this) ? &object::m_ptr : 0;
237+
return PyObject_IsTrue(m_ptr.get()) ? &object::m_ptr : 0;
254238
}
255239

256240
inline bool object::operator!() const
257241
{
258-
return !PyObject_IsTrue(&**this);
242+
return !PyObject_IsTrue(m_ptr.get());
259243
}
260244

261245
//
@@ -302,7 +286,7 @@ namespace converter
302286

303287
inline PyObject* get_managed_object(object const& x)
304288
{
305-
return &*x;
289+
return x.ptr().get();
306290
}
307291
}
308292

include/boost/python/object_items.hpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,22 @@ inline const_object_item object::operator[](object::self_cref key) const
3535
return const_object_item(*this, key);
3636
}
3737

38+
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
39+
template <class T>
40+
inline const_object_item
41+
object::operator[](T const& key) const
42+
{
43+
return (*this)[object(key)];
44+
}
45+
46+
template <class T>
47+
inline object_item
48+
object::operator[](T const& key)
49+
{
50+
return (*this)[object(key)];
51+
}
52+
# endif
53+
3854

3955
inline object const_item_policies::get(object const& target, object const& key)
4056
{

include/boost/python/object_operators.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010

1111
namespace boost { namespace python { namespace api {
1212

13-
# define BOOST_PYTHON_COMPARE_OP(op, opid) \
14-
template <class L, class R> \
15-
bool operator op(L const& l, R const& r) \
16-
{ \
17-
return PyObject_RichCompareBool(&*object(l), &*object(r), opid); \
13+
# define BOOST_PYTHON_COMPARE_OP(op, opid) \
14+
template <class L, class R> \
15+
bool operator op(L const& l, R const& r) \
16+
{ \
17+
return PyObject_RichCompareBool( \
18+
object(l).ptr().get(), object(r).ptr().get(), opid); \
1819
}
1920
BOOST_PYTHON_COMPARE_OP(>, Py_GT)
2021
BOOST_PYTHON_COMPARE_OP(>=, Py_GE)

include/boost/python/preprocessed/object_call.hpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,91 +10,91 @@ template<class A0>
1010
object
1111
operator()(A0 const&a0)const
1212
{
13-
return call<object>(&**this,a0);
13+
return call<object>(this->ptr().get(),a0);
1414
}
1515
template<class A0,class A1>
1616
object
1717
operator()(A0 const&a0,A1 const&a1)const
1818
{
19-
return call<object>(&**this,a0,a1);
19+
return call<object>(this->ptr().get(),a0,a1);
2020
}
2121
template<class A0,class A1,class A2>
2222
object
2323
operator()(A0 const&a0,A1 const&a1,A2 const&a2)const
2424
{
25-
return call<object>(&**this,a0,a1,a2);
25+
return call<object>(this->ptr().get(),a0,a1,a2);
2626
}
2727
template<class A0,class A1,class A2,class A3>
2828
object
2929
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3)const
3030
{
31-
return call<object>(&**this,a0,a1,a2,a3);
31+
return call<object>(this->ptr().get(),a0,a1,a2,a3);
3232
}
3333
template<class A0,class A1,class A2,class A3,class A4>
3434
object
3535
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4)const
3636
{
37-
return call<object>(&**this,a0,a1,a2,a3,a4);
37+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4);
3838
}
3939
template<class A0,class A1,class A2,class A3,class A4,class A5>
4040
object
4141
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5)const
4242
{
43-
return call<object>(&**this,a0,a1,a2,a3,a4,a5);
43+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5);
4444
}
4545
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6>
4646
object
4747
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6)const
4848
{
49-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6);
49+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6);
5050
}
5151
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
5252
object
5353
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7)const
5454
{
55-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7);
55+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7);
5656
}
5757
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
5858
object
5959
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8)const
6060
{
61-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8);
61+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8);
6262
}
6363
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
6464
object
6565
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9)const
6666
{
67-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
67+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
6868
}
6969
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10>
7070
object
7171
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10)const
7272
{
73-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
73+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
7474
}
7575
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11>
7676
object
7777
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11)const
7878
{
79-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
79+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
8080
}
8181
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12>
8282
object
8383
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12)const
8484
{
85-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
85+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
8686
}
8787
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13>
8888
object
8989
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13)const
9090
{
91-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
91+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
9292
}
9393
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10,class A11,class A12,class A13,class A14>
9494
object
9595
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6,A7 const&a7,A8 const&a8,A9 const&a9,A10 const&a10,A11 const&a11,A12 const&a12,A13 const&a13,A14 const&a14)const
9696
{
97-
return call<object>(&**this,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
97+
return call<object>(this->ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
9898
}
9999

100100

src/object_operators.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ BOOST_PYTHON_DECL object operator op(object const& l, object const& r) \
1313
{ \
1414
return object( \
1515
(object::new_pyobject_reference*) \
16-
PyNumber_##name(&*l, &*r)); \
16+
PyNumber_##name(l.ptr().get(), r.ptr().get())); \
1717
}
1818

1919
BOOST_PYTHON_BINARY_OPERATOR(+, Add)
@@ -33,7 +33,7 @@ BOOST_PYTHON_DECL object& operator op##=(object& l, object const& r) \
3333
{ \
3434
return l = object( \
3535
(object::new_pyobject_reference*) \
36-
PyNumber_InPlace##name(&*l, &*r)); \
36+
PyNumber_InPlace##name(l.ptr().get(), r.ptr().get())); \
3737
}
3838

3939
BOOST_PYTHON_INPLACE_OPERATOR(+, Add)

src/object_protocol.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,23 @@ namespace boost { namespace python { namespace api {
1212

1313
BOOST_PYTHON_DECL object getattr(object const& target, object const& key)
1414
{
15-
return object((object::new_pyobject_reference*)PyObject_GetAttr(&*target, &*key));
15+
return object((object::new_pyobject_reference*)PyObject_GetAttr(target.ptr().get(), key.ptr().get()));
1616
}
1717

1818
BOOST_PYTHON_DECL void setattr(object const& target, object const& key, object const& value)
1919
{
20-
if (PyObject_SetAttr(&*target, &*key, &*value) == -1)
20+
if (PyObject_SetAttr(target.ptr().get(), key.ptr().get(), value.ptr().get()) == -1)
2121
throw_error_already_set();
2222
}
2323

2424
BOOST_PYTHON_DECL object getitem(object const& target, object const& key)
2525
{
26-
return object((object::new_pyobject_reference*)PyObject_GetItem(&*target, &*key));
26+
return object((object::new_pyobject_reference*)PyObject_GetItem(target.ptr().get(), key.ptr().get()));
2727
}
2828

2929
BOOST_PYTHON_DECL void setitem(object const& target, object const& key, object const& value)
3030
{
31-
if (PyObject_SetItem(&*target, &*key, &*value) == -1)
31+
if (PyObject_SetItem(target.ptr().get(), key.ptr().get(), value.ptr().get()) == -1)
3232
throw_error_already_set();
3333
}
3434

0 commit comments

Comments
 (0)