summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-10-30 13:04:54 -0700
committerChanho Park <chanho61.park@samsung.com>2014-12-11 19:00:15 +0900
commit11de24e3b46636390e81d680827bb541634d5d6a (patch)
treed745bc0201f5e67ac19a3c202a38d5a9424fa1fe
parent4b7d643389d1458ea53c7c08b17650a3889880f2 (diff)
downloadboost-11de24e3b46636390e81d680827bb541634d5d6a.tar.gz
boost-11de24e3b46636390e81d680827bb541634d5d6a.tar.bz2
boost-11de24e3b46636390e81d680827bb541634d5d6a.zip
no type punning
-rw-r--r--libs/python/src/dict.cpp4
-rw-r--r--libs/python/src/list.cpp4
-rw-r--r--libs/python/src/long.cpp15
-rw-r--r--libs/python/src/object/class.cpp8
-rw-r--r--libs/python/src/str.cpp10
-rw-r--r--libs/python/src/tuple.cpp5
6 files changed, 28 insertions, 18 deletions
diff --git a/libs/python/src/dict.cpp b/libs/python/src/dict.cpp
index 77d840d455..5e196ff678 100644
--- a/libs/python/src/dict.cpp
+++ b/libs/python/src/dict.cpp
@@ -28,9 +28,9 @@ namespace
detail::new_reference dict_base::call(object const& arg_)
{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyDict_Type };
return (detail::new_reference)PyObject_CallFunction(
- (PyObject*)&PyDict_Type, const_cast<char*>("(O)"),
- arg_.ptr());
+ pun.pop, const_cast<char*>("(O)"), arg_.ptr());
}
dict_base::dict_base()
diff --git a/libs/python/src/list.cpp b/libs/python/src/list.cpp
index 77e616881a..69f6da4753 100644
--- a/libs/python/src/list.cpp
+++ b/libs/python/src/list.cpp
@@ -10,11 +10,11 @@ namespace boost { namespace python { namespace detail {
detail::new_non_null_reference list_base::call(object const& arg_)
{
+ union{ PyTypeObject *ptop; PyObject *pop; }pun = { &PyList_Type };
return (detail::new_non_null_reference)
(expect_non_null)(
PyObject_CallFunction(
- (PyObject*)&PyList_Type, const_cast<char*>("(O)"),
- arg_.ptr()));
+ pun.pop, const_cast<char*>("(O)"), arg_.ptr()));
}
list_base::list_base()
diff --git a/libs/python/src/long.cpp b/libs/python/src/long.cpp
index 1ec8ebc011..fcba9d4006 100644
--- a/libs/python/src/long.cpp
+++ b/libs/python/src/long.cpp
@@ -8,16 +8,16 @@ namespace boost { namespace python { namespace detail {
new_non_null_reference long_base::call(object const& arg_)
{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyLong_Type };
return (detail::new_non_null_reference)PyObject_CallFunction(
- (PyObject*)&PyLong_Type, const_cast<char*>("(O)"),
- arg_.ptr());
+ pun.pop, const_cast<char*>("(O)"), arg_.ptr());
}
new_non_null_reference long_base::call(object const& arg_, object const& base)
{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyLong_Type };
return (detail::new_non_null_reference)PyObject_CallFunction(
- (PyObject*)&PyLong_Type, const_cast<char*>("(OO)"),
- arg_.ptr(), base.ptr());
+ pun.pop, const_cast<char*>("(OO)"), arg_.ptr(), base.ptr());
}
long_base::long_base()
@@ -25,7 +25,12 @@ long_base::long_base()
detail::new_reference(
PyObject_CallFunction((PyObject*)&PyLong_Type, const_cast<char*>("()")))
)
-{}
+{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyLong_Type };
+ object(detail::new_reference(
+ PyObject_CallFunction(pun.pop, const_cast<char*>("()"))));
+}
+
long_base::long_base(object_cref arg)
: object(long_base::call(arg))
diff --git a/libs/python/src/object/class.cpp b/libs/python/src/object/class.cpp
index aeef688e28..179ec98dab 100644
--- a/libs/python/src/object/class.cpp
+++ b/libs/python/src/object/class.cpp
@@ -616,9 +616,11 @@ namespace objects
void class_base::add_property(
char const* name, object const& fget, char const* docstr)
{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyProperty_Type };
+
object property(
(python::detail::new_reference)
- PyObject_CallFunction((PyObject*)&PyProperty_Type, const_cast<char*>("Osss"), fget.ptr(), 0, 0, docstr));
+ PyObject_CallFunction(pun.pop, const_cast<char*>("Osss"), fget.ptr(), 0, 0, docstr));
this->setattr(name, property);
}
@@ -626,9 +628,11 @@ namespace objects
void class_base::add_property(
char const* name, object const& fget, object const& fset, char const* docstr)
{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyProperty_Type };
+
object property(
(python::detail::new_reference)
- PyObject_CallFunction((PyObject*)&PyProperty_Type, const_cast<char*>("OOss"), fget.ptr(), fset.ptr(), 0, docstr));
+ PyObject_CallFunction(pun.pop, const_cast<char*>("OOss"), fget.ptr(), fset.ptr(), 0, docstr));
this->setattr(name, property);
}
diff --git a/libs/python/src/str.cpp b/libs/python/src/str.cpp
index 0bc225aa22..1b7e59cd9b 100644
--- a/libs/python/src/str.cpp
+++ b/libs/python/src/str.cpp
@@ -9,14 +9,14 @@ namespace boost { namespace python { namespace detail {
detail::new_reference str_base::call(object const& arg_)
{
- return (detail::new_reference)PyObject_CallFunction(
#if PY_VERSION_HEX >= 0x03000000
- (PyObject*)&PyUnicode_Type,
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyUnicode_Type };
#else
- (PyObject*)&PyString_Type,
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyString_Type };
#endif
- const_cast<char*>("(O)"),
- arg_.ptr());
+
+ return (detail::new_reference)PyObject_CallFunction(
+ pun.pop, const_cast<char*>("(O)"), arg_.ptr());
}
str_base::str_base()
diff --git a/libs/python/src/tuple.cpp b/libs/python/src/tuple.cpp
index 6719713b73..1c38d904c8 100644
--- a/libs/python/src/tuple.cpp
+++ b/libs/python/src/tuple.cpp
@@ -8,9 +8,10 @@ namespace boost { namespace python { namespace detail {
detail::new_reference tuple_base::call(object const& arg_)
{
+ union { PyTypeObject *ptop; PyObject *pop; }pun = { &PyTuple_Type };
+
return (detail::new_reference)PyObject_CallFunction(
- (PyObject*)&PyTuple_Type, const_cast<char*>("(O)"),
- arg_.ptr());
+ pun.pop, const_cast<char*>("(O)"), arg_.ptr());
}
tuple_base::tuple_base()