Skip to content

Commit d074546

Browse files
committed
Work around some gcc-2.95.x bugs
Optimize code slightly by eliminating temporaries [SVN r14185]
1 parent 913d298 commit d074546

5 files changed

Lines changed: 48 additions & 44 deletions

File tree

include/boost/python/object_attributes.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ struct attribute_policies : const_attribute_policies
2828
template <class U>
2929
inline object_attribute object_operators<U>::attr(char const* name)
3030
{
31-
return object_attribute(*static_cast<U*>(this), object(name));
31+
object const& x = *static_cast<U*>(this);
32+
return object_attribute(x, object(name));
3233
}
3334

3435
template <class U>
3536
inline const_object_attribute object_operators<U>::attr(char const* name) const
3637
{
37-
return const_object_attribute(*static_cast<U const*>(this), object(name));
38+
object const& x = *static_cast<U const*>(this);
39+
return const_object_attribute(x, object(name));
3840
}
3941

4042

include/boost/python/object_core.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ namespace api
6666
# include <boost/python/preprocessed/object_call.hpp>
6767
# endif
6868

69-
# define BOOST_PYTHON_OBJECT_CALL(nargs,ignored) \
70-
template <BOOST_PP_ENUM_PARAMS(nargs, class A)> \
71-
typename dependent<object,A0>::type \
72-
operator()(BOOST_PYTHON_ENUM_PARAMS2(nargs, (A,const& a))) const \
73-
{ \
74-
typedef typename dependent<object,A0>::type obj; \
75-
obj const& f = *static_cast<U const*>(this); \
76-
return call<obj>(f.ptr().get(), BOOST_PP_ENUM_PARAMS(nargs, a)); \
69+
# define BOOST_PYTHON_OBJECT_CALL(nargs,ignored) \
70+
template <BOOST_PP_ENUM_PARAMS(nargs, class A)> \
71+
typename dependent<object,A0>::type \
72+
operator()(BOOST_PYTHON_ENUM_PARAMS2(nargs, (A,const& a))) const \
73+
{ \
74+
typedef typename dependent<object,A0>::type obj; \
75+
U const& self = *static_cast<U const*>(this); \
76+
return call<obj>(converter::get_managed_object(self), BOOST_PP_ENUM_PARAMS(nargs, a)); \
7777
}
7878

7979
BOOST_PP_REPEAT_FROM_TO_2ND(

include/boost/python/object_items.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,16 @@ template <class U>
2929
inline object_item
3030
object_operators<U>::operator[](self_cref key)
3131
{
32-
return object_item(*static_cast<U*>(this), key);
32+
object const& x = *static_cast<U*>(this);
33+
return object_item(x, key);
3334
}
3435

3536
template <class U>
3637
inline const_object_item
3738
object_operators<U>::operator[](self_cref key) const
3839
{
39-
return const_object_item(*static_cast<U const*>(this), key);
40+
object const& x = *static_cast<U const*>(this);
41+
return const_object_item(x, key);
4042
}
4143

4244
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300

include/boost/python/preprocessed/object_call.hpp

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,121 +11,120 @@ typename dependent<object,A0>::type
1111
operator()(A0 const&a0)const
1212
{
1313
typedef typename dependent<object,A0>::type obj;
14-
obj const&f=*static_cast<U const*>(this);
15-
return call<obj>(f.ptr().get(),a0);
14+
U const&self=*static_cast<U const*>(this);
15+
return call<obj>(converter::get_managed_object(self),a0);
1616
}
1717
template<class A0,class A1>
1818
typename dependent<object,A0>::type
1919
operator()(A0 const&a0,A1 const&a1)const
2020
{
2121
typedef typename dependent<object,A0>::type obj;
22-
obj const&f=*static_cast<U const*>(this);
23-
return call<obj>(f.ptr().get(),a0,a1);
22+
U const&self=*static_cast<U const*>(this);
23+
return call<obj>(converter::get_managed_object(self),a0,a1);
2424
}
2525
template<class A0,class A1,class A2>
2626
typename dependent<object,A0>::type
2727
operator()(A0 const&a0,A1 const&a1,A2 const&a2)const
2828
{
2929
typedef typename dependent<object,A0>::type obj;
30-
obj const&f=*static_cast<U const*>(this);
31-
return call<obj>(f.ptr().get(),a0,a1,a2);
30+
U const&self=*static_cast<U const*>(this);
31+
return call<obj>(converter::get_managed_object(self),a0,a1,a2);
3232
}
3333
template<class A0,class A1,class A2,class A3>
3434
typename dependent<object,A0>::type
3535
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3)const
3636
{
3737
typedef typename dependent<object,A0>::type obj;
38-
obj const&f=*static_cast<U const*>(this);
39-
return call<obj>(f.ptr().get(),a0,a1,a2,a3);
38+
U const&self=*static_cast<U const*>(this);
39+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3);
4040
}
4141
template<class A0,class A1,class A2,class A3,class A4>
4242
typename dependent<object,A0>::type
4343
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4)const
4444
{
4545
typedef typename dependent<object,A0>::type obj;
46-
obj const&f=*static_cast<U const*>(this);
47-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4);
46+
U const&self=*static_cast<U const*>(this);
47+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4);
4848
}
4949
template<class A0,class A1,class A2,class A3,class A4,class A5>
5050
typename dependent<object,A0>::type
5151
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5)const
5252
{
5353
typedef typename dependent<object,A0>::type obj;
54-
obj const&f=*static_cast<U const*>(this);
55-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5);
54+
U const&self=*static_cast<U const*>(this);
55+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5);
5656
}
5757
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6>
5858
typename dependent<object,A0>::type
5959
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6)const
6060
{
6161
typedef typename dependent<object,A0>::type obj;
62-
obj const&f=*static_cast<U const*>(this);
63-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6);
62+
U const&self=*static_cast<U const*>(this);
63+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6);
6464
}
6565
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
6666
typename dependent<object,A0>::type
6767
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
6868
{
6969
typedef typename dependent<object,A0>::type obj;
70-
obj const&f=*static_cast<U const*>(this);
71-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7);
70+
U const&self=*static_cast<U const*>(this);
71+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7);
7272
}
7373
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
7474
typename dependent<object,A0>::type
7575
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
7676
{
7777
typedef typename dependent<object,A0>::type obj;
78-
obj const&f=*static_cast<U const*>(this);
79-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8);
78+
U const&self=*static_cast<U const*>(this);
79+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8);
8080
}
8181
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
8282
typename dependent<object,A0>::type
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)const
8484
{
8585
typedef typename dependent<object,A0>::type obj;
86-
obj const&f=*static_cast<U const*>(this);
87-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
86+
U const&self=*static_cast<U const*>(this);
87+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
8888
}
8989
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10>
9090
typename dependent<object,A0>::type
9191
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
9292
{
9393
typedef typename dependent<object,A0>::type obj;
94-
obj const&f=*static_cast<U const*>(this);
95-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
94+
U const&self=*static_cast<U const*>(this);
95+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
9696
}
9797
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>
9898
typename dependent<object,A0>::type
9999
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
100100
{
101101
typedef typename dependent<object,A0>::type obj;
102-
obj const&f=*static_cast<U const*>(this);
103-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
102+
U const&self=*static_cast<U const*>(this);
103+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
104104
}
105105
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>
106106
typename dependent<object,A0>::type
107107
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
108108
{
109109
typedef typename dependent<object,A0>::type obj;
110-
obj const&f=*static_cast<U const*>(this);
111-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
110+
U const&self=*static_cast<U const*>(this);
111+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
112112
}
113113
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>
114114
typename dependent<object,A0>::type
115115
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
116116
{
117117
typedef typename dependent<object,A0>::type obj;
118-
obj const&f=*static_cast<U const*>(this);
119-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
118+
U const&self=*static_cast<U const*>(this);
119+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
120120
}
121121
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>
122122
typename dependent<object,A0>::type
123123
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
124124
{
125125
typedef typename dependent<object,A0>::type obj;
126-
obj const&f=*static_cast<U const*>(this);
127-
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
126+
U const&self=*static_cast<U const*>(this);
127+
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
128128
}
129-
130129

131130
#endif // OBJECT_CALL_DWA2002612_HPP

include/boost/python/proxy.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ class proxy : public object_operators<proxy<Policies> >
2828
template <class T>
2929
inline proxy const& operator=(T const& rhs) const
3030
{
31-
Policies::set(m_target, m_key, python::object(rhs));
31+
python::object const& x(rhs);
32+
Policies::set(m_target, m_key, x);
3233
return *this;
3334
}
3435

0 commit comments

Comments
 (0)