Magellan Linux

Annotation of /trunk/boost/patches/boost-1.33.1-ssize_t.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 330 - (hide annotations) (download)
Mon Sep 3 15:40:50 2007 UTC (16 years, 8 months ago) by niro
File size: 12375 byte(s)
-fixes x86_64 builts with python-2.5

1 niro 330 diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/boost/python/converter/builtin_converters.hpp boost/boost/python/converter/builtin_converters.hpp
2     --- boost-2/boost/python/converter/builtin_converters.hpp 2007-01-13 07:32:49.000000000 +0200
3     +++ boost/boost/python/converter/builtin_converters.hpp 2007-01-13 09:44:06.000000000 +0200
4     @@ -7,6 +7,7 @@
5     # include <boost/python/detail/prefix.hpp>
6     # include <boost/python/detail/none.hpp>
7     # include <boost/python/handle.hpp>
8     +# include <boost/python/ssize_t.hpp>
9     # include <boost/implicit_cast.hpp>
10     # include <string>
11     # include <complex>
12     @@ -115,9 +116,9 @@ BOOST_PYTHON_TO_PYTHON_BY_VALUE(unsigned
13    
14     BOOST_PYTHON_TO_PYTHON_BY_VALUE(char, converter::do_return_to_python(x))
15     BOOST_PYTHON_TO_PYTHON_BY_VALUE(char const*, converter::do_return_to_python(x))
16     -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::string, ::PyString_FromStringAndSize(x.data(),implicit_cast<int>(x.size())))
17     +BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::string, ::PyString_FromStringAndSize(x.data(),implicit_cast<ssize_t>(x.size())))
18     # ifndef BOOST_NO_STD_WSTRING
19     -BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::wstring, ::PyUnicode_FromWideChar(x.data(),implicit_cast<int>(x.size())))
20     +BOOST_PYTHON_TO_PYTHON_BY_VALUE(std::wstring, ::PyUnicode_FromWideChar(x.data(),implicit_cast<ssize_t>(x.size())))
21     # endif
22     BOOST_PYTHON_TO_PYTHON_BY_VALUE(float, ::PyFloat_FromDouble(x))
23     BOOST_PYTHON_TO_PYTHON_BY_VALUE(double, ::PyFloat_FromDouble(x))
24     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/boost/python/detail/api_placeholder.hpp boost/boost/python/detail/api_placeholder.hpp
25     --- boost-2/boost/python/detail/api_placeholder.hpp 2007-01-13 07:32:49.000000000 +0200
26     +++ boost/boost/python/detail/api_placeholder.hpp 2007-01-13 09:58:19.000000000 +0200
27     @@ -5,11 +5,13 @@
28     #ifndef BOOST_PYTHON_API_PLACE_HOLDER_HPP
29     #define BOOST_PYTHON_API_PLACE_HOLDER_HPP
30    
31     +# include <boost/python/ssize_t.hpp>
32     +
33     namespace boost { namespace python {
34    
35     - inline long len(object const& obj)
36     + inline ssize_t len(object const& obj)
37     {
38     - long result = PyObject_Length(obj.ptr());
39     + ssize_t result = PyObject_Length(obj.ptr());
40     if (PyErr_Occurred()) throw_error_already_set();
41     return result;
42     }
43     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/boost/python/list.hpp boost/boost/python/list.hpp
44     --- boost-2/boost/python/list.hpp 2007-01-13 07:32:49.000000000 +0200
45     +++ boost/boost/python/list.hpp 2007-01-13 09:26:21.000000000 +0200
46     @@ -9,6 +9,7 @@
47    
48     # include <boost/python/object.hpp>
49     # include <boost/python/converter/pytype_object_mgr_traits.hpp>
50     +# include <boost/python/ssize_t.hpp>
51    
52     namespace boost { namespace python {
53    
54     @@ -24,11 +25,11 @@ namespace detail
55    
56     long index(object_cref value) const; // return index of first occurrence of value
57    
58     - void insert(int index, object_cref); // insert object before index
59     + void insert(ssize_t index, object_cref); // insert object before index
60     void insert(object const& index, object_cref);
61    
62     object pop(); // remove and return item at index (default last)
63     - object pop(long index);
64     + object pop(ssize_t index);
65     object pop(object const& index);
66    
67     void remove(object_cref value); // remove first occurrence of value
68     @@ -86,7 +87,7 @@ class list : public detail::list_base
69     }
70    
71     template <class T>
72     - void insert(int index, T const& x) // insert object before index
73     + void insert(ssize_t index, T const& x) // insert object before index
74     {
75     base::insert(index, object(x));
76     }
77     @@ -98,7 +99,7 @@ class list : public detail::list_base
78     }
79    
80     object pop() { return base::pop(); }
81     - object pop(long index) { return base::pop(index); }
82     + object pop(ssize_t index) { return base::pop(index); }
83    
84     template <class T>
85     object pop(T const& index)
86     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/boost/python/object.hpp boost/boost/python/object.hpp
87     --- boost-2/boost/python/object.hpp 2007-01-13 07:32:49.000000000 +0200
88     +++ boost/boost/python/object.hpp 2007-01-13 09:57:33.000000000 +0200
89     @@ -6,6 +6,7 @@
90     # define OBJECT_DWA2002612_HPP
91    
92     # include <boost/python/detail/prefix.hpp>
93     +# include <boost/python/ssize_t.hpp>
94     # include <boost/python/object_core.hpp>
95     # include <boost/python/object_attributes.hpp>
96     # include <boost/python/object_items.hpp>
97     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/boost/python/ssize_t.hpp boost/boost/python/ssize_t.hpp
98     --- boost-2/boost/python/ssize_t.hpp 1970-01-01 02:00:00.000000000 +0200
99     +++ boost/boost/python/ssize_t.hpp 2007-01-13 09:47:10.000000000 +0200
100     @@ -0,0 +1,29 @@
101     +// Copyright Ralf W. Grosse-Kunstleve & David Abrahams 2006.
102     +// Distributed under the Boost Software License, Version 1.0. (See
103     +// accompanying file LICENSE_1_0.txt or copy at
104     +// http://www.boost.org/LICENSE_1_0.txt)
105     +
106     +#ifndef BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP
107     +# define BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP
108     +
109     +# include <boost/python/detail/prefix.hpp>
110     +
111     +namespace boost { namespace python {
112     +
113     +#if PY_VERSION_HEX >= 0x02050000
114     +
115     +typedef Py_ssize_t ssize_t;
116     +ssize_t const ssize_t_max = PY_SSIZE_T_MAX;
117     +ssize_t const ssize_t_min = PY_SSIZE_T_MIN;
118     +
119     +#else
120     +
121     +typedef int ssize_t;
122     +ssize_t const ssize_t_max = INT_MAX;
123     +ssize_t const ssize_t_min = INT_MIN;
124     +
125     +#endif
126     +
127     +}} // namespace boost::python
128     +
129     +#endif // BOOST_PYTHON_SSIZE_T_RWGK20060924_HPP
130     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/libs/python/src/list.cpp boost/libs/python/src/list.cpp
131     --- boost-2/libs/python/src/list.cpp 2007-01-13 07:36:25.000000000 +0200
132     +++ boost/libs/python/src/list.cpp 2007-01-13 09:28:09.000000000 +0200
133     @@ -3,6 +3,7 @@
134     // accompanying file LICENSE_1_0.txt or copy at
135     // http://www.boost.org/LICENSE_1_0.txt)
136     #include <boost/python/list.hpp>
137     +#include <boost/python/ssize_t.hpp>
138    
139     namespace boost { namespace python { namespace detail {
140    
141     @@ -53,7 +54,7 @@ long list_base::index(object_cref value)
142     return result;
143     }
144    
145     -void list_base::insert(int index, object_cref item)
146     +void list_base::insert(ssize_t index, object_cref item)
147     {
148     if (PyList_CheckExact(this->ptr()))
149     {
150     @@ -79,7 +80,7 @@ object list_base::pop()
151     return this->attr("pop")();
152     }
153    
154     -object list_base::pop(long index)
155     +object list_base::pop(ssize_t index)
156     {
157     return this->pop(object(index));
158     }
159     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/libs/python/src/object/class.cpp boost/libs/python/src/object/class.cpp
160     --- boost-2/libs/python/src/object/class.cpp 2007-01-13 07:36:26.000000000 +0200
161     +++ boost/libs/python/src/object/class.cpp 2007-01-13 09:28:10.000000000 +0200
162     @@ -20,6 +20,7 @@
163     #include <boost/python/self.hpp>
164     #include <boost/python/dict.hpp>
165     #include <boost/python/str.hpp>
166     +#include <boost/python/ssize_t.hpp>
167     #include <functional>
168     #include <vector>
169     #include <cstddef>
170     @@ -480,13 +481,14 @@ namespace objects
171     // were declared, we'll use our class_type() as the single base
172     // class.
173     std::size_t const num_bases = (std::max)(num_types - 1, static_cast<std::size_t>(1));
174     - handle<> bases(PyTuple_New(num_bases));
175     + assert(num_bases <= ssize_t_max);
176     + handle<> bases(PyTuple_New(static_cast<ssize_t>(num_bases)));
177    
178     for (std::size_t i = 1; i <= num_bases; ++i)
179     {
180     type_handle c = (i >= num_types) ? class_type() : get_class(types[i]);
181     // PyTuple_SET_ITEM steals this reference
182     - PyTuple_SET_ITEM(bases.get(), i - 1, upcast<PyObject>(c.release()));
183     + PyTuple_SET_ITEM(bases.get(), static_cast<ssize_t>(i - 1), upcast<PyObject>(c.release()));
184     }
185    
186     // Call the class metatype to create a new class
187     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/libs/python/src/object/function.cpp boost/libs/python/src/object/function.cpp
188     --- boost-2/libs/python/src/object/function.cpp 2007-01-13 07:36:26.000000000 +0200
189     +++ boost/libs/python/src/object/function.cpp 2007-01-13 09:28:11.000000000 +0200
190     @@ -14,6 +14,7 @@
191     #include <boost/python/extract.hpp>
192     #include <boost/python/tuple.hpp>
193     #include <boost/python/list.hpp>
194     +#include <boost/python/ssize_t.hpp>
195    
196     #include <boost/python/detail/api_placeholder.hpp>
197     #include <boost/python/detail/signature.hpp>
198     @@ -60,7 +61,7 @@ function::function(
199     = max_arity > num_keywords ? max_arity - num_keywords : 0;
200    
201    
202     - unsigned tuple_size = num_keywords ? max_arity : 0;
203     + ssize_t tuple_size = num_keywords ? max_arity : 0;
204     m_arg_names = object(handle<>(PyTuple_New(tuple_size)));
205    
206     if (num_keywords != 0)
207     @@ -154,7 +155,9 @@ PyObject* function::call(PyObject* args,
208     else
209     {
210     // build a new arg tuple, will adjust its size later
211     - inner_args = handle<>(PyTuple_New(max_arity));
212     + assert(max_arity <= ssize_t_max);
213     + inner_args = handle<>(
214     + PyTuple_New(static_cast<ssize_t>(max_arity)));
215    
216     // Fill in the positional arguments
217     for (std::size_t i = 0; i < n_unnamed_actual; ++i)
218     @@ -237,7 +240,7 @@ void function::argument_error(PyObject*
219     % make_tuple(this->m_namespace, this->m_name);
220    
221     list actual_args;
222     - for (int i = 0; i < PyTuple_Size(args); ++i)
223     + for (ssize_t i = 0; i < PyTuple_Size(args); ++i)
224     {
225     char const* name = PyTuple_GetItem(args, i)->ob_type->tp_name;
226     actual_args.append(str(name));
227     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/libs/python/src/object_protocol.cpp boost/libs/python/src/object_protocol.cpp
228     --- boost-2/libs/python/src/object_protocol.cpp 2007-01-13 07:36:25.000000000 +0200
229     +++ boost/libs/python/src/object_protocol.cpp 2007-01-13 09:28:10.000000000 +0200
230     @@ -6,6 +6,7 @@
231     #include <boost/python/object_protocol.hpp>
232     #include <boost/python/errors.hpp>
233     #include <boost/python/object.hpp>
234     +#include <boost/python/ssize_t.hpp>
235    
236     namespace boost { namespace python { namespace api {
237    
238     @@ -106,7 +107,7 @@ namespace // slicing code copied directl
239     PySequenceMethods *sq = tp->tp_as_sequence;
240    
241     if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) {
242     - int ilow = 0, ihigh = INT_MAX;
243     + ssize_t ilow = 0, ihigh = ssize_t_max;
244     if (!_PyEval_SliceIndex(v, &ilow))
245     return NULL;
246     if (!_PyEval_SliceIndex(w, &ihigh))
247     @@ -133,7 +134,7 @@ namespace // slicing code copied directl
248     PySequenceMethods *sq = tp->tp_as_sequence;
249    
250     if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) {
251     - int ilow = 0, ihigh = INT_MAX;
252     + ssize_t ilow = 0, ihigh = ssize_t_max;
253     if (!_PyEval_SliceIndex(v, &ilow))
254     return -1;
255     if (!_PyEval_SliceIndex(w, &ihigh))
256     diff -Nurp -x CVS -x '.#*' -x '*~' -x '*.html' boost-2/libs/python/src/str.cpp boost/libs/python/src/str.cpp
257     --- boost-2/libs/python/src/str.cpp 2007-01-13 07:36:25.000000000 +0200
258     +++ boost/libs/python/src/str.cpp 2007-01-13 09:28:10.000000000 +0200
259     @@ -3,6 +3,7 @@
260     // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
261     #include <boost/python/str.hpp>
262     #include <boost/python/extract.hpp>
263     +#include <boost/python/ssize_t.hpp>
264    
265     namespace boost { namespace python { namespace detail {
266    
267     @@ -21,10 +22,25 @@ str_base::str_base(const char* s)
268     : object(detail::new_reference(::PyString_FromString(s)))
269     {}
270    
271     +namespace {
272     +
273     + ssize_t str_size_as_py_ssize_t(std::size_t n)
274     + {
275     + if (n > ssize_t_max)
276     + {
277     + throw std::range_error("str size > ssize_t_max");
278     + }
279     + return static_cast<ssize_t>(n);
280     + }
281     +
282     +} // namespace <anonymous>
283     +
284     str_base::str_base(char const* start, char const* finish)
285     : object(
286     detail::new_reference(
287     - ::PyString_FromStringAndSize(start, finish - start)
288     + ::PyString_FromStringAndSize(
289     + start, str_size_as_py_ssize_t(finish - start)
290     + )
291     )
292     )
293     {}
294     @@ -32,7 +48,9 @@ str_base::str_base(char const* start, ch
295     str_base::str_base(char const* start, std::size_t length) // new str
296     : object(
297     detail::new_reference(
298     - ::PyString_FromStringAndSize(start, length)
299     + ::PyString_FromStringAndSize(
300     + start, str_size_as_py_ssize_t(length)
301     + )
302     )
303     )
304     {}