$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r53285 - in sandbox-branches/bhy/py3k: boost/python boost/python/object libs/python/src
From: divinekid_at_[hidden]
Date: 2009-05-26 13:05:56
Author: bhy
Date: 2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
New Revision: 53285
URL: http://svn.boost.org/trac/boost/changeset/53285
Log:
more fixes to get testcases work, includes module init and other minor fixes
Text files modified: 
   sandbox-branches/bhy/py3k/boost/python/enum.hpp                 |     4 ++++                                    
   sandbox-branches/bhy/py3k/boost/python/module_init.hpp          |    37 +++++++++++++++++++++++--------------   
   sandbox-branches/bhy/py3k/boost/python/object/make_instance.hpp |     2 +-                                      
   sandbox-branches/bhy/py3k/libs/python/src/exec.cpp              |    10 +++++++++-                              
   sandbox-branches/bhy/py3k/libs/python/src/object_operators.cpp  |     8 ++++++++                                
   sandbox-branches/bhy/py3k/libs/python/src/object_protocol.cpp   |    10 ++++++++--                              
   6 files changed, 53 insertions(+), 18 deletions(-)
Modified: sandbox-branches/bhy/py3k/boost/python/enum.hpp
==============================================================================
--- sandbox-branches/bhy/py3k/boost/python/enum.hpp	(original)
+++ sandbox-branches/bhy/py3k/boost/python/enum.hpp	2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
@@ -79,7 +79,11 @@
 template <class T>
 void enum_<T>::construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data)
 {
+#if PY_VERSION_HEX >= 0x03000000
+    T x = static_cast<T>(PyLong_AS_LONG(obj));
+#else
     T x = static_cast<T>(PyInt_AS_LONG(obj));
+#endif
     void* const storage = ((converter::rvalue_from_python_storage<T>*)data)->storage.bytes;
     new (storage) T(x);
     data->convertible = storage;
Modified: sandbox-branches/bhy/py3k/boost/python/module_init.hpp
==============================================================================
--- sandbox-branches/bhy/py3k/boost/python/module_init.hpp	(original)
+++ sandbox-branches/bhy/py3k/boost/python/module_init.hpp	2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
@@ -18,36 +18,45 @@
 // TODO(bhy) Take care of this later.
 // But any reseaon we don't use BOOST_PYTHON_DECL here?
 
-#  if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(BOOST_PYTHON_STATIC_MODULE)
+#  if PY_VERSION_HEX >= 0x03000000
+
+#   define _BOOST_PYTHON_MODULE_INIT(name)              \
+PyObject* PyInit_##name()      \
+{                                                       \
+    return boost::python::detail::init_module(          \
+            #name,&init_module_##name);                 \
+}                                                       \
+void init_module_##name()
+
+#  else
 
-#   define BOOST_PYTHON_MODULE_INIT(name)               \
-void init_module_##name();                              \
-extern "C" __declspec(dllexport) void init##name()      \
+#   define _BOOST_PYTHON_MODULE_INIT(name)              \
+void init##name()                                       \
 {                                                       \
     boost::python::detail::init_module(                 \
         #name,&init_module_##name);                     \
 }                                                       \
 void init_module_##name()
 
+#  endif
+
+#  if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(BOOST_PYTHON_STATIC_MODULE)
+
+#   define BOOST_PYTHON_MODULE_INIT(name)                           \
+void init_module_##name();                                          \
+extern "C" __declspec(dllexport) _BOOST_PYTHON_MODULE_INIT(name)
+
 #  elif BOOST_PYTHON_USE_GCC_SYMBOL_VISIBILITY
 
 #   define BOOST_PYTHON_MODULE_INIT(name)                               \
 void init_module_##name();                                              \
-extern "C" __attribute__ ((visibility("default"))) void init##name()    \
-{                                                                       \
-    boost::python::detail::init_module(#name, &init_module_##name);     \
-}                                                                       \
-void init_module_##name()
+extern "C" __attribute__ ((visibility("default"))) _BOOST_PYTHON_MODULE_INIT(name)
 
 #  else
 
 #   define BOOST_PYTHON_MODULE_INIT(name)                               \
 void init_module_##name();                                              \
-extern "C"  void init##name()                                           \
-{                                                                       \
-    boost::python::detail::init_module(#name, &init_module_##name);     \
-}                                                                       \
-void init_module_##name()
+extern "C" _BOOST_PYTHON_MODULE_INIT(name)
 
 #  endif
 
Modified: sandbox-branches/bhy/py3k/boost/python/object/make_instance.hpp
==============================================================================
--- sandbox-branches/bhy/py3k/boost/python/object/make_instance.hpp	(original)
+++ sandbox-branches/bhy/py3k/boost/python/object/make_instance.hpp	2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
@@ -43,7 +43,7 @@
               
             // Note the position of the internally-stored Holder,
             // for the sake of destruction
-            instance->ob_size = offsetof(instance_t, storage);
+            Py_SIZE(instance) = offsetof(instance_t, storage);
 
             // Release ownership of the python object
             protect.cancel();
Modified: sandbox-branches/bhy/py3k/libs/python/src/exec.cpp
==============================================================================
--- sandbox-branches/bhy/py3k/libs/python/src/exec.cpp	(original)
+++ sandbox-branches/bhy/py3k/libs/python/src/exec.cpp	2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
@@ -38,11 +38,19 @@
 {
   // should be 'char const *' but older python versions don't use 'const' yet.
   char *f = python::extract<char *>(filename);
+#if PY_VERSION_HEX >= 0x03000000
+  // TODO(bhy) temporary workaround for Python 3.
+  // should figure out a way to avoid binary incompatibilities as the Python 2
+  // version did.
+  FILE *fs = fopen(f, "r");
+#else
   // Let python open the file to avoid potential binary incompatibilities.
   PyObject *pyfile = PyFile_FromString(f, const_cast<char*>("r"));
   if (!pyfile) throw std::invalid_argument(std::string(f) + " : no such file");
   python::handle<> file(pyfile);
-  PyObject* result = PyRun_File(PyFile_AsFile(file.get()),
+  FILE *fs = PyFile_AsFile(file.get());
+#endif
+  PyObject* result = PyRun_File(fs,
                 f,
                 Py_file_input,
                 global.ptr(), local.ptr());
Modified: sandbox-branches/bhy/py3k/libs/python/src/object_operators.cpp
==============================================================================
--- sandbox-branches/bhy/py3k/libs/python/src/object_operators.cpp	(original)
+++ sandbox-branches/bhy/py3k/libs/python/src/object_operators.cpp	2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
@@ -38,7 +38,11 @@
 BOOST_PYTHON_BINARY_OPERATOR(+, Add)
 BOOST_PYTHON_BINARY_OPERATOR(-, Subtract)
 BOOST_PYTHON_BINARY_OPERATOR(*, Multiply)
+#if PY_VERSION_HEX >= 0x03000000
+BOOST_PYTHON_BINARY_OPERATOR(/, TrueDivide)
+#else
 BOOST_PYTHON_BINARY_OPERATOR(/, Divide)
+#endif
 BOOST_PYTHON_BINARY_OPERATOR(%, Remainder)
 BOOST_PYTHON_BINARY_OPERATOR(<<, Lshift)
 BOOST_PYTHON_BINARY_OPERATOR(>>, Rshift)
@@ -58,7 +62,11 @@
 BOOST_PYTHON_INPLACE_OPERATOR(+, Add)
 BOOST_PYTHON_INPLACE_OPERATOR(-, Subtract)
 BOOST_PYTHON_INPLACE_OPERATOR(*, Multiply)
+#if PY_VERSION_HEX >= 0x03000000
+BOOST_PYTHON_INPLACE_OPERATOR(/, TrueDivide)
+#else
 BOOST_PYTHON_INPLACE_OPERATOR(/, Divide)
+#endif
 BOOST_PYTHON_INPLACE_OPERATOR(%, Remainder)
 BOOST_PYTHON_INPLACE_OPERATOR(<<, Lshift)
 BOOST_PYTHON_INPLACE_OPERATOR(>>, Rshift)
Modified: sandbox-branches/bhy/py3k/libs/python/src/object_protocol.cpp
==============================================================================
--- sandbox-branches/bhy/py3k/libs/python/src/object_protocol.cpp	(original)
+++ sandbox-branches/bhy/py3k/libs/python/src/object_protocol.cpp	2009-05-26 13:05:53 EDT (Tue, 26 May 2009)
@@ -103,6 +103,7 @@
   static PyObject *
   apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
   {
+#if PY_VERSION_HEX < 0x03000000
       PyTypeObject *tp = u->ob_type;
       PySequenceMethods *sq = tp->tp_as_sequence;
 
@@ -114,7 +115,9 @@
               return NULL;
           return PySequence_GetSlice(u, ilow, ihigh);
       }
-      else {
+      else 
+#endif
+      {
           PyObject *slice = PySlice_New(v, w, NULL);
           if (slice != NULL) {
               PyObject *res = PyObject_GetItem(u, slice);
@@ -130,6 +133,7 @@
   assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
       /* u[v:w] = x */
   {
+#if PY_VERSION_HEX < 0x03000000
       PyTypeObject *tp = u->ob_type;
       PySequenceMethods *sq = tp->tp_as_sequence;
 
@@ -144,7 +148,9 @@
           else
               return PySequence_SetSlice(u, ilow, ihigh, x);
       }
-      else {
+      else 
+#endif
+      {
           PyObject *slice = PySlice_New(v, w, NULL);
           if (slice != NULL) {
               int res;