2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-26 06:42:27 +00:00

Work around some gcc-2.95.x bugs

Optimize code slightly by eliminating temporaries


[SVN r14185]
This commit is contained in:
Dave Abrahams
2002-06-19 19:18:21 +00:00
parent 913d2984ce
commit d07454659a
5 changed files with 48 additions and 44 deletions

View File

@@ -28,13 +28,15 @@ struct attribute_policies : const_attribute_policies
template <class U>
inline object_attribute object_operators<U>::attr(char const* name)
{
return object_attribute(*static_cast<U*>(this), object(name));
object const& x = *static_cast<U*>(this);
return object_attribute(x, object(name));
}
template <class U>
inline const_object_attribute object_operators<U>::attr(char const* name) const
{
return const_object_attribute(*static_cast<U const*>(this), object(name));
object const& x = *static_cast<U const*>(this);
return const_object_attribute(x, object(name));
}

View File

@@ -66,14 +66,14 @@ namespace api
# include <boost/python/preprocessed/object_call.hpp>
# endif
# define BOOST_PYTHON_OBJECT_CALL(nargs,ignored) \
template <BOOST_PP_ENUM_PARAMS(nargs, class A)> \
typename dependent<object,A0>::type \
operator()(BOOST_PYTHON_ENUM_PARAMS2(nargs, (A,const& a))) const \
{ \
typedef typename dependent<object,A0>::type obj; \
obj const& f = *static_cast<U const*>(this); \
return call<obj>(f.ptr().get(), BOOST_PP_ENUM_PARAMS(nargs, a)); \
# define BOOST_PYTHON_OBJECT_CALL(nargs,ignored) \
template <BOOST_PP_ENUM_PARAMS(nargs, class A)> \
typename dependent<object,A0>::type \
operator()(BOOST_PYTHON_ENUM_PARAMS2(nargs, (A,const& a))) const \
{ \
typedef typename dependent<object,A0>::type obj; \
U const& self = *static_cast<U const*>(this); \
return call<obj>(converter::get_managed_object(self), BOOST_PP_ENUM_PARAMS(nargs, a)); \
}
BOOST_PP_REPEAT_FROM_TO_2ND(

View File

@@ -29,14 +29,16 @@ template <class U>
inline object_item
object_operators<U>::operator[](self_cref key)
{
return object_item(*static_cast<U*>(this), key);
object const& x = *static_cast<U*>(this);
return object_item(x, key);
}
template <class U>
inline const_object_item
object_operators<U>::operator[](self_cref key) const
{
return const_object_item(*static_cast<U const*>(this), key);
object const& x = *static_cast<U const*>(this);
return const_object_item(x, key);
}
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300

View File

@@ -11,121 +11,120 @@ typename dependent<object,A0>::type
operator()(A0 const&a0)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0);
}
template<class A0,class A1>
typename dependent<object,A0>::type
operator()(A0 const&a0,A1 const&a1)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1);
}
template<class A0,class A1,class A2>
typename dependent<object,A0>::type
operator()(A0 const&a0,A1 const&a1,A2 const&a2)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2);
}
template<class A0,class A1,class A2,class A3>
typename dependent<object,A0>::type
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3);
}
template<class A0,class A1,class A2,class A3,class A4>
typename dependent<object,A0>::type
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4);
}
template<class A0,class A1,class A2,class A3,class A4,class A5>
typename dependent<object,A0>::type
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5);
}
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6>
typename dependent<object,A0>::type
operator()(A0 const&a0,A1 const&a1,A2 const&a2,A3 const&a3,A4 const&a4,A5 const&a5,A6 const&a6)const
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6);
}
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7);
}
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8);
}
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);
}
template<class A0,class A1,class A2,class A3,class A4,class A5,class A6,class A7,class A8,class A9,class A10>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);
}
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>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);
}
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>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);
}
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>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13);
}
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>
typename dependent<object,A0>::type
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
{
typedef typename dependent<object,A0>::type obj;
obj const&f=*static_cast<U const*>(this);
return call<obj>(f.ptr().get(),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
U const&self=*static_cast<U const*>(this);
return call<obj>(converter::get_managed_object(self),a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14);
}
#endif // OBJECT_CALL_DWA2002612_HPP

View File

@@ -28,7 +28,8 @@ class proxy : public object_operators<proxy<Policies> >
template <class T>
inline proxy const& operator=(T const& rhs) const
{
Policies::set(m_target, m_key, python::object(rhs));
python::object const& x(rhs);
Policies::set(m_target, m_key, x);
return *this;
}