Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 330 - (show 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 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 {}