mirror of https://github.com/python/cpython
Merge ssize_t branch.
This commit is contained in:
parent
4482929734
commit
18e165558b
|
@ -407,7 +407,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
equivalent to the Python expression: type(o).
|
equivalent to the Python expression: type(o).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyObject_Size(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return the size of object o. If the object, o, provides
|
Return the size of object o. If the object, o, provides
|
||||||
|
@ -419,10 +419,10 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
/* For DLL compatibility */
|
/* For DLL compatibility */
|
||||||
#undef PyObject_Length
|
#undef PyObject_Length
|
||||||
PyAPI_FUNC(int) PyObject_Length(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
|
||||||
#define PyObject_Length PyObject_Size
|
#define PyObject_Length PyObject_Size
|
||||||
|
|
||||||
PyAPI_FUNC(int) _PyObject_LengthHint(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) _PyObject_LengthHint(PyObject *o);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return the size of object o. If the object, o, provides
|
Return the size of object o. If the object, o, provides
|
||||||
|
@ -477,7 +477,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
|
PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
|
||||||
const char **buffer,
|
const char **buffer,
|
||||||
int *buffer_len);
|
Py_ssize_t *buffer_len);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Takes an arbitrary object which must support the (character,
|
Takes an arbitrary object which must support the (character,
|
||||||
|
@ -502,7 +502,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
|
PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
|
||||||
const void **buffer,
|
const void **buffer,
|
||||||
int *buffer_len);
|
Py_ssize_t *buffer_len);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Same as PyObject_AsCharBuffer() except that this API expects
|
Same as PyObject_AsCharBuffer() except that this API expects
|
||||||
|
@ -518,7 +518,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
|
PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
|
||||||
void **buffer,
|
void **buffer,
|
||||||
int *buffer_len);
|
Py_ssize_t *buffer_len);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Takes an arbitrary object which must support the (writeable,
|
Takes an arbitrary object which must support the (writeable,
|
||||||
|
@ -911,7 +911,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PySequence_Size(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return the size of sequence object o, or -1 on failure.
|
Return the size of sequence object o, or -1 on failure.
|
||||||
|
@ -920,7 +920,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
/* For DLL compatibility */
|
/* For DLL compatibility */
|
||||||
#undef PySequence_Length
|
#undef PySequence_Length
|
||||||
PyAPI_FUNC(int) PySequence_Length(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
|
||||||
#define PySequence_Length PySequence_Size
|
#define PySequence_Length PySequence_Size
|
||||||
|
|
||||||
|
|
||||||
|
@ -933,7 +933,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, int count);
|
PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return the result of repeating sequence object o count times,
|
Return the result of repeating sequence object o count times,
|
||||||
|
@ -942,14 +942,14 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, int i);
|
PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return the ith element of o, or NULL on failure. This is the
|
Return the ith element of o, or NULL on failure. This is the
|
||||||
equivalent of the Python expression: o[i].
|
equivalent of the Python expression: o[i].
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, int i1, int i2);
|
PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Return the slice of sequence object o between i1 and i2, or
|
Return the slice of sequence object o between i1 and i2, or
|
||||||
|
@ -958,7 +958,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, int i, PyObject *v);
|
PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Assign object v to the ith element of o. Returns
|
Assign object v to the ith element of o. Returns
|
||||||
|
@ -967,7 +967,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, int i);
|
PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Delete the ith element of object v. Returns
|
Delete the ith element of object v. Returns
|
||||||
|
@ -975,7 +975,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
statement: del o[i].
|
statement: del o[i].
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, int i1, int i2,
|
PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
|
||||||
PyObject *v);
|
PyObject *v);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -984,7 +984,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
equivalent of the Python statement: o[i1:i2]=v.
|
equivalent of the Python statement: o[i1:i2]=v.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, int i1, int i2);
|
PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Delete the slice in sequence object, o, from i1 to i2.
|
Delete the slice in sequence object, o, from i1 to i2.
|
||||||
|
@ -1105,7 +1105,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, int count);
|
PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Repeat o1 by count, in-place when possible. Return the resulting
|
Repeat o1 by count, in-place when possible. Return the resulting
|
||||||
|
@ -1125,7 +1125,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
This function always succeeds.
|
This function always succeeds.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyMapping_Size(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Returns the number of keys in object o on success, and -1 on
|
Returns the number of keys in object o on success, and -1 on
|
||||||
|
@ -1135,7 +1135,7 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
||||||
|
|
||||||
/* For DLL compatibility */
|
/* For DLL compatibility */
|
||||||
#undef PyMapping_Length
|
#undef PyMapping_Length
|
||||||
PyAPI_FUNC(int) PyMapping_Length(PyObject *o);
|
PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
|
||||||
#define PyMapping_Length PyMapping_Size
|
#define PyMapping_Length PyMapping_Size
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,15 +17,15 @@ PyAPI_DATA(PyTypeObject) PyBuffer_Type;
|
||||||
#define Py_END_OF_BUFFER (-1)
|
#define Py_END_OF_BUFFER (-1)
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyBuffer_FromObject(PyObject *base,
|
PyAPI_FUNC(PyObject *) PyBuffer_FromObject(PyObject *base,
|
||||||
int offset, int size);
|
Py_ssize_t offset, Py_ssize_t size);
|
||||||
PyAPI_FUNC(PyObject *) PyBuffer_FromReadWriteObject(PyObject *base,
|
PyAPI_FUNC(PyObject *) PyBuffer_FromReadWriteObject(PyObject *base,
|
||||||
int offset,
|
Py_ssize_t offset,
|
||||||
int size);
|
Py_ssize_t size);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyBuffer_FromMemory(void *ptr, int size);
|
PyAPI_FUNC(PyObject *) PyBuffer_FromMemory(void *ptr, Py_ssize_t size);
|
||||||
PyAPI_FUNC(PyObject *) PyBuffer_FromReadWriteMemory(void *ptr, int size);
|
PyAPI_FUNC(PyObject *) PyBuffer_FromReadWriteMemory(void *ptr, Py_ssize_t size);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyBuffer_New(int size);
|
PyAPI_FUNC(PyObject *) PyBuffer_New(Py_ssize_t size);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ static struct PycStringIO_CAPI {
|
||||||
/* Read a string from an input object. If the last argument
|
/* Read a string from an input object. If the last argument
|
||||||
is -1, the remainder will be read.
|
is -1, the remainder will be read.
|
||||||
*/
|
*/
|
||||||
int(*cread)(PyObject *, char **, int);
|
int(*cread)(PyObject *, char **, Py_ssize_t);
|
||||||
|
|
||||||
/* Read a line from an input object. Returns the length of the read
|
/* Read a line from an input object. Returns the length of the read
|
||||||
line as an int and a pointer inside the object buffer as char** (so
|
line as an int and a pointer inside the object buffer as char** (so
|
||||||
|
@ -38,7 +38,7 @@ static struct PycStringIO_CAPI {
|
||||||
int(*creadline)(PyObject *, char **);
|
int(*creadline)(PyObject *, char **);
|
||||||
|
|
||||||
/* Write a string to an output object*/
|
/* Write a string to an output object*/
|
||||||
int(*cwrite)(PyObject *, const char *, int);
|
int(*cwrite)(PyObject *, const char *, Py_ssize_t);
|
||||||
|
|
||||||
/* Get the output object as a Python string (returns new reference). */
|
/* Get the output object as a Python string (returns new reference). */
|
||||||
PyObject *(*cgetvalue)(PyObject *);
|
PyObject *(*cgetvalue)(PyObject *);
|
||||||
|
|
|
@ -148,7 +148,7 @@ PyAPI_FUNC(void) PyEval_ReInitThreads(void);
|
||||||
|
|
||||||
#endif /* !WITH_THREAD */
|
#endif /* !WITH_THREAD */
|
||||||
|
|
||||||
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, int *);
|
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -95,11 +95,11 @@ PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item);
|
||||||
PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key);
|
PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key);
|
||||||
PyAPI_FUNC(void) PyDict_Clear(PyObject *mp);
|
PyAPI_FUNC(void) PyDict_Clear(PyObject *mp);
|
||||||
PyAPI_FUNC(int) PyDict_Next(
|
PyAPI_FUNC(int) PyDict_Next(
|
||||||
PyObject *mp, int *pos, PyObject **key, PyObject **value);
|
PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value);
|
||||||
PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp);
|
PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp);
|
||||||
PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp);
|
PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp);
|
||||||
PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp);
|
PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp);
|
||||||
PyAPI_FUNC(int) PyDict_Size(PyObject *mp);
|
PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp);
|
||||||
PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp);
|
PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp);
|
||||||
PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key);
|
PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key);
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,13 @@ PyAPI_DATA(PyTypeObject) PyInt_Type;
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyInt_FromString(char*, char**, int);
|
PyAPI_FUNC(PyObject *) PyInt_FromString(char*, char**, int);
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
PyAPI_FUNC(PyObject *) PyInt_FromUnicode(Py_UNICODE*, int, int);
|
PyAPI_FUNC(PyObject *) PyInt_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
|
||||||
#endif
|
#endif
|
||||||
PyAPI_FUNC(PyObject *) PyInt_FromLong(long);
|
PyAPI_FUNC(PyObject *) PyInt_FromLong(long);
|
||||||
|
PyAPI_FUNC(PyObject *) PyInt_FromSize_t(size_t);
|
||||||
|
PyAPI_FUNC(PyObject *) PyInt_FromSsize_t(Py_ssize_t);
|
||||||
PyAPI_FUNC(long) PyInt_AsLong(PyObject *);
|
PyAPI_FUNC(long) PyInt_AsLong(PyObject *);
|
||||||
|
PyAPI_FUNC(Py_ssize_t) PyInt_AsSsize_t(PyObject *);
|
||||||
PyAPI_FUNC(unsigned long) PyInt_AsUnsignedLongMask(PyObject *);
|
PyAPI_FUNC(unsigned long) PyInt_AsUnsignedLongMask(PyObject *);
|
||||||
#ifdef HAVE_LONG_LONG
|
#ifdef HAVE_LONG_LONG
|
||||||
PyAPI_FUNC(unsigned PY_LONG_LONG) PyInt_AsUnsignedLongLongMask(PyObject *);
|
PyAPI_FUNC(unsigned PY_LONG_LONG) PyInt_AsUnsignedLongLongMask(PyObject *);
|
||||||
|
|
|
@ -35,7 +35,7 @@ typedef struct {
|
||||||
* Items must normally not be NULL, except during construction when
|
* Items must normally not be NULL, except during construction when
|
||||||
* the list is not yet visible outside the function that builds it.
|
* the list is not yet visible outside the function that builds it.
|
||||||
*/
|
*/
|
||||||
int allocated;
|
Py_ssize_t allocated;
|
||||||
} PyListObject;
|
} PyListObject;
|
||||||
|
|
||||||
PyAPI_DATA(PyTypeObject) PyList_Type;
|
PyAPI_DATA(PyTypeObject) PyList_Type;
|
||||||
|
@ -43,14 +43,14 @@ PyAPI_DATA(PyTypeObject) PyList_Type;
|
||||||
#define PyList_Check(op) PyObject_TypeCheck(op, &PyList_Type)
|
#define PyList_Check(op) PyObject_TypeCheck(op, &PyList_Type)
|
||||||
#define PyList_CheckExact(op) ((op)->ob_type == &PyList_Type)
|
#define PyList_CheckExact(op) ((op)->ob_type == &PyList_Type)
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyList_New(int size);
|
PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size);
|
||||||
PyAPI_FUNC(int) PyList_Size(PyObject *);
|
PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, int);
|
PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyList_SetItem(PyObject *, int, PyObject *);
|
PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *);
|
||||||
PyAPI_FUNC(int) PyList_Insert(PyObject *, int, PyObject *);
|
PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *);
|
||||||
PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *);
|
PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, int, int);
|
PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyList_SetSlice(PyObject *, int, int, PyObject *);
|
PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
|
||||||
PyAPI_FUNC(int) PyList_Sort(PyObject *);
|
PyAPI_FUNC(int) PyList_Sort(PyObject *);
|
||||||
PyAPI_FUNC(int) PyList_Reverse(PyObject *);
|
PyAPI_FUNC(int) PyList_Reverse(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *);
|
PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *);
|
||||||
|
|
|
@ -52,7 +52,7 @@ struct _longobject {
|
||||||
digit ob_digit[1];
|
digit ob_digit[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
PyAPI_FUNC(PyLongObject *) _PyLong_New(int);
|
PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t);
|
||||||
|
|
||||||
/* Return a copy of src. */
|
/* Return a copy of src. */
|
||||||
PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src);
|
PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src);
|
||||||
|
|
|
@ -21,6 +21,11 @@ PyAPI_FUNC(long) PyLong_AsLong(PyObject *);
|
||||||
PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *);
|
PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *);
|
||||||
PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *);
|
PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *);
|
||||||
|
|
||||||
|
/* For use by intobject.c only */
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyLong_AsSsize_t(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_FromSize_t(size_t);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_FromSsize_t(Py_ssize_t);
|
||||||
|
|
||||||
/* _PyLong_AsScaledDouble returns a double x and an exponent e such that
|
/* _PyLong_AsScaledDouble returns a double x and an exponent e such that
|
||||||
the true value is approximately equal to x * 2**(SHIFT*e). e is >= 0.
|
the true value is approximately equal to x * 2**(SHIFT*e). e is >= 0.
|
||||||
x is 0.0 if and only if the input is 0 (in which case, e and x are both
|
x is 0.0 if and only if the input is 0 (in which case, e and x are both
|
||||||
|
@ -43,7 +48,7 @@ PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLongMask(PyObject *);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyLong_FromString(char *, char **, int);
|
PyAPI_FUNC(PyObject *) PyLong_FromString(char *, char **, int);
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, int, int);
|
PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
|
/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
|
||||||
|
|
|
@ -17,7 +17,7 @@ PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *);
|
||||||
PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *);
|
PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *);
|
||||||
PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *);
|
PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *);
|
||||||
PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *);
|
PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *);
|
||||||
PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(char *, int);
|
PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(char *, Py_ssize_t);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,18 @@ extern "C" {
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier
|
||||||
|
to mean Py_ssize_t */
|
||||||
|
#ifdef PY_SSIZE_T_CLEAN
|
||||||
|
#define PyArg_Parse _PyArg_Parse_SizeT
|
||||||
|
#define PyArg_ParseTuple _PyArg_ParseTuple_SizeT
|
||||||
|
#define PyArg_ParseTupleAndKeywords _PyArg_ParseTupleAndKeywords_SizeT
|
||||||
|
#define PyArg_VaParse _PyArg_VaParse_SizeT
|
||||||
|
#define PyArg_VaParseTupleAndKeywords _PyArg_VaParseTupleAndKeywords_SizeT
|
||||||
|
#define PyArg_BuildValue _PyArg_BuildValue_SizeT
|
||||||
|
#define PyArg_VaBuildValue _PyArg_VaBuildValue_SizeT
|
||||||
|
#endif
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
|
PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
|
||||||
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
|
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
|
||||||
PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
|
PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
|
||||||
|
@ -26,6 +38,7 @@ PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *);
|
||||||
PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
|
PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
|
||||||
PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
|
PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
|
||||||
|
|
||||||
|
|
||||||
#define PYTHON_API_VERSION 1012
|
#define PYTHON_API_VERSION 1012
|
||||||
#define PYTHON_API_STRING "1012"
|
#define PYTHON_API_STRING "1012"
|
||||||
/* The API version is maintained (independently from the Python version)
|
/* The API version is maintained (independently from the Python version)
|
||||||
|
@ -77,11 +90,22 @@ PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char
|
||||||
without actually needing a recompile. */
|
without actually needing a recompile. */
|
||||||
#endif /* MS_WINDOWS */
|
#endif /* MS_WINDOWS */
|
||||||
|
|
||||||
|
#if SIZEOF_SIZE_T != SIZEOF_INT
|
||||||
|
/* On a 64-bit system, rename the Py_InitModule4 so that 2.4
|
||||||
|
modules cannot get loaded into a 2.5 interpreter */
|
||||||
|
#define Py_InitModule4 Py_InitModule4_64
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Py_TRACE_REFS
|
#ifdef Py_TRACE_REFS
|
||||||
/* When we are tracing reference counts, rename Py_InitModule4 so
|
/* When we are tracing reference counts, rename Py_InitModule4 so
|
||||||
modules compiled with incompatible settings will generate a
|
modules compiled with incompatible settings will generate a
|
||||||
link-time error. */
|
link-time error. */
|
||||||
#define Py_InitModule4 Py_InitModule4TraceRefs
|
#if SIZEOF_SIZE_T != SIZEOF_INT
|
||||||
|
#undef Py_InitModule4
|
||||||
|
#define Py_InitModule4 Py_InitModule4TraceRefs_64
|
||||||
|
#else
|
||||||
|
#define Py_InitModule4 Py_InitModule4TraceRefs
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) Py_InitModule4(const char *name, PyMethodDef *methods,
|
PyAPI_FUNC(PyObject *) Py_InitModule4(const char *name, PyMethodDef *methods,
|
||||||
|
|
|
@ -92,7 +92,8 @@ whose size is determined when the object is allocated.
|
||||||
*/
|
*/
|
||||||
#define PyObject_VAR_HEAD \
|
#define PyObject_VAR_HEAD \
|
||||||
PyObject_HEAD \
|
PyObject_HEAD \
|
||||||
int ob_size; /* Number of items in variable part */
|
Py_ssize_t ob_size; /* Number of items in variable part */
|
||||||
|
#define Py_INVALID_SIZE (Py_ssize_t)-1
|
||||||
|
|
||||||
/* Nothing is actually declared to be a PyObject, but every pointer to
|
/* Nothing is actually declared to be a PyObject, but every pointer to
|
||||||
* a Python object can be cast to a PyObject*. This is inheritance built
|
* a Python object can be cast to a PyObject*. This is inheritance built
|
||||||
|
@ -127,16 +128,29 @@ typedef PyObject * (*unaryfunc)(PyObject *);
|
||||||
typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
|
typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
|
||||||
typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
|
typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
|
||||||
typedef int (*inquiry)(PyObject *);
|
typedef int (*inquiry)(PyObject *);
|
||||||
|
typedef Py_ssize_t (*lenfunc)(PyObject *);
|
||||||
typedef int (*coercion)(PyObject **, PyObject **);
|
typedef int (*coercion)(PyObject **, PyObject **);
|
||||||
typedef PyObject *(*intargfunc)(PyObject *, int);
|
typedef PyObject *(*intargfunc)(PyObject *, int) Py_DEPRECATED(2.5);
|
||||||
typedef PyObject *(*intintargfunc)(PyObject *, int, int);
|
typedef PyObject *(*intintargfunc)(PyObject *, int, int) Py_DEPRECATED(2.5);
|
||||||
|
typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
|
||||||
|
typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
|
||||||
typedef int(*intobjargproc)(PyObject *, int, PyObject *);
|
typedef int(*intobjargproc)(PyObject *, int, PyObject *);
|
||||||
typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
|
typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *);
|
||||||
|
typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
|
||||||
|
typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
|
||||||
typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
|
typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *);
|
||||||
|
|
||||||
|
/* int-based buffer interface */
|
||||||
typedef int (*getreadbufferproc)(PyObject *, int, void **);
|
typedef int (*getreadbufferproc)(PyObject *, int, void **);
|
||||||
typedef int (*getwritebufferproc)(PyObject *, int, void **);
|
typedef int (*getwritebufferproc)(PyObject *, int, void **);
|
||||||
typedef int (*getsegcountproc)(PyObject *, int *);
|
typedef int (*getsegcountproc)(PyObject *, int *);
|
||||||
typedef int (*getcharbufferproc)(PyObject *, int, const char **);
|
typedef int (*getcharbufferproc)(PyObject *, int, const char **);
|
||||||
|
/* ssize_t-based buffer interface */
|
||||||
|
typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **);
|
||||||
|
typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **);
|
||||||
|
typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *);
|
||||||
|
typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, const char **);
|
||||||
|
|
||||||
typedef int (*objobjproc)(PyObject *, PyObject *);
|
typedef int (*objobjproc)(PyObject *, PyObject *);
|
||||||
typedef int (*visitproc)(PyObject *, void *);
|
typedef int (*visitproc)(PyObject *, void *);
|
||||||
typedef int (*traverseproc)(PyObject *, visitproc, void *);
|
typedef int (*traverseproc)(PyObject *, visitproc, void *);
|
||||||
|
@ -195,30 +209,30 @@ typedef struct {
|
||||||
} PyNumberMethods;
|
} PyNumberMethods;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
inquiry sq_length;
|
lenfunc sq_length;
|
||||||
binaryfunc sq_concat;
|
binaryfunc sq_concat;
|
||||||
intargfunc sq_repeat;
|
ssizeargfunc sq_repeat;
|
||||||
intargfunc sq_item;
|
ssizeargfunc sq_item;
|
||||||
intintargfunc sq_slice;
|
ssizessizeargfunc sq_slice;
|
||||||
intobjargproc sq_ass_item;
|
ssizeobjargproc sq_ass_item;
|
||||||
intintobjargproc sq_ass_slice;
|
ssizessizeobjargproc sq_ass_slice;
|
||||||
objobjproc sq_contains;
|
objobjproc sq_contains;
|
||||||
/* Added in release 2.0 */
|
/* Added in release 2.0 */
|
||||||
binaryfunc sq_inplace_concat;
|
binaryfunc sq_inplace_concat;
|
||||||
intargfunc sq_inplace_repeat;
|
ssizeargfunc sq_inplace_repeat;
|
||||||
} PySequenceMethods;
|
} PySequenceMethods;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
inquiry mp_length;
|
lenfunc mp_length;
|
||||||
binaryfunc mp_subscript;
|
binaryfunc mp_subscript;
|
||||||
objobjargproc mp_ass_subscript;
|
objobjargproc mp_ass_subscript;
|
||||||
} PyMappingMethods;
|
} PyMappingMethods;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
getreadbufferproc bf_getreadbuffer;
|
readbufferproc bf_getreadbuffer;
|
||||||
getwritebufferproc bf_getwritebuffer;
|
writebufferproc bf_getwritebuffer;
|
||||||
getsegcountproc bf_getsegcount;
|
segcountproc bf_getsegcount;
|
||||||
getcharbufferproc bf_getcharbuffer;
|
charbufferproc bf_getcharbuffer;
|
||||||
} PyBufferProcs;
|
} PyBufferProcs;
|
||||||
|
|
||||||
|
|
||||||
|
@ -239,7 +253,7 @@ typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
|
||||||
typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
|
typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *);
|
||||||
typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
|
typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
|
||||||
typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
|
typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
|
||||||
typedef PyObject *(*allocfunc)(struct _typeobject *, int);
|
typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
|
||||||
|
|
||||||
typedef struct _typeobject {
|
typedef struct _typeobject {
|
||||||
PyObject_VAR_HEAD
|
PyObject_VAR_HEAD
|
||||||
|
@ -362,7 +376,7 @@ PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */
|
||||||
#define PyType_CheckExact(op) ((op)->ob_type == &PyType_Type)
|
#define PyType_CheckExact(op) ((op)->ob_type == &PyType_Type)
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
|
PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, int);
|
PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
|
PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
|
||||||
PyObject *, PyObject *);
|
PyObject *, PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
|
PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
|
||||||
|
|
|
@ -146,9 +146,9 @@ PyAPI_FUNC(void) _PyObject_DebugMallocStats(void);
|
||||||
/* Functions */
|
/* Functions */
|
||||||
PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *);
|
PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *);
|
||||||
PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *,
|
PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *,
|
||||||
PyTypeObject *, int);
|
PyTypeObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *);
|
PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *);
|
||||||
PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, int);
|
PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
|
||||||
|
|
||||||
#define PyObject_New(type, typeobj) \
|
#define PyObject_New(type, typeobj) \
|
||||||
( (type *) _PyObject_New(typeobj) )
|
( (type *) _PyObject_New(typeobj) )
|
||||||
|
@ -291,7 +291,7 @@ extern PyGC_Head *_PyGC_generation0;
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t);
|
PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t);
|
||||||
PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *);
|
PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *);
|
||||||
PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, int);
|
PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(void) PyObject_GC_Track(void *);
|
PyAPI_FUNC(void) PyObject_GC_Track(void *);
|
||||||
PyAPI_FUNC(void) PyObject_GC_UnTrack(void *);
|
PyAPI_FUNC(void) PyObject_GC_UnTrack(void *);
|
||||||
PyAPI_FUNC(void) PyObject_GC_Del(void *);
|
PyAPI_FUNC(void) PyObject_GC_Del(void *);
|
||||||
|
|
|
@ -156,15 +156,15 @@ PyAPI_FUNC(PyObject *) PyErr_ProgramText(const char *, int);
|
||||||
|
|
||||||
/* create a UnicodeDecodeError object */
|
/* create a UnicodeDecodeError object */
|
||||||
PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create(
|
PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create(
|
||||||
const char *, const char *, int, int, int, const char *);
|
const char *, const char *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
|
||||||
|
|
||||||
/* create a UnicodeEncodeError object */
|
/* create a UnicodeEncodeError object */
|
||||||
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
|
||||||
const char *, const Py_UNICODE *, int, int, int, const char *);
|
const char *, const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
|
||||||
|
|
||||||
/* create a UnicodeTranslateError object */
|
/* create a UnicodeTranslateError object */
|
||||||
PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
|
PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
|
||||||
const Py_UNICODE *, int, int, int, const char *);
|
const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
|
||||||
|
|
||||||
/* get the encoding attribute */
|
/* get the encoding attribute */
|
||||||
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);
|
||||||
|
@ -177,27 +177,27 @@ PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *);
|
||||||
|
|
||||||
/* get the value of the start attribute (the int * may not be NULL)
|
/* get the value of the start attribute (the int * may not be NULL)
|
||||||
return 0 on success, -1 on failure */
|
return 0 on success, -1 on failure */
|
||||||
PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, int *);
|
PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *);
|
||||||
PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, int *);
|
PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *);
|
||||||
PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, int *);
|
PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *);
|
||||||
|
|
||||||
/* assign a new value to the start attribute
|
/* assign a new value to the start attribute
|
||||||
return 0 on success, -1 on failure */
|
return 0 on success, -1 on failure */
|
||||||
PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, int);
|
PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, int);
|
PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, int);
|
PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
/* get the value of the end attribute (the int *may not be NULL)
|
/* get the value of the end attribute (the int *may not be NULL)
|
||||||
return 0 on success, -1 on failure */
|
return 0 on success, -1 on failure */
|
||||||
PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, int *);
|
PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *);
|
||||||
PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, int *);
|
PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *);
|
||||||
PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, int *);
|
PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *);
|
||||||
|
|
||||||
/* assign a new value to the end attribute
|
/* assign a new value to the end attribute
|
||||||
return 0 on success, -1 on failure */
|
return 0 on success, -1 on failure */
|
||||||
PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, int);
|
PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, int);
|
PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, int);
|
PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
/* get the value of the reason attribute */
|
/* get the value of the reason attribute */
|
||||||
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *);
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *);
|
||||||
|
|
|
@ -85,6 +85,15 @@ typedef PY_LONG_LONG Py_intptr_t;
|
||||||
# error "Python needs a typedef for Py_uintptr_t in pyport.h."
|
# error "Python needs a typedef for Py_uintptr_t in pyport.h."
|
||||||
#endif /* HAVE_UINTPTR_T */
|
#endif /* HAVE_UINTPTR_T */
|
||||||
|
|
||||||
|
#ifdef HAVE_SSIZE_T
|
||||||
|
typedef ssize_t Py_ssize_t;
|
||||||
|
#elif SIZEOF_VOID_P == SIZEOF_SIZE_T
|
||||||
|
typedef Py_uintptr_t Py_ssize_t;
|
||||||
|
#else
|
||||||
|
# error "Python needs a typedef for Py_ssize_t in pyport.h."
|
||||||
|
#endif
|
||||||
|
#define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1))
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <math.h> /* Moved here from the math section, before extern "C" */
|
#include <math.h> /* Moved here from the math section, before extern "C" */
|
||||||
|
|
|
@ -8,7 +8,7 @@ extern "C" {
|
||||||
|
|
||||||
PyAPI_FUNC(double) PyOS_ascii_strtod(const char *str, char **ptr);
|
PyAPI_FUNC(double) PyOS_ascii_strtod(const char *str, char **ptr);
|
||||||
PyAPI_FUNC(double) PyOS_ascii_atof(const char *str);
|
PyAPI_FUNC(double) PyOS_ascii_atof(const char *str);
|
||||||
PyAPI_FUNC(char *) PyOS_ascii_formatd(char *buffer, int buf_len, const char *format, double d);
|
PyAPI_FUNC(char *) PyOS_ascii_formatd(char *buffer, size_t buf_len, const char *format, double d);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -30,11 +30,11 @@ PyAPI_DATA(PyTypeObject) PySlice_Type;
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
|
PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
|
||||||
PyObject* step);
|
PyObject* step);
|
||||||
PyAPI_FUNC(int) PySlice_GetIndices(PySliceObject *r, int length,
|
PyAPI_FUNC(int) PySlice_GetIndices(PySliceObject *r, Py_ssize_t length,
|
||||||
int *start, int *stop, int *step);
|
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
|
||||||
PyAPI_FUNC(int) PySlice_GetIndicesEx(PySliceObject *r, int length,
|
PyAPI_FUNC(int) PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
|
||||||
int *start, int *stop,
|
Py_ssize_t *start, Py_ssize_t *stop,
|
||||||
int *step, int *slicelength);
|
Py_ssize_t *step, Py_ssize_t *slicelength);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,24 +58,24 @@ PyAPI_DATA(PyTypeObject) PyString_Type;
|
||||||
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
|
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
|
||||||
#define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type)
|
#define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type)
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyString_FromStringAndSize(const char *, int);
|
PyAPI_FUNC(PyObject *) PyString_FromStringAndSize(const char *, Py_ssize_t);
|
||||||
PyAPI_FUNC(PyObject *) PyString_FromString(const char *);
|
PyAPI_FUNC(PyObject *) PyString_FromString(const char *);
|
||||||
PyAPI_FUNC(PyObject *) PyString_FromFormatV(const char*, va_list)
|
PyAPI_FUNC(PyObject *) PyString_FromFormatV(const char*, va_list)
|
||||||
Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
|
Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
|
||||||
PyAPI_FUNC(PyObject *) PyString_FromFormat(const char*, ...)
|
PyAPI_FUNC(PyObject *) PyString_FromFormat(const char*, ...)
|
||||||
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
||||||
PyAPI_FUNC(int) PyString_Size(PyObject *);
|
PyAPI_FUNC(Py_ssize_t) PyString_Size(PyObject *);
|
||||||
PyAPI_FUNC(char *) PyString_AsString(PyObject *);
|
PyAPI_FUNC(char *) PyString_AsString(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyString_Repr(PyObject *, int);
|
PyAPI_FUNC(PyObject *) PyString_Repr(PyObject *, int);
|
||||||
PyAPI_FUNC(void) PyString_Concat(PyObject **, PyObject *);
|
PyAPI_FUNC(void) PyString_Concat(PyObject **, PyObject *);
|
||||||
PyAPI_FUNC(void) PyString_ConcatAndDel(PyObject **, PyObject *);
|
PyAPI_FUNC(void) PyString_ConcatAndDel(PyObject **, PyObject *);
|
||||||
PyAPI_FUNC(int) _PyString_Resize(PyObject **, int);
|
PyAPI_FUNC(int) _PyString_Resize(PyObject **, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) _PyString_Eq(PyObject *, PyObject*);
|
PyAPI_FUNC(int) _PyString_Eq(PyObject *, PyObject*);
|
||||||
PyAPI_FUNC(PyObject *) PyString_Format(PyObject *, PyObject *);
|
PyAPI_FUNC(PyObject *) PyString_Format(PyObject *, PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) _PyString_FormatLong(PyObject*, int, int,
|
PyAPI_FUNC(PyObject *) _PyString_FormatLong(PyObject*, int, int,
|
||||||
int, char**, int*);
|
int, char**, int*);
|
||||||
PyAPI_FUNC(PyObject *) PyString_DecodeEscape(const char *, int,
|
PyAPI_FUNC(PyObject *) PyString_DecodeEscape(const char *, Py_ssize_t,
|
||||||
const char *, int,
|
const char *, Py_ssize_t,
|
||||||
const char *);
|
const char *);
|
||||||
|
|
||||||
PyAPI_FUNC(void) PyString_InternInPlace(PyObject **);
|
PyAPI_FUNC(void) PyString_InternInPlace(PyObject **);
|
||||||
|
@ -101,7 +101,7 @@ PyAPI_FUNC(PyObject *) _PyString_Join(PyObject *sep, PyObject *x);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyString_Decode(
|
PyAPI_FUNC(PyObject*) PyString_Decode(
|
||||||
const char *s, /* encoded string */
|
const char *s, /* encoded string */
|
||||||
int size, /* size of buffer */
|
Py_ssize_t size, /* size of buffer */
|
||||||
const char *encoding, /* encoding */
|
const char *encoding, /* encoding */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
@ -111,7 +111,7 @@ PyAPI_FUNC(PyObject*) PyString_Decode(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyString_Encode(
|
PyAPI_FUNC(PyObject*) PyString_Encode(
|
||||||
const char *s, /* string char buffer */
|
const char *s, /* string char buffer */
|
||||||
int size, /* number of chars to encode */
|
Py_ssize_t size, /* number of chars to encode */
|
||||||
const char *encoding, /* encoding */
|
const char *encoding, /* encoding */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
@ -171,7 +171,7 @@ PyAPI_FUNC(PyObject*) PyString_AsDecodedString(
|
||||||
PyAPI_FUNC(int) PyString_AsStringAndSize(
|
PyAPI_FUNC(int) PyString_AsStringAndSize(
|
||||||
register PyObject *obj, /* string or Unicode object */
|
register PyObject *obj, /* string or Unicode object */
|
||||||
register char **s, /* pointer to buffer variable */
|
register char **s, /* pointer to buffer variable */
|
||||||
register int *len /* pointer to length variable or NULL
|
register Py_ssize_t *len /* pointer to length variable or NULL
|
||||||
(only possible for 0-terminated
|
(only possible for 0-terminated
|
||||||
strings) */
|
strings) */
|
||||||
);
|
);
|
||||||
|
|
|
@ -36,13 +36,13 @@ PyAPI_DATA(PyTypeObject) PyTuple_Type;
|
||||||
#define PyTuple_Check(op) PyObject_TypeCheck(op, &PyTuple_Type)
|
#define PyTuple_Check(op) PyObject_TypeCheck(op, &PyTuple_Type)
|
||||||
#define PyTuple_CheckExact(op) ((op)->ob_type == &PyTuple_Type)
|
#define PyTuple_CheckExact(op) ((op)->ob_type == &PyTuple_Type)
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyTuple_New(int size);
|
PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size);
|
||||||
PyAPI_FUNC(int) PyTuple_Size(PyObject *);
|
PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, int);
|
PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, int, PyObject *);
|
PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
|
||||||
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, int, int);
|
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
|
||||||
PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, int);
|
PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t);
|
||||||
PyAPI_FUNC(PyObject *) PyTuple_Pack(int, ...);
|
PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
|
||||||
|
|
||||||
/* Macro, trading safety for speed */
|
/* Macro, trading safety for speed */
|
||||||
#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
|
#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
|
||||||
|
|
|
@ -372,7 +372,7 @@ extern "C" {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
int length; /* Length of raw Unicode data in buffer */
|
Py_ssize_t length; /* Length of raw Unicode data in buffer */
|
||||||
Py_UNICODE *str; /* Raw Unicode buffer */
|
Py_UNICODE *str; /* Raw Unicode buffer */
|
||||||
long hash; /* Hash value; -1 if not set */
|
long hash; /* Hash value; -1 if not set */
|
||||||
PyObject *defenc; /* (Default) Encoded version as Python
|
PyObject *defenc; /* (Default) Encoded version as Python
|
||||||
|
@ -420,7 +420,7 @@ PyAPI_DATA(PyTypeObject) PyUnicode_Type;
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
|
PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
|
||||||
const Py_UNICODE *u, /* Unicode buffer */
|
const Py_UNICODE *u, /* Unicode buffer */
|
||||||
int size /* size of buffer */
|
Py_ssize_t size /* size of buffer */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Return a read-only pointer to the Unicode object's internal
|
/* Return a read-only pointer to the Unicode object's internal
|
||||||
|
@ -432,7 +432,7 @@ PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
|
||||||
|
|
||||||
/* Get the length of the Unicode object. */
|
/* Get the length of the Unicode object. */
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_GetSize(
|
PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize(
|
||||||
PyObject *unicode /* Unicode object */
|
PyObject *unicode /* Unicode object */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -455,7 +455,7 @@ PyAPI_FUNC(Py_UNICODE) PyUnicode_GetMax(void);
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_Resize(
|
PyAPI_FUNC(int) PyUnicode_Resize(
|
||||||
PyObject **unicode, /* Pointer to the Unicode object */
|
PyObject **unicode, /* Pointer to the Unicode object */
|
||||||
int length /* New length */
|
Py_ssize_t length /* New length */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Coerce obj to an Unicode object and return a reference with
|
/* Coerce obj to an Unicode object and return a reference with
|
||||||
|
@ -509,7 +509,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromObject(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar(
|
PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar(
|
||||||
register const wchar_t *w, /* wchar_t buffer */
|
register const wchar_t *w, /* wchar_t buffer */
|
||||||
int size /* size of buffer */
|
Py_ssize_t size /* size of buffer */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Copies the Unicode Object contents into the wchar_t buffer w. At
|
/* Copies the Unicode Object contents into the wchar_t buffer w. At
|
||||||
|
@ -524,10 +524,10 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar(
|
||||||
possibly trailing 0-termination character) or -1 in case of an
|
possibly trailing 0-termination character) or -1 in case of an
|
||||||
error. */
|
error. */
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_AsWideChar(
|
PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar(
|
||||||
PyUnicodeObject *unicode, /* Unicode object */
|
PyUnicodeObject *unicode, /* Unicode object */
|
||||||
register wchar_t *w, /* wchar_t buffer */
|
register wchar_t *w, /* wchar_t buffer */
|
||||||
int size /* size of buffer */
|
Py_ssize_t size /* size of buffer */
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -609,7 +609,7 @@ PyAPI_FUNC(int) PyUnicode_SetDefaultEncoding(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_Decode(
|
PyAPI_FUNC(PyObject*) PyUnicode_Decode(
|
||||||
const char *s, /* encoded string */
|
const char *s, /* encoded string */
|
||||||
int size, /* size of buffer */
|
Py_ssize_t size, /* size of buffer */
|
||||||
const char *encoding, /* encoding */
|
const char *encoding, /* encoding */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
@ -619,7 +619,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_Decode(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_Encode(
|
PyAPI_FUNC(PyObject*) PyUnicode_Encode(
|
||||||
const Py_UNICODE *s, /* Unicode char buffer */
|
const Py_UNICODE *s, /* Unicode char buffer */
|
||||||
int size, /* number of Py_UNICODE chars to encode */
|
Py_ssize_t size, /* number of Py_UNICODE chars to encode */
|
||||||
const char *encoding, /* encoding */
|
const char *encoding, /* encoding */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
@ -646,13 +646,13 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7(
|
||||||
const char *string, /* UTF-7 encoded string */
|
const char *string, /* UTF-7 encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||||
int encodeSetO, /* force the encoder to encode characters in
|
int encodeSetO, /* force the encoder to encode characters in
|
||||||
Set O, as described in RFC2152 */
|
Set O, as described in RFC2152 */
|
||||||
int encodeWhiteSpace, /* force the encoder to encode space, tab,
|
int encodeWhiteSpace, /* force the encoder to encode space, tab,
|
||||||
|
@ -664,15 +664,15 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8(
|
||||||
const char *string, /* UTF-8 encoded string */
|
const char *string, /* UTF-8 encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful(
|
||||||
const char *string, /* UTF-8 encoded string */
|
const char *string, /* UTF-8 encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors, /* error handling */
|
const char *errors, /* error handling */
|
||||||
int *consumed /* bytes consumed */
|
Py_ssize_t *consumed /* bytes consumed */
|
||||||
);
|
);
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String(
|
PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String(
|
||||||
|
@ -681,7 +681,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -712,7 +712,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16(
|
||||||
const char *string, /* UTF-16 encoded string */
|
const char *string, /* UTF-16 encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors, /* error handling */
|
const char *errors, /* error handling */
|
||||||
int *byteorder /* pointer to byteorder to use
|
int *byteorder /* pointer to byteorder to use
|
||||||
0=native;-1=LE,1=BE; updated on
|
0=native;-1=LE,1=BE; updated on
|
||||||
|
@ -721,12 +721,12 @@ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful(
|
||||||
const char *string, /* UTF-16 encoded string */
|
const char *string, /* UTF-16 encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors, /* error handling */
|
const char *errors, /* error handling */
|
||||||
int *byteorder, /* pointer to byteorder to use
|
int *byteorder, /* pointer to byteorder to use
|
||||||
0=native;-1=LE,1=BE; updated on
|
0=native;-1=LE,1=BE; updated on
|
||||||
exit */
|
exit */
|
||||||
int *consumed /* bytes consumed */
|
Py_ssize_t *consumed /* bytes consumed */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Returns a Python string using the UTF-16 encoding in native byte
|
/* Returns a Python string using the UTF-16 encoding in native byte
|
||||||
|
@ -758,7 +758,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||||
const char *errors, /* error handling */
|
const char *errors, /* error handling */
|
||||||
int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */
|
int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */
|
||||||
);
|
);
|
||||||
|
@ -767,7 +767,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape(
|
||||||
const char *string, /* Unicode-Escape encoded string */
|
const char *string, /* Unicode-Escape encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -777,14 +777,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length /* Number of Py_UNICODE chars to encode */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */
|
/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape(
|
||||||
const char *string, /* Raw-Unicode-Escape encoded string */
|
const char *string, /* Raw-Unicode-Escape encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -794,7 +794,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length /* Number of Py_UNICODE chars to encode */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* --- Unicode Internal Codec ---------------------------------------------
|
/* --- Unicode Internal Codec ---------------------------------------------
|
||||||
|
@ -803,7 +803,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape(
|
||||||
|
|
||||||
PyObject *_PyUnicode_DecodeUnicodeInternal(
|
PyObject *_PyUnicode_DecodeUnicodeInternal(
|
||||||
const char *string,
|
const char *string,
|
||||||
int length,
|
Py_ssize_t length,
|
||||||
const char *errors
|
const char *errors
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -815,7 +815,7 @@ PyObject *_PyUnicode_DecodeUnicodeInternal(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1(
|
||||||
const char *string, /* Latin-1 encoded string */
|
const char *string, /* Latin-1 encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -825,7 +825,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -837,7 +837,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII(
|
||||||
const char *string, /* ASCII encoded string */
|
const char *string, /* ASCII encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -847,7 +847,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -875,7 +875,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap(
|
||||||
const char *string, /* Encoded string */
|
const char *string, /* Encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
PyObject *mapping, /* character mapping
|
PyObject *mapping, /* character mapping
|
||||||
(char ordinal -> unicode ordinal) */
|
(char ordinal -> unicode ordinal) */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
|
@ -889,7 +889,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||||
PyObject *mapping, /* character mapping
|
PyObject *mapping, /* character mapping
|
||||||
(unicode ordinal -> char ordinal) */
|
(unicode ordinal -> char ordinal) */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
|
@ -910,7 +910,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap(
|
PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||||
PyObject *table, /* Translate table */
|
PyObject *table, /* Translate table */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
@ -921,7 +921,7 @@ PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS(
|
PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS(
|
||||||
const char *string, /* MBCS encoded string */
|
const char *string, /* MBCS encoded string */
|
||||||
int length, /* size of string */
|
Py_ssize_t length, /* size of string */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -931,7 +931,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString(
|
||||||
|
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
|
PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
|
||||||
const Py_UNICODE *data, /* Unicode char buffer */
|
const Py_UNICODE *data, /* Unicode char buffer */
|
||||||
int length, /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -963,7 +963,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
|
PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
|
||||||
Py_UNICODE *s, /* Unicode buffer */
|
Py_UNICODE *s, /* Unicode buffer */
|
||||||
int length, /* Number of Py_UNICODE chars to encode */
|
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||||
char *output, /* Output buffer; must have size >= length */
|
char *output, /* Output buffer; must have size >= length */
|
||||||
const char *errors /* error handling */
|
const char *errors /* error handling */
|
||||||
);
|
);
|
||||||
|
@ -995,7 +995,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_Concat(
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_Split(
|
PyAPI_FUNC(PyObject*) PyUnicode_Split(
|
||||||
PyObject *s, /* String to split */
|
PyObject *s, /* String to split */
|
||||||
PyObject *sep, /* String separator */
|
PyObject *sep, /* String separator */
|
||||||
int maxsplit /* Maxsplit count */
|
Py_ssize_t maxsplit /* Maxsplit count */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Dito, but split at line breaks.
|
/* Dito, but split at line breaks.
|
||||||
|
@ -1024,7 +1024,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_Splitlines(
|
||||||
PyAPI_FUNC(PyObject*) PyUnicode_RSplit(
|
PyAPI_FUNC(PyObject*) PyUnicode_RSplit(
|
||||||
PyObject *s, /* String to split */
|
PyObject *s, /* String to split */
|
||||||
PyObject *sep, /* String separator */
|
PyObject *sep, /* String separator */
|
||||||
int maxsplit /* Maxsplit count */
|
Py_ssize_t maxsplit /* Maxsplit count */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Translate a string by applying a character mapping table to it and
|
/* Translate a string by applying a character mapping table to it and
|
||||||
|
@ -1056,11 +1056,11 @@ PyAPI_FUNC(PyObject*) PyUnicode_Join(
|
||||||
/* Return 1 if substr matches str[start:end] at the given tail end, 0
|
/* Return 1 if substr matches str[start:end] at the given tail end, 0
|
||||||
otherwise. */
|
otherwise. */
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_Tailmatch(
|
PyAPI_FUNC(Py_ssize_t) PyUnicode_Tailmatch(
|
||||||
PyObject *str, /* String */
|
PyObject *str, /* String */
|
||||||
PyObject *substr, /* Prefix or Suffix string */
|
PyObject *substr, /* Prefix or Suffix string */
|
||||||
int start, /* Start index */
|
Py_ssize_t start, /* Start index */
|
||||||
int end, /* Stop index */
|
Py_ssize_t end, /* Stop index */
|
||||||
int direction /* Tail end: -1 prefix, +1 suffix */
|
int direction /* Tail end: -1 prefix, +1 suffix */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1068,21 +1068,21 @@ PyAPI_FUNC(int) PyUnicode_Tailmatch(
|
||||||
given search direction or -1 if not found. -2 is returned in case
|
given search direction or -1 if not found. -2 is returned in case
|
||||||
an error occurred and an exception is set. */
|
an error occurred and an exception is set. */
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_Find(
|
PyAPI_FUNC(Py_ssize_t) PyUnicode_Find(
|
||||||
PyObject *str, /* String */
|
PyObject *str, /* String */
|
||||||
PyObject *substr, /* Substring to find */
|
PyObject *substr, /* Substring to find */
|
||||||
int start, /* Start index */
|
Py_ssize_t start, /* Start index */
|
||||||
int end, /* Stop index */
|
Py_ssize_t end, /* Stop index */
|
||||||
int direction /* Find direction: +1 forward, -1 backward */
|
int direction /* Find direction: +1 forward, -1 backward */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Count the number of occurrences of substr in str[start:end]. */
|
/* Count the number of occurrences of substr in str[start:end]. */
|
||||||
|
|
||||||
PyAPI_FUNC(int) PyUnicode_Count(
|
PyAPI_FUNC(Py_ssize_t) PyUnicode_Count(
|
||||||
PyObject *str, /* String */
|
PyObject *str, /* String */
|
||||||
PyObject *substr, /* Substring to count */
|
PyObject *substr, /* Substring to count */
|
||||||
int start, /* Start index */
|
Py_ssize_t start, /* Start index */
|
||||||
int end /* Stop index */
|
Py_ssize_t end /* Stop index */
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Replace at most maxcount occurrences of substr in str with replstr
|
/* Replace at most maxcount occurrences of substr in str with replstr
|
||||||
|
@ -1092,7 +1092,7 @@ PyAPI_FUNC(PyObject *) PyUnicode_Replace(
|
||||||
PyObject *str, /* String */
|
PyObject *str, /* String */
|
||||||
PyObject *substr, /* Substring to find */
|
PyObject *substr, /* Substring to find */
|
||||||
PyObject *replstr, /* Substring to replace */
|
PyObject *replstr, /* Substring to replace */
|
||||||
int maxcount /* Max. number of replacements to apply;
|
Py_ssize_t maxcount /* Max. number of replacements to apply;
|
||||||
-1 = all */
|
-1 = all */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -627,7 +627,9 @@ class MixinStrUnicodeUserStringTest:
|
||||||
self.checkequal('abcabcabc', 'abc', '__mul__', 3)
|
self.checkequal('abcabcabc', 'abc', '__mul__', 3)
|
||||||
self.checkraises(TypeError, 'abc', '__mul__')
|
self.checkraises(TypeError, 'abc', '__mul__')
|
||||||
self.checkraises(TypeError, 'abc', '__mul__', '')
|
self.checkraises(TypeError, 'abc', '__mul__', '')
|
||||||
self.checkraises(OverflowError, 10000*'abc', '__mul__', 2000000000)
|
# XXX: on a 64-bit system, this doesn't raise an overflow error,
|
||||||
|
# but either raises a MemoryError, or succeeds (if you have 54TiB)
|
||||||
|
#self.checkraises(OverflowError, 10000*'abc', '__mul__', 2000000000)
|
||||||
|
|
||||||
def test_join(self):
|
def test_join(self):
|
||||||
# join now works with any sequence type
|
# join now works with any sequence type
|
||||||
|
|
|
@ -12,6 +12,8 @@ What's New in Python 2.5 alpha 1?
|
||||||
Core and builtins
|
Core and builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- PEP 353: Using ssize_t as the index type.
|
||||||
|
|
||||||
- Patch #1400181, fix unicode string formatting to not use the locale.
|
- Patch #1400181, fix unicode string formatting to not use the locale.
|
||||||
This is how string objects work. u'%f' could use , instead of .
|
This is how string objects work. u'%f' could use , instead of .
|
||||||
for the decimal point. Now both strings and unicode always use periods.
|
for the decimal point. Now both strings and unicode always use periods.
|
||||||
|
|
|
@ -1100,7 +1100,7 @@ _db_associateCallback(DB* db, const DBT* priKey, const DBT* priData,
|
||||||
}
|
}
|
||||||
else if (PyString_Check(result)) {
|
else if (PyString_Check(result)) {
|
||||||
char* data;
|
char* data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
CLEAR_DBT(*secKey);
|
CLEAR_DBT(*secKey);
|
||||||
#if PYTHON_API_VERSION <= 1007
|
#if PYTHON_API_VERSION <= 1007
|
||||||
|
@ -2614,7 +2614,7 @@ DB_set_encrypt(DBObject* self, PyObject* args, PyObject* kwargs)
|
||||||
/*-------------------------------------------------------------- */
|
/*-------------------------------------------------------------- */
|
||||||
/* Mapping and Dictionary-like access routines */
|
/* Mapping and Dictionary-like access routines */
|
||||||
|
|
||||||
int DB_length(DBObject* self)
|
Py_ssize_t DB_length(DBObject* self)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
long size = 0;
|
long size = 0;
|
||||||
|
@ -4679,7 +4679,7 @@ static PyMethodDef DB_methods[] = {
|
||||||
|
|
||||||
|
|
||||||
static PyMappingMethods DB_mapping = {
|
static PyMappingMethods DB_mapping = {
|
||||||
(inquiry)DB_length, /*mp_length*/
|
(lenfunc)DB_length, /*mp_length*/
|
||||||
(binaryfunc)DB_subscript, /*mp_subscript*/
|
(binaryfunc)DB_subscript, /*mp_subscript*/
|
||||||
(objobjargproc)DB_ass_sub, /*mp_ass_subscript*/
|
(objobjargproc)DB_ass_sub, /*mp_ass_subscript*/
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,6 +35,7 @@ Copyright (c) Corporation for National Research Initiatives.
|
||||||
|
|
||||||
------------------------------------------------------------------------ */
|
------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
#define PY_SSIZE_T_CLEAN
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
|
|
||||||
/* --- Registry ----------------------------------------------------------- */
|
/* --- Registry ----------------------------------------------------------- */
|
||||||
|
@ -196,7 +197,7 @@ escape_decode(PyObject *self,
|
||||||
{
|
{
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "s#|z:escape_decode",
|
if (!PyArg_ParseTuple(args, "s#|z:escape_decode",
|
||||||
&data, &size, &errors))
|
&data, &size, &errors))
|
||||||
|
@ -241,7 +242,7 @@ unicode_internal_decode(PyObject *self,
|
||||||
PyObject *obj;
|
PyObject *obj;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|z:unicode_internal_decode",
|
if (!PyArg_ParseTuple(args, "O|z:unicode_internal_decode",
|
||||||
&obj, &errors))
|
&obj, &errors))
|
||||||
|
@ -265,7 +266,7 @@ utf_7_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:utf_7_decode",
|
if (!PyArg_ParseTuple(args, "t#|z:utf_7_decode",
|
||||||
|
@ -281,15 +282,19 @@ utf_8_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
int final = 0;
|
int final = 0;
|
||||||
int consumed;
|
Py_ssize_t consumed;
|
||||||
PyObject *decoded = NULL;
|
PyObject *decoded = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|zi:utf_8_decode",
|
if (!PyArg_ParseTuple(args, "t#|zi:utf_8_decode",
|
||||||
&data, &size, &errors, &final))
|
&data, &size, &errors, &final))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
if (size < 0) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "negative argument");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
consumed = size;
|
consumed = size;
|
||||||
|
|
||||||
decoded = PyUnicode_DecodeUTF8Stateful(data, size, errors,
|
decoded = PyUnicode_DecodeUTF8Stateful(data, size, errors,
|
||||||
|
@ -304,16 +309,21 @@ utf_16_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
int byteorder = 0;
|
int byteorder = 0;
|
||||||
int final = 0;
|
int final = 0;
|
||||||
int consumed;
|
Py_ssize_t consumed;
|
||||||
PyObject *decoded;
|
PyObject *decoded;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|zi:utf_16_decode",
|
if (!PyArg_ParseTuple(args, "t#|zi:utf_16_decode",
|
||||||
&data, &size, &errors, &final))
|
&data, &size, &errors, &final))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
/* XXX Why is consumed initialized to size? mvl */
|
||||||
|
if (size < 0) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "negative argument");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
consumed = size;
|
consumed = size;
|
||||||
decoded = PyUnicode_DecodeUTF16Stateful(data, size, errors, &byteorder,
|
decoded = PyUnicode_DecodeUTF16Stateful(data, size, errors, &byteorder,
|
||||||
final ? NULL : &consumed);
|
final ? NULL : &consumed);
|
||||||
|
@ -327,16 +337,22 @@ utf_16_le_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
int byteorder = -1;
|
int byteorder = -1;
|
||||||
int final = 0;
|
int final = 0;
|
||||||
int consumed;
|
Py_ssize_t consumed;
|
||||||
PyObject *decoded = NULL;
|
PyObject *decoded = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|zi:utf_16_le_decode",
|
if (!PyArg_ParseTuple(args, "t#|zi:utf_16_le_decode",
|
||||||
&data, &size, &errors, &final))
|
&data, &size, &errors, &final))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
/* XXX Why is consumed initialized to size? mvl */
|
||||||
|
if (size < 0) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "negative argument");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
consumed = size;
|
consumed = size;
|
||||||
decoded = PyUnicode_DecodeUTF16Stateful(data, size, errors,
|
decoded = PyUnicode_DecodeUTF16Stateful(data, size, errors,
|
||||||
&byteorder, final ? NULL : &consumed);
|
&byteorder, final ? NULL : &consumed);
|
||||||
|
@ -351,16 +367,21 @@ utf_16_be_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
int byteorder = 1;
|
int byteorder = 1;
|
||||||
int final = 0;
|
int final = 0;
|
||||||
int consumed;
|
Py_ssize_t consumed;
|
||||||
PyObject *decoded = NULL;
|
PyObject *decoded = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|zi:utf_16_be_decode",
|
if (!PyArg_ParseTuple(args, "t#|zi:utf_16_be_decode",
|
||||||
&data, &size, &errors, &final))
|
&data, &size, &errors, &final))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
/* XXX Why is consumed initialized to size? mvl */
|
||||||
|
if (size < 0) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "negative argument");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
consumed = size;
|
consumed = size;
|
||||||
decoded = PyUnicode_DecodeUTF16Stateful(data, size, errors,
|
decoded = PyUnicode_DecodeUTF16Stateful(data, size, errors,
|
||||||
&byteorder, final ? NULL : &consumed);
|
&byteorder, final ? NULL : &consumed);
|
||||||
|
@ -382,17 +403,21 @@ utf_16_ex_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
int byteorder = 0;
|
int byteorder = 0;
|
||||||
PyObject *unicode, *tuple;
|
PyObject *unicode, *tuple;
|
||||||
int final = 0;
|
int final = 0;
|
||||||
int consumed;
|
Py_ssize_t consumed;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|zii:utf_16_ex_decode",
|
if (!PyArg_ParseTuple(args, "t#|zii:utf_16_ex_decode",
|
||||||
&data, &size, &errors, &byteorder, &final))
|
&data, &size, &errors, &byteorder, &final))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
/* XXX Why is consumed initialized to size? mvl */
|
||||||
|
if (size < 0) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "negative argument");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
consumed = size;
|
consumed = size;
|
||||||
unicode = PyUnicode_DecodeUTF16Stateful(data, size, errors, &byteorder,
|
unicode = PyUnicode_DecodeUTF16Stateful(data, size, errors, &byteorder,
|
||||||
final ? NULL : &consumed);
|
final ? NULL : &consumed);
|
||||||
|
@ -408,7 +433,7 @@ unicode_escape_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:unicode_escape_decode",
|
if (!PyArg_ParseTuple(args, "t#|z:unicode_escape_decode",
|
||||||
|
@ -424,7 +449,7 @@ raw_unicode_escape_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:raw_unicode_escape_decode",
|
if (!PyArg_ParseTuple(args, "t#|z:raw_unicode_escape_decode",
|
||||||
|
@ -440,7 +465,7 @@ latin_1_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:latin_1_decode",
|
if (!PyArg_ParseTuple(args, "t#|z:latin_1_decode",
|
||||||
|
@ -456,7 +481,7 @@ ascii_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:ascii_decode",
|
if (!PyArg_ParseTuple(args, "t#|z:ascii_decode",
|
||||||
|
@ -472,7 +497,7 @@ charmap_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
PyObject *mapping = NULL;
|
PyObject *mapping = NULL;
|
||||||
|
|
||||||
|
@ -493,7 +518,7 @@ mbcs_decode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:mbcs_decode",
|
if (!PyArg_ParseTuple(args, "t#|z:mbcs_decode",
|
||||||
|
@ -513,7 +538,7 @@ readbuffer_encode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "s#|z:readbuffer_encode",
|
if (!PyArg_ParseTuple(args, "s#|z:readbuffer_encode",
|
||||||
|
@ -529,7 +554,7 @@ charbuffer_encode(PyObject *self,
|
||||||
PyObject *args)
|
PyObject *args)
|
||||||
{
|
{
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "t#|z:charbuffer_encode",
|
if (!PyArg_ParseTuple(args, "t#|z:charbuffer_encode",
|
||||||
|
@ -547,7 +572,7 @@ unicode_internal_encode(PyObject *self,
|
||||||
PyObject *obj;
|
PyObject *obj;
|
||||||
const char *errors = NULL;
|
const char *errors = NULL;
|
||||||
const char *data;
|
const char *data;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode",
|
if (!PyArg_ParseTuple(args, "O|z:unicode_internal_encode",
|
||||||
&obj, &errors))
|
&obj, &errors))
|
||||||
|
|
|
@ -92,6 +92,9 @@ do { memory -= size; printf("%8d - %s\n", memory, comment); } while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* compatibility macros */
|
/* compatibility macros */
|
||||||
|
#if (PY_VERSION_HEX < 0x02050000)
|
||||||
|
typedef int Py_ssize_t;
|
||||||
|
#endif
|
||||||
#if (PY_VERSION_HEX < 0x02040000)
|
#if (PY_VERSION_HEX < 0x02040000)
|
||||||
#define PyDict_CheckExact PyDict_Check
|
#define PyDict_CheckExact PyDict_Check
|
||||||
#if (PY_VERSION_HEX < 0x02020000)
|
#if (PY_VERSION_HEX < 0x02020000)
|
||||||
|
@ -919,8 +922,9 @@ element_getiterator(ElementObject* self, PyObject* args)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
element_getitem(ElementObject* self, int index)
|
element_getitem(PyObject* _self, Py_ssize_t index)
|
||||||
{
|
{
|
||||||
|
ElementObject* self = (ElementObject*)_self;
|
||||||
if (!self->extra || index < 0 || index >= self->extra->length) {
|
if (!self->extra || index < 0 || index >= self->extra->length) {
|
||||||
PyErr_SetString(
|
PyErr_SetString(
|
||||||
PyExc_IndexError,
|
PyExc_IndexError,
|
||||||
|
@ -934,9 +938,10 @@ element_getitem(ElementObject* self, int index)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
element_getslice(ElementObject* self, int start, int end)
|
element_getslice(PyObject* _self, Py_ssize_t start, Py_ssize_t end)
|
||||||
{
|
{
|
||||||
int i;
|
ElementObject* self = (ElementObject*)_self;
|
||||||
|
Py_ssize_t i;
|
||||||
PyObject* list;
|
PyObject* list;
|
||||||
|
|
||||||
if (!self->extra)
|
if (!self->extra)
|
||||||
|
@ -1022,7 +1027,7 @@ element_keys(ElementObject* self, PyObject* args)
|
||||||
return PyDict_Keys(self->extra->attrib);
|
return PyDict_Keys(self->extra->attrib);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
element_length(ElementObject* self)
|
element_length(ElementObject* self)
|
||||||
{
|
{
|
||||||
if (!self->extra)
|
if (!self->extra)
|
||||||
|
@ -1161,8 +1166,9 @@ element_set(ElementObject* self, PyObject* args)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
element_setslice(ElementObject* self, int start, int end, PyObject* item)
|
element_setslice(PyObject* _self, Py_ssize_t start, Py_ssize_t end, PyObject* item)
|
||||||
{
|
{
|
||||||
|
ElementObject* self = (ElementObject*)_self;
|
||||||
int i, new, old;
|
int i, new, old;
|
||||||
PyObject* recycle = NULL;
|
PyObject* recycle = NULL;
|
||||||
|
|
||||||
|
@ -1231,8 +1237,9 @@ element_setslice(ElementObject* self, int start, int end, PyObject* item)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
element_setitem(ElementObject* self, int index, PyObject* item)
|
element_setitem(PyObject* _self, Py_ssize_t index, PyObject* item)
|
||||||
{
|
{
|
||||||
|
ElementObject* self = (ElementObject*)_self;
|
||||||
int i;
|
int i;
|
||||||
PyObject* old;
|
PyObject* old;
|
||||||
|
|
||||||
|
@ -1371,13 +1378,13 @@ element_setattr(ElementObject* self, const char* name, PyObject* value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods element_as_sequence = {
|
static PySequenceMethods element_as_sequence = {
|
||||||
(inquiry) element_length,
|
(lenfunc) element_length,
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
0, /* sq_repeat */
|
0, /* sq_repeat */
|
||||||
(intargfunc) element_getitem,
|
element_getitem,
|
||||||
(intintargfunc) element_getslice,
|
element_getslice,
|
||||||
(intobjargproc) element_setitem,
|
element_setitem,
|
||||||
(intintobjargproc) element_setslice,
|
element_setslice,
|
||||||
};
|
};
|
||||||
|
|
||||||
statichere PyTypeObject Element_Type = {
|
statichere PyTypeObject Element_Type = {
|
||||||
|
|
|
@ -71,7 +71,7 @@ typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
PyObject *filemap;
|
PyObject *filemap;
|
||||||
PyObject *logfilename;
|
PyObject *logfilename;
|
||||||
int index;
|
Py_ssize_t index;
|
||||||
unsigned char buffer[BUFFERSIZE];
|
unsigned char buffer[BUFFERSIZE];
|
||||||
FILE *logfp;
|
FILE *logfp;
|
||||||
int lineevents;
|
int lineevents;
|
||||||
|
@ -526,7 +526,7 @@ logreader_dealloc(LogReaderObject *self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
logreader_sq_item(LogReaderObject *self, int index)
|
logreader_sq_item(LogReaderObject *self, Py_ssize_t index)
|
||||||
{
|
{
|
||||||
PyObject *result = logreader_tp_iternext(self);
|
PyObject *result = logreader_tp_iternext(self);
|
||||||
if (result == NULL && !PyErr_Occurred()) {
|
if (result == NULL && !PyErr_Occurred()) {
|
||||||
|
@ -610,13 +610,14 @@ pack_modified_packed_int(ProfilerObject *self, int value,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pack_string(ProfilerObject *self, const char *s, int len)
|
pack_string(ProfilerObject *self, const char *s, Py_ssize_t len)
|
||||||
{
|
{
|
||||||
if (len + PISIZE + self->index >= BUFFERSIZE) {
|
if (len + PISIZE + self->index >= BUFFERSIZE) {
|
||||||
if (flush_data(self) < 0)
|
if (flush_data(self) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (pack_packed_int(self, len) < 0)
|
assert(len < INT_MAX);
|
||||||
|
if (pack_packed_int(self, (int)len) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
memcpy(self->buffer + self->index, s, len);
|
memcpy(self->buffer + self->index, s, len);
|
||||||
self->index += len;
|
self->index += len;
|
||||||
|
@ -626,8 +627,8 @@ pack_string(ProfilerObject *self, const char *s, int len)
|
||||||
static int
|
static int
|
||||||
pack_add_info(ProfilerObject *self, const char *s1, const char *s2)
|
pack_add_info(ProfilerObject *self, const char *s1, const char *s2)
|
||||||
{
|
{
|
||||||
int len1 = strlen(s1);
|
Py_ssize_t len1 = strlen(s1);
|
||||||
int len2 = strlen(s2);
|
Py_ssize_t len2 = strlen(s2);
|
||||||
|
|
||||||
if (len1 + len2 + PISIZE*2 + 1 + self->index >= BUFFERSIZE) {
|
if (len1 + len2 + PISIZE*2 + 1 + self->index >= BUFFERSIZE) {
|
||||||
if (flush_data(self) < 0)
|
if (flush_data(self) < 0)
|
||||||
|
@ -643,7 +644,7 @@ pack_add_info(ProfilerObject *self, const char *s1, const char *s2)
|
||||||
static int
|
static int
|
||||||
pack_define_file(ProfilerObject *self, int fileno, const char *filename)
|
pack_define_file(ProfilerObject *self, int fileno, const char *filename)
|
||||||
{
|
{
|
||||||
int len = strlen(filename);
|
Py_ssize_t len = strlen(filename);
|
||||||
|
|
||||||
if (len + PISIZE*2 + 1 + self->index >= BUFFERSIZE) {
|
if (len + PISIZE*2 + 1 + self->index >= BUFFERSIZE) {
|
||||||
if (flush_data(self) < 0)
|
if (flush_data(self) < 0)
|
||||||
|
@ -660,7 +661,7 @@ static int
|
||||||
pack_define_func(ProfilerObject *self, int fileno, int lineno,
|
pack_define_func(ProfilerObject *self, int fileno, int lineno,
|
||||||
const char *funcname)
|
const char *funcname)
|
||||||
{
|
{
|
||||||
int len = strlen(funcname);
|
Py_ssize_t len = strlen(funcname);
|
||||||
|
|
||||||
if (len + PISIZE*3 + 1 + self->index >= BUFFERSIZE) {
|
if (len + PISIZE*3 + 1 + self->index >= BUFFERSIZE) {
|
||||||
if (flush_data(self) < 0)
|
if (flush_data(self) < 0)
|
||||||
|
@ -1269,7 +1270,7 @@ static PySequenceMethods logreader_as_sequence = {
|
||||||
0, /* sq_length */
|
0, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
0, /* sq_repeat */
|
0, /* sq_repeat */
|
||||||
(intargfunc)logreader_sq_item, /* sq_item */
|
(ssizeargfunc)logreader_sq_item, /* sq_item */
|
||||||
0, /* sq_slice */
|
0, /* sq_slice */
|
||||||
0, /* sq_ass_item */
|
0, /* sq_ass_item */
|
||||||
0, /* sq_ass_slice */
|
0, /* sq_ass_slice */
|
||||||
|
|
|
@ -382,11 +382,11 @@ PyLocale_getdefaultlocale(PyObject* self)
|
||||||
if (GetLocaleInfo(LOCALE_USER_DEFAULT,
|
if (GetLocaleInfo(LOCALE_USER_DEFAULT,
|
||||||
LOCALE_SISO639LANGNAME,
|
LOCALE_SISO639LANGNAME,
|
||||||
locale, sizeof(locale))) {
|
locale, sizeof(locale))) {
|
||||||
int i = strlen(locale);
|
Py_ssize_t i = strlen(locale);
|
||||||
locale[i++] = '_';
|
locale[i++] = '_';
|
||||||
if (GetLocaleInfo(LOCALE_USER_DEFAULT,
|
if (GetLocaleInfo(LOCALE_USER_DEFAULT,
|
||||||
LOCALE_SISO3166CTRYNAME,
|
LOCALE_SISO3166CTRYNAME,
|
||||||
locale+i, sizeof(locale)-i))
|
locale+i, (int)(sizeof(locale)-i)))
|
||||||
return Py_BuildValue("ss", locale, encoding);
|
return Py_BuildValue("ss", locale, encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,8 @@ test_list_api(PyObject *self)
|
||||||
static int
|
static int
|
||||||
test_dict_inner(int count)
|
test_dict_inner(int count)
|
||||||
{
|
{
|
||||||
int pos = 0, iterations = 0, i;
|
Py_ssize_t pos = 0, iterations = 0;
|
||||||
|
int i;
|
||||||
PyObject *dict = PyDict_New();
|
PyObject *dict = PyDict_New();
|
||||||
PyObject *v, *k;
|
PyObject *v, *k;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
/* An array is a uniform list -- all items have the same type.
|
/* An array is a uniform list -- all items have the same type.
|
||||||
The item type is restricted to simple C types like int or float */
|
The item type is restricted to simple C types like int or float */
|
||||||
|
|
||||||
|
#define PY_SSIZE_T_CLEAN
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "structmember.h"
|
#include "structmember.h"
|
||||||
|
|
||||||
|
@ -23,15 +24,15 @@ struct arrayobject; /* Forward */
|
||||||
struct arraydescr {
|
struct arraydescr {
|
||||||
int typecode;
|
int typecode;
|
||||||
int itemsize;
|
int itemsize;
|
||||||
PyObject * (*getitem)(struct arrayobject *, int);
|
PyObject * (*getitem)(struct arrayobject *, Py_ssize_t);
|
||||||
int (*setitem)(struct arrayobject *, int, PyObject *);
|
int (*setitem)(struct arrayobject *, Py_ssize_t, PyObject *);
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct arrayobject {
|
typedef struct arrayobject {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
int ob_size;
|
Py_ssize_t ob_size;
|
||||||
char *ob_item;
|
char *ob_item;
|
||||||
int allocated;
|
Py_ssize_t allocated;
|
||||||
struct arraydescr *ob_descr;
|
struct arraydescr *ob_descr;
|
||||||
PyObject *weakreflist; /* List of weak references */
|
PyObject *weakreflist; /* List of weak references */
|
||||||
} arrayobject;
|
} arrayobject;
|
||||||
|
@ -42,7 +43,7 @@ static PyTypeObject Arraytype;
|
||||||
#define array_CheckExact(op) ((op)->ob_type == &Arraytype)
|
#define array_CheckExact(op) ((op)->ob_type == &Arraytype)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
array_resize(arrayobject *self, int newsize)
|
array_resize(arrayobject *self, Py_ssize_t newsize)
|
||||||
{
|
{
|
||||||
char *items;
|
char *items;
|
||||||
size_t _new_size;
|
size_t _new_size;
|
||||||
|
@ -102,13 +103,13 @@ in bounds; that's the responsibility of the caller.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
c_getitem(arrayobject *ap, int i)
|
c_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyString_FromStringAndSize(&((char *)ap->ob_item)[i], 1);
|
return PyString_FromStringAndSize(&((char *)ap->ob_item)[i], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
c_setitem(arrayobject *ap, int i, PyObject *v)
|
c_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
char x;
|
char x;
|
||||||
if (!PyArg_Parse(v, "c;array item must be char", &x))
|
if (!PyArg_Parse(v, "c;array item must be char", &x))
|
||||||
|
@ -119,7 +120,7 @@ c_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
b_getitem(arrayobject *ap, int i)
|
b_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
long x = ((char *)ap->ob_item)[i];
|
long x = ((char *)ap->ob_item)[i];
|
||||||
if (x >= 128)
|
if (x >= 128)
|
||||||
|
@ -128,7 +129,7 @@ b_getitem(arrayobject *ap, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
b_setitem(arrayobject *ap, int i, PyObject *v)
|
b_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
short x;
|
short x;
|
||||||
/* PyArg_Parse's 'b' formatter is for an unsigned char, therefore
|
/* PyArg_Parse's 'b' formatter is for an unsigned char, therefore
|
||||||
|
@ -152,14 +153,14 @@ b_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
BB_getitem(arrayobject *ap, int i)
|
BB_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
long x = ((unsigned char *)ap->ob_item)[i];
|
long x = ((unsigned char *)ap->ob_item)[i];
|
||||||
return PyInt_FromLong(x);
|
return PyInt_FromLong(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
BB_setitem(arrayobject *ap, int i, PyObject *v)
|
BB_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
unsigned char x;
|
unsigned char x;
|
||||||
/* 'B' == unsigned char, maps to PyArg_Parse's 'b' formatter */
|
/* 'B' == unsigned char, maps to PyArg_Parse's 'b' formatter */
|
||||||
|
@ -172,16 +173,16 @@ BB_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
|
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
static PyObject *
|
static PyObject *
|
||||||
u_getitem(arrayobject *ap, int i)
|
u_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyUnicode_FromUnicode(&((Py_UNICODE *) ap->ob_item)[i], 1);
|
return PyUnicode_FromUnicode(&((Py_UNICODE *) ap->ob_item)[i], 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
u_setitem(arrayobject *ap, int i, PyObject *v)
|
u_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
Py_UNICODE *p;
|
Py_UNICODE *p;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (!PyArg_Parse(v, "u#;array item must be unicode character", &p, &len))
|
if (!PyArg_Parse(v, "u#;array item must be unicode character", &p, &len))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -196,13 +197,13 @@ u_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
h_getitem(arrayobject *ap, int i)
|
h_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyInt_FromLong((long) ((short *)ap->ob_item)[i]);
|
return PyInt_FromLong((long) ((short *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
h_setitem(arrayobject *ap, int i, PyObject *v)
|
h_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
short x;
|
short x;
|
||||||
/* 'h' == signed short, maps to PyArg_Parse's 'h' formatter */
|
/* 'h' == signed short, maps to PyArg_Parse's 'h' formatter */
|
||||||
|
@ -214,13 +215,13 @@ h_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
HH_getitem(arrayobject *ap, int i)
|
HH_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyInt_FromLong((long) ((unsigned short *)ap->ob_item)[i]);
|
return PyInt_FromLong((long) ((unsigned short *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
HH_setitem(arrayobject *ap, int i, PyObject *v)
|
HH_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
/* PyArg_Parse's 'h' formatter is for a signed short, therefore
|
/* PyArg_Parse's 'h' formatter is for a signed short, therefore
|
||||||
|
@ -243,13 +244,13 @@ HH_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
i_getitem(arrayobject *ap, int i)
|
i_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyInt_FromLong((long) ((int *)ap->ob_item)[i]);
|
return PyInt_FromLong((long) ((int *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
i_setitem(arrayobject *ap, int i, PyObject *v)
|
i_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
/* 'i' == signed int, maps to PyArg_Parse's 'i' formatter */
|
/* 'i' == signed int, maps to PyArg_Parse's 'i' formatter */
|
||||||
|
@ -261,14 +262,14 @@ i_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
II_getitem(arrayobject *ap, int i)
|
II_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyLong_FromUnsignedLong(
|
return PyLong_FromUnsignedLong(
|
||||||
(unsigned long) ((unsigned int *)ap->ob_item)[i]);
|
(unsigned long) ((unsigned int *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
II_setitem(arrayobject *ap, int i, PyObject *v)
|
II_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
if (PyLong_Check(v)) {
|
if (PyLong_Check(v)) {
|
||||||
|
@ -300,13 +301,13 @@ II_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
l_getitem(arrayobject *ap, int i)
|
l_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyInt_FromLong(((long *)ap->ob_item)[i]);
|
return PyInt_FromLong(((long *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
l_setitem(arrayobject *ap, int i, PyObject *v)
|
l_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
long x;
|
long x;
|
||||||
if (!PyArg_Parse(v, "l;array item must be integer", &x))
|
if (!PyArg_Parse(v, "l;array item must be integer", &x))
|
||||||
|
@ -317,13 +318,13 @@ l_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
LL_getitem(arrayobject *ap, int i)
|
LL_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyLong_FromUnsignedLong(((unsigned long *)ap->ob_item)[i]);
|
return PyLong_FromUnsignedLong(((unsigned long *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
LL_setitem(arrayobject *ap, int i, PyObject *v)
|
LL_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
if (PyLong_Check(v)) {
|
if (PyLong_Check(v)) {
|
||||||
|
@ -355,13 +356,13 @@ LL_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
f_getitem(arrayobject *ap, int i)
|
f_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyFloat_FromDouble((double) ((float *)ap->ob_item)[i]);
|
return PyFloat_FromDouble((double) ((float *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
f_setitem(arrayobject *ap, int i, PyObject *v)
|
f_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
float x;
|
float x;
|
||||||
if (!PyArg_Parse(v, "f;array item must be float", &x))
|
if (!PyArg_Parse(v, "f;array item must be float", &x))
|
||||||
|
@ -372,13 +373,13 @@ f_setitem(arrayobject *ap, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
d_getitem(arrayobject *ap, int i)
|
d_getitem(arrayobject *ap, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
return PyFloat_FromDouble(((double *)ap->ob_item)[i]);
|
return PyFloat_FromDouble(((double *)ap->ob_item)[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
d_setitem(arrayobject *ap, int i, PyObject *v)
|
d_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
double x;
|
double x;
|
||||||
if (!PyArg_Parse(v, "d;array item must be float", &x))
|
if (!PyArg_Parse(v, "d;array item must be float", &x))
|
||||||
|
@ -412,7 +413,7 @@ Implementations of array object methods.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
newarrayobject(PyTypeObject *type, int size, struct arraydescr *descr)
|
newarrayobject(PyTypeObject *type, Py_ssize_t size, struct arraydescr *descr)
|
||||||
{
|
{
|
||||||
arrayobject *op;
|
arrayobject *op;
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
|
@ -449,7 +450,7 @@ newarrayobject(PyTypeObject *type, int size, struct arraydescr *descr)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
getarrayitem(PyObject *op, int i)
|
getarrayitem(PyObject *op, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
register arrayobject *ap;
|
register arrayobject *ap;
|
||||||
assert(array_Check(op));
|
assert(array_Check(op));
|
||||||
|
@ -459,10 +460,10 @@ getarrayitem(PyObject *op, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ins1(arrayobject *self, int where, PyObject *v)
|
ins1(arrayobject *self, Py_ssize_t where, PyObject *v)
|
||||||
{
|
{
|
||||||
char *items;
|
char *items;
|
||||||
int n = self->ob_size;
|
Py_ssize_t n = self->ob_size;
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -506,7 +507,7 @@ array_richcompare(PyObject *v, PyObject *w, int op)
|
||||||
arrayobject *va, *wa;
|
arrayobject *va, *wa;
|
||||||
PyObject *vi = NULL;
|
PyObject *vi = NULL;
|
||||||
PyObject *wi = NULL;
|
PyObject *wi = NULL;
|
||||||
int i, k;
|
Py_ssize_t i, k;
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
|
|
||||||
if (!array_Check(v) || !array_Check(w)) {
|
if (!array_Check(v) || !array_Check(w)) {
|
||||||
|
@ -548,8 +549,8 @@ array_richcompare(PyObject *v, PyObject *w, int op)
|
||||||
|
|
||||||
if (k) {
|
if (k) {
|
||||||
/* No more items to compare -- compare sizes */
|
/* No more items to compare -- compare sizes */
|
||||||
int vs = va->ob_size;
|
Py_ssize_t vs = va->ob_size;
|
||||||
int ws = wa->ob_size;
|
Py_ssize_t ws = wa->ob_size;
|
||||||
int cmp;
|
int cmp;
|
||||||
switch (op) {
|
switch (op) {
|
||||||
case Py_LT: cmp = vs < ws; break;
|
case Py_LT: cmp = vs < ws; break;
|
||||||
|
@ -586,14 +587,14 @@ array_richcompare(PyObject *v, PyObject *w, int op)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
array_length(arrayobject *a)
|
array_length(arrayobject *a)
|
||||||
{
|
{
|
||||||
return a->ob_size;
|
return a->ob_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_item(arrayobject *a, int i)
|
array_item(arrayobject *a, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (i < 0 || i >= a->ob_size) {
|
if (i < 0 || i >= a->ob_size) {
|
||||||
PyErr_SetString(PyExc_IndexError, "array index out of range");
|
PyErr_SetString(PyExc_IndexError, "array index out of range");
|
||||||
|
@ -603,7 +604,7 @@ array_item(arrayobject *a, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_slice(arrayobject *a, int ilow, int ihigh)
|
array_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
|
||||||
{
|
{
|
||||||
arrayobject *np;
|
arrayobject *np;
|
||||||
if (ilow < 0)
|
if (ilow < 0)
|
||||||
|
@ -638,7 +639,7 @@ PyDoc_STRVAR(copy_doc,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_concat(arrayobject *a, PyObject *bb)
|
array_concat(arrayobject *a, PyObject *bb)
|
||||||
{
|
{
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
arrayobject *np;
|
arrayobject *np;
|
||||||
if (!array_Check(bb)) {
|
if (!array_Check(bb)) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
|
@ -664,13 +665,13 @@ array_concat(arrayobject *a, PyObject *bb)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_repeat(arrayobject *a, int n)
|
array_repeat(arrayobject *a, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
arrayobject *np;
|
arrayobject *np;
|
||||||
char *p;
|
char *p;
|
||||||
int nbytes;
|
Py_ssize_t nbytes;
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
n = 0;
|
n = 0;
|
||||||
size = a->ob_size * n;
|
size = a->ob_size * n;
|
||||||
|
@ -760,7 +761,7 @@ array_ass_slice(arrayobject *a, int ilow, int ihigh, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
array_ass_item(arrayobject *a, int i, PyObject *v)
|
array_ass_item(arrayobject *a, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
if (i < 0 || i >= a->ob_size) {
|
if (i < 0 || i >= a->ob_size) {
|
||||||
PyErr_SetString(PyExc_IndexError,
|
PyErr_SetString(PyExc_IndexError,
|
||||||
|
@ -773,7 +774,7 @@ array_ass_item(arrayobject *a, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
setarrayitem(PyObject *a, int i, PyObject *v)
|
setarrayitem(PyObject *a, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
assert(array_Check(a));
|
assert(array_Check(a));
|
||||||
return array_ass_item((arrayobject *)a, i, v);
|
return array_ass_item((arrayobject *)a, i, v);
|
||||||
|
@ -805,7 +806,7 @@ array_iter_extend(arrayobject *self, PyObject *bb)
|
||||||
static int
|
static int
|
||||||
array_do_extend(arrayobject *self, PyObject *bb)
|
array_do_extend(arrayobject *self, PyObject *bb)
|
||||||
{
|
{
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if (!array_Check(bb))
|
if (!array_Check(bb))
|
||||||
return array_iter_extend(self, bb);
|
return array_iter_extend(self, bb);
|
||||||
|
@ -847,10 +848,10 @@ array_inplace_concat(arrayobject *self, PyObject *bb)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_inplace_repeat(arrayobject *self, int n)
|
array_inplace_repeat(arrayobject *self, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
char *items, *p;
|
char *items, *p;
|
||||||
int size, i;
|
Py_ssize_t size, i;
|
||||||
|
|
||||||
if (self->ob_size > 0) {
|
if (self->ob_size > 0) {
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
|
@ -883,7 +884,7 @@ array_inplace_repeat(arrayobject *self, int n)
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
ins(arrayobject *self, int where, PyObject *v)
|
ins(arrayobject *self, Py_ssize_t where, PyObject *v)
|
||||||
{
|
{
|
||||||
if (ins1(self, where, v) != 0)
|
if (ins1(self, where, v) != 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -894,8 +895,8 @@ ins(arrayobject *self, int where, PyObject *v)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_count(arrayobject *self, PyObject *v)
|
array_count(arrayobject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
int count = 0;
|
Py_ssize_t count = 0;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
for (i = 0; i < self->ob_size; i++) {
|
for (i = 0; i < self->ob_size; i++) {
|
||||||
PyObject *selfi = getarrayitem((PyObject *)self, i);
|
PyObject *selfi = getarrayitem((PyObject *)self, i);
|
||||||
|
@ -906,7 +907,10 @@ array_count(arrayobject *self, PyObject *v)
|
||||||
else if (cmp < 0)
|
else if (cmp < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong((long)count);
|
if (i < LONG_MAX)
|
||||||
|
return PyInt_FromLong((long)count);
|
||||||
|
else
|
||||||
|
return PyLong_FromLong(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(count_doc,
|
PyDoc_STRVAR(count_doc,
|
||||||
|
@ -917,7 +921,7 @@ Return number of occurences of x in the array.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_index(arrayobject *self, PyObject *v)
|
array_index(arrayobject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
for (i = 0; i < self->ob_size; i++) {
|
for (i = 0; i < self->ob_size; i++) {
|
||||||
PyObject *selfi = getarrayitem((PyObject *)self, i);
|
PyObject *selfi = getarrayitem((PyObject *)self, i);
|
||||||
|
@ -941,7 +945,8 @@ Return index of first occurence of x in the array.");
|
||||||
static int
|
static int
|
||||||
array_contains(arrayobject *self, PyObject *v)
|
array_contains(arrayobject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
int i, cmp;
|
Py_ssize_t i;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
for (i = 0, cmp = 0 ; cmp == 0 && i < self->ob_size; i++) {
|
for (i = 0, cmp = 0 ; cmp == 0 && i < self->ob_size; i++) {
|
||||||
PyObject *selfi = getarrayitem((PyObject *)self, i);
|
PyObject *selfi = getarrayitem((PyObject *)self, i);
|
||||||
|
@ -1079,7 +1084,7 @@ static PyObject *
|
||||||
array_byteswap(arrayobject *self, PyObject *unused)
|
array_byteswap(arrayobject *self, PyObject *unused)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
switch (self->ob_descr->itemsize) {
|
switch (self->ob_descr->itemsize) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1158,7 +1163,7 @@ PyDoc_STRVAR(array_doc, "Return state information for pickling.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_reverse(arrayobject *self, PyObject *unused)
|
array_reverse(arrayobject *self, PyObject *unused)
|
||||||
{
|
{
|
||||||
register int itemsize = self->ob_descr->itemsize;
|
register Py_ssize_t itemsize = self->ob_descr->itemsize;
|
||||||
register char *p, *q;
|
register char *p, *q;
|
||||||
/* little buffer to hold items while swapping */
|
/* little buffer to hold items while swapping */
|
||||||
char tmp[256]; /* 8 is probably enough -- but why skimp */
|
char tmp[256]; /* 8 is probably enough -- but why skimp */
|
||||||
|
@ -1223,7 +1228,7 @@ array_fromfile(arrayobject *self, PyObject *args)
|
||||||
nread = fread(item + (self->ob_size - n) * itemsize,
|
nread = fread(item + (self->ob_size - n) * itemsize,
|
||||||
itemsize, n, fp);
|
itemsize, n, fp);
|
||||||
if (nread < (size_t)n) {
|
if (nread < (size_t)n) {
|
||||||
self->ob_size -= (n - nread);
|
self->ob_size -= (n - nread);
|
||||||
PyMem_RESIZE(item, char, self->ob_size*itemsize);
|
PyMem_RESIZE(item, char, self->ob_size*itemsize);
|
||||||
self->ob_item = item;
|
self->ob_item = item;
|
||||||
self->allocated = self->ob_size;
|
self->allocated = self->ob_size;
|
||||||
|
@ -1275,8 +1280,8 @@ write.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
array_fromlist(arrayobject *self, PyObject *list)
|
array_fromlist(arrayobject *self, PyObject *list)
|
||||||
{
|
{
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
int itemsize = self->ob_descr->itemsize;
|
Py_ssize_t itemsize = self->ob_descr->itemsize;
|
||||||
|
|
||||||
if (!PyList_Check(list)) {
|
if (!PyList_Check(list)) {
|
||||||
PyErr_SetString(PyExc_TypeError, "arg must be list");
|
PyErr_SetString(PyExc_TypeError, "arg must be list");
|
||||||
|
@ -1285,7 +1290,7 @@ array_fromlist(arrayobject *self, PyObject *list)
|
||||||
n = PyList_Size(list);
|
n = PyList_Size(list);
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
char *item = self->ob_item;
|
char *item = self->ob_item;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyMem_RESIZE(item, char, (self->ob_size + n) * itemsize);
|
PyMem_RESIZE(item, char, (self->ob_size + n) * itemsize);
|
||||||
if (item == NULL) {
|
if (item == NULL) {
|
||||||
PyErr_NoMemory();
|
PyErr_NoMemory();
|
||||||
|
@ -1321,7 +1326,7 @@ static PyObject *
|
||||||
array_tolist(arrayobject *self, PyObject *unused)
|
array_tolist(arrayobject *self, PyObject *unused)
|
||||||
{
|
{
|
||||||
PyObject *list = PyList_New(self->ob_size);
|
PyObject *list = PyList_New(self->ob_size);
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1346,7 +1351,7 @@ static PyObject *
|
||||||
array_fromstring(arrayobject *self, PyObject *args)
|
array_fromstring(arrayobject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
int itemsize = self->ob_descr->itemsize;
|
int itemsize = self->ob_descr->itemsize;
|
||||||
if (!PyArg_ParseTuple(args, "s#:fromstring", &str, &n))
|
if (!PyArg_ParseTuple(args, "s#:fromstring", &str, &n))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1400,7 +1405,7 @@ static PyObject *
|
||||||
array_fromunicode(arrayobject *self, PyObject *args)
|
array_fromunicode(arrayobject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
Py_UNICODE *ustr;
|
Py_UNICODE *ustr;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "u#:fromunicode", &ustr, &n))
|
if (!PyArg_ParseTuple(args, "u#:fromunicode", &ustr, &n))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1541,7 +1546,7 @@ array_repr(arrayobject *a)
|
||||||
{
|
{
|
||||||
char buf[256], typecode;
|
char buf[256], typecode;
|
||||||
PyObject *s, *t, *v = NULL;
|
PyObject *s, *t, *v = NULL;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
len = a->ob_size;
|
len = a->ob_size;
|
||||||
typecode = a->ob_descr->typecode;
|
typecode = a->ob_descr->typecode;
|
||||||
|
@ -1586,7 +1591,7 @@ array_subscr(arrayobject* self, PyObject* item)
|
||||||
return array_item(self, i);
|
return array_item(self, i);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
int start, stop, step, slicelength, cur, i;
|
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||||
PyObject* result;
|
PyObject* result;
|
||||||
arrayobject* ar;
|
arrayobject* ar;
|
||||||
int itemsize = self->ob_descr->itemsize;
|
int itemsize = self->ob_descr->itemsize;
|
||||||
|
@ -1640,7 +1645,7 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
|
||||||
return array_ass_item(self, i, value);
|
return array_ass_item(self, i, value);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
int start, stop, step, slicelength;
|
Py_ssize_t start, stop, step, slicelength;
|
||||||
int itemsize = self->ob_descr->itemsize;
|
int itemsize = self->ob_descr->itemsize;
|
||||||
|
|
||||||
if (PySlice_GetIndicesEx((PySliceObject*)item, self->ob_size,
|
if (PySlice_GetIndicesEx((PySliceObject*)item, self->ob_size,
|
||||||
|
@ -1654,7 +1659,7 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
|
||||||
|
|
||||||
if (value == NULL) {
|
if (value == NULL) {
|
||||||
/* delete slice */
|
/* delete slice */
|
||||||
int cur, i, extra;
|
Py_ssize_t cur, i, extra;
|
||||||
|
|
||||||
if (slicelength <= 0)
|
if (slicelength <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1686,7 +1691,7 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* assign slice */
|
/* assign slice */
|
||||||
int cur, i;
|
Py_ssize_t cur, i;
|
||||||
arrayobject* av;
|
arrayobject* av;
|
||||||
|
|
||||||
if (!array_Check(value)) {
|
if (!array_Check(value)) {
|
||||||
|
@ -1700,8 +1705,8 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
|
||||||
|
|
||||||
if (av->ob_size != slicelength) {
|
if (av->ob_size != slicelength) {
|
||||||
PyErr_Format(PyExc_ValueError,
|
PyErr_Format(PyExc_ValueError,
|
||||||
"attempt to assign array of size %d to extended slice of size %d",
|
"attempt to assign array of size %ld to extended slice of size %ld",
|
||||||
av->ob_size, slicelength);
|
/*XXX*/(long)av->ob_size, /*XXX*/(long)slicelength);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1737,13 +1742,13 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods array_as_mapping = {
|
static PyMappingMethods array_as_mapping = {
|
||||||
(inquiry)array_length,
|
(lenfunc)array_length,
|
||||||
(binaryfunc)array_subscr,
|
(binaryfunc)array_subscr,
|
||||||
(objobjargproc)array_ass_subscr
|
(objobjargproc)array_ass_subscr
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
array_buffer_getreadbuf(arrayobject *self, int index, const void **ptr)
|
array_buffer_getreadbuf(arrayobject *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
@ -1754,8 +1759,8 @@ array_buffer_getreadbuf(arrayobject *self, int index, const void **ptr)
|
||||||
return self->ob_size*self->ob_descr->itemsize;
|
return self->ob_size*self->ob_descr->itemsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
array_buffer_getwritebuf(arrayobject *self, int index, const void **ptr)
|
array_buffer_getwritebuf(arrayobject *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
@ -1766,8 +1771,8 @@ array_buffer_getwritebuf(arrayobject *self, int index, const void **ptr)
|
||||||
return self->ob_size*self->ob_descr->itemsize;
|
return self->ob_size*self->ob_descr->itemsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
array_buffer_getsegcount(arrayobject *self, int *lenp)
|
array_buffer_getsegcount(arrayobject *self, Py_ssize_t *lenp)
|
||||||
{
|
{
|
||||||
if ( lenp )
|
if ( lenp )
|
||||||
*lenp = self->ob_size*self->ob_descr->itemsize;
|
*lenp = self->ob_size*self->ob_descr->itemsize;
|
||||||
|
@ -1775,22 +1780,22 @@ array_buffer_getsegcount(arrayobject *self, int *lenp)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods array_as_sequence = {
|
static PySequenceMethods array_as_sequence = {
|
||||||
(inquiry)array_length, /*sq_length*/
|
(lenfunc)array_length, /*sq_length*/
|
||||||
(binaryfunc)array_concat, /*sq_concat*/
|
(binaryfunc)array_concat, /*sq_concat*/
|
||||||
(intargfunc)array_repeat, /*sq_repeat*/
|
(ssizeargfunc)array_repeat, /*sq_repeat*/
|
||||||
(intargfunc)array_item, /*sq_item*/
|
(ssizeargfunc)array_item, /*sq_item*/
|
||||||
(intintargfunc)array_slice, /*sq_slice*/
|
(ssizessizeargfunc)array_slice, /*sq_slice*/
|
||||||
(intobjargproc)array_ass_item, /*sq_ass_item*/
|
(ssizeobjargproc)array_ass_item, /*sq_ass_item*/
|
||||||
(intintobjargproc)array_ass_slice, /*sq_ass_slice*/
|
(ssizessizeobjargproc)array_ass_slice, /*sq_ass_slice*/
|
||||||
(objobjproc)array_contains, /*sq_contains*/
|
(objobjproc)array_contains, /*sq_contains*/
|
||||||
(binaryfunc)array_inplace_concat, /*sq_inplace_concat*/
|
(binaryfunc)array_inplace_concat, /*sq_inplace_concat*/
|
||||||
(intargfunc)array_inplace_repeat /*sq_inplace_repeat*/
|
(ssizeargfunc)array_inplace_repeat /*sq_inplace_repeat*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyBufferProcs array_as_buffer = {
|
static PyBufferProcs array_as_buffer = {
|
||||||
(getreadbufferproc)array_buffer_getreadbuf,
|
(readbufferproc)array_buffer_getreadbuf,
|
||||||
(getwritebufferproc)array_buffer_getwritebuf,
|
(writebufferproc)array_buffer_getwritebuf,
|
||||||
(getsegcountproc)array_buffer_getsegcount,
|
(segcountproc)array_buffer_getsegcount,
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -1822,7 +1827,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
for (descr = descriptors; descr->typecode != '\0'; descr++) {
|
for (descr = descriptors; descr->typecode != '\0'; descr++) {
|
||||||
if (descr->typecode == c) {
|
if (descr->typecode == c) {
|
||||||
PyObject *a;
|
PyObject *a;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (initial == NULL || !(PyList_Check(initial)
|
if (initial == NULL || !(PyList_Check(initial)
|
||||||
|| PyTuple_Check(initial)))
|
|| PyTuple_Check(initial)))
|
||||||
|
@ -1835,7 +1840,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
PyObject *v =
|
PyObject *v =
|
||||||
PySequence_GetItem(initial, i);
|
PySequence_GetItem(initial, i);
|
||||||
|
@ -1864,7 +1869,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
} else if (initial != NULL && PyUnicode_Check(initial)) {
|
} else if (initial != NULL && PyUnicode_Check(initial)) {
|
||||||
int n = PyUnicode_GET_DATA_SIZE(initial);
|
Py_ssize_t n = PyUnicode_GET_DATA_SIZE(initial);
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
arrayobject *self = (arrayobject *)a;
|
arrayobject *self = (arrayobject *)a;
|
||||||
char *item = self->ob_item;
|
char *item = self->ob_item;
|
||||||
|
@ -2012,9 +2017,9 @@ static PyTypeObject Arraytype = {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
long index;
|
Py_ssize_t index;
|
||||||
arrayobject *ao;
|
arrayobject *ao;
|
||||||
PyObject * (*getitem)(struct arrayobject *, int);
|
PyObject * (*getitem)(struct arrayobject *, Py_ssize_t);
|
||||||
} arrayiterobject;
|
} arrayiterobject;
|
||||||
|
|
||||||
static PyTypeObject PyArrayIter_Type;
|
static PyTypeObject PyArrayIter_Type;
|
||||||
|
|
|
@ -1020,7 +1020,9 @@ audioop_ratecv(PyObject *self, PyObject *args)
|
||||||
cur_i[chan]));
|
cur_i[chan]));
|
||||||
if (PyErr_Occurred())
|
if (PyErr_Occurred())
|
||||||
goto exit;
|
goto exit;
|
||||||
len = ncp - PyString_AsString(str);
|
/* We have checked before that the length
|
||||||
|
* of the string fits into int. */
|
||||||
|
len = (int)(ncp - PyString_AsString(str));
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
/*don't want to resize to zero length*/
|
/*don't want to resize to zero length*/
|
||||||
rv = PyString_FromStringAndSize("", 0);
|
rv = PyString_FromStringAndSize("", 0);
|
||||||
|
|
|
@ -240,7 +240,7 @@ bsddb_dealloc(bsddbobject *dp)
|
||||||
#define BSDDB_END_SAVE(_dp) Py_END_ALLOW_THREADS
|
#define BSDDB_END_SAVE(_dp) Py_END_ALLOW_THREADS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
bsddb_length(bsddbobject *dp)
|
bsddb_length(bsddbobject *dp)
|
||||||
{
|
{
|
||||||
check_bsddbobject_open(dp, -1);
|
check_bsddbobject_open(dp, -1);
|
||||||
|
@ -374,7 +374,7 @@ bsddb_ass_sub(bsddbobject *dp, PyObject *key, PyObject *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods bsddb_as_mapping = {
|
static PyMappingMethods bsddb_as_mapping = {
|
||||||
(inquiry)bsddb_length, /*mp_length*/
|
(lenfunc)bsddb_length, /*mp_length*/
|
||||||
(binaryfunc)bsddb_subscript, /*mp_subscript*/
|
(binaryfunc)bsddb_subscript, /*mp_subscript*/
|
||||||
(objobjargproc)bsddb_ass_sub, /*mp_ass_subscript*/
|
(objobjargproc)bsddb_ass_sub, /*mp_ass_subscript*/
|
||||||
};
|
};
|
||||||
|
|
|
@ -908,7 +908,7 @@ BZ2File_writelines(BZ2FileObject *self, PyObject *seq)
|
||||||
PyObject *v = PyList_GET_ITEM(list, i);
|
PyObject *v = PyList_GET_ITEM(list, i);
|
||||||
if (!PyString_Check(v)) {
|
if (!PyString_Check(v)) {
|
||||||
const char *buffer;
|
const char *buffer;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
if (PyObject_AsCharBuffer(v, &buffer, &len)) {
|
if (PyObject_AsCharBuffer(v, &buffer, &len)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"writelines() "
|
"writelines() "
|
||||||
|
|
|
@ -339,7 +339,7 @@ typedef struct Picklerobject {
|
||||||
|
|
||||||
int fast; /* Fast mode doesn't save in memo, don't use if circ ref */
|
int fast; /* Fast mode doesn't save in memo, don't use if circ ref */
|
||||||
int nesting;
|
int nesting;
|
||||||
int (*write_func)(struct Picklerobject *, const char *, int);
|
int (*write_func)(struct Picklerobject *, const char *, Py_ssize_t);
|
||||||
char *write_buf;
|
char *write_buf;
|
||||||
int buf_size;
|
int buf_size;
|
||||||
PyObject *dispatch_table;
|
PyObject *dispatch_table;
|
||||||
|
@ -368,8 +368,8 @@ typedef struct Unpicklerobject {
|
||||||
int *marks;
|
int *marks;
|
||||||
int num_marks;
|
int num_marks;
|
||||||
int marks_size;
|
int marks_size;
|
||||||
int (*read_func)(struct Unpicklerobject *, char **, int);
|
Py_ssize_t (*read_func)(struct Unpicklerobject *, char **, Py_ssize_t);
|
||||||
int (*readline_func)(struct Unpicklerobject *, char **);
|
Py_ssize_t (*readline_func)(struct Unpicklerobject *, char **);
|
||||||
int buf_size;
|
int buf_size;
|
||||||
char *buf;
|
char *buf;
|
||||||
PyObject *find_class;
|
PyObject *find_class;
|
||||||
|
@ -417,7 +417,7 @@ cPickle_ErrFormat(PyObject *ErrType, char *stringformat, char *format, ...)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
write_file(Picklerobject *self, const char *s, int n)
|
write_file(Picklerobject *self, const char *s, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
size_t nbyteswritten;
|
size_t nbyteswritten;
|
||||||
|
|
||||||
|
@ -425,6 +425,11 @@ write_file(Picklerobject *self, const char *s, int n)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (n > INT_MAX) {
|
||||||
|
/* String too large */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
Py_BEGIN_ALLOW_THREADS
|
Py_BEGIN_ALLOW_THREADS
|
||||||
nbyteswritten = fwrite(s, sizeof(char), n, self->fp);
|
nbyteswritten = fwrite(s, sizeof(char), n, self->fp);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
|
@ -433,11 +438,11 @@ write_file(Picklerobject *self, const char *s, int n)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return (int)n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
write_cStringIO(Picklerobject *self, const char *s, int n)
|
write_cStringIO(Picklerobject *self, const char *s, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -447,21 +452,26 @@ write_cStringIO(Picklerobject *self, const char *s, int n)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return (int)n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
write_none(Picklerobject *self, const char *s, int n)
|
write_none(Picklerobject *self, const char *s, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
if (s == NULL) return 0;
|
if (s == NULL) return 0;
|
||||||
return n;
|
if (n > INT_MAX) return -1;
|
||||||
|
return (int)n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
write_other(Picklerobject *self, const char *s, int n)
|
write_other(Picklerobject *self, const char *s, Py_ssize_t _n)
|
||||||
{
|
{
|
||||||
PyObject *py_str = 0, *junk = 0;
|
PyObject *py_str = 0, *junk = 0;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
if (_n > INT_MAX)
|
||||||
|
return -1;
|
||||||
|
n = (int)_n;
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
if (!( self->buf_size )) return 0;
|
if (!( self->buf_size )) return 0;
|
||||||
py_str = PyString_FromStringAndSize(self->write_buf,
|
py_str = PyString_FromStringAndSize(self->write_buf,
|
||||||
|
@ -505,8 +515,8 @@ write_other(Picklerobject *self, const char *s, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
read_file(Unpicklerobject *self, char **s, int n)
|
read_file(Unpicklerobject *self, char **s, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
size_t nbytesread;
|
size_t nbytesread;
|
||||||
|
|
||||||
|
@ -549,7 +559,7 @@ read_file(Unpicklerobject *self, char **s, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
readline_file(Unpicklerobject *self, char **s)
|
readline_file(Unpicklerobject *self, char **s)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -588,8 +598,8 @@ readline_file(Unpicklerobject *self, char **s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
read_cStringIO(Unpicklerobject *self, char **s, int n)
|
read_cStringIO(Unpicklerobject *self, char **s, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
|
@ -604,10 +614,10 @@ read_cStringIO(Unpicklerobject *self, char **s, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
readline_cStringIO(Unpicklerobject *self, char **s)
|
readline_cStringIO(Unpicklerobject *self, char **s)
|
||||||
{
|
{
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
if ((n = PycStringIO->creadline((PyObject *)self->file, &ptr)) < 0) {
|
if ((n = PycStringIO->creadline((PyObject *)self->file, &ptr)) < 0) {
|
||||||
|
@ -620,12 +630,12 @@ readline_cStringIO(Unpicklerobject *self, char **s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
read_other(Unpicklerobject *self, char **s, int n)
|
read_other(Unpicklerobject *self, char **s, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
PyObject *bytes, *str=0;
|
PyObject *bytes, *str=0;
|
||||||
|
|
||||||
if (!( bytes = PyInt_FromLong(n))) return -1;
|
if (!( bytes = PyInt_FromSsize_t(n))) return -1;
|
||||||
|
|
||||||
ARG_TUP(self, bytes);
|
ARG_TUP(self, bytes);
|
||||||
if (self->arg) {
|
if (self->arg) {
|
||||||
|
@ -642,11 +652,11 @@ read_other(Unpicklerobject *self, char **s, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
readline_other(Unpicklerobject *self, char **s)
|
readline_other(Unpicklerobject *self, char **s)
|
||||||
{
|
{
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
int str_size;
|
Py_ssize_t str_size;
|
||||||
|
|
||||||
if (!( str = PyObject_CallObject(self->readline, empty_tuple))) {
|
if (!( str = PyObject_CallObject(self->readline, empty_tuple))) {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -828,7 +838,7 @@ put2(Picklerobject *self, PyObject *ob)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
whichmodule(PyObject *global, PyObject *global_name)
|
whichmodule(PyObject *global, PyObject *global_name)
|
||||||
{
|
{
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
PyObject *module = 0, *modules_dict = 0,
|
PyObject *module = 0, *modules_dict = 0,
|
||||||
*global_name_attr = 0, *name = 0;
|
*global_name_attr = 0, *name = 0;
|
||||||
|
|
||||||
|
@ -3280,7 +3290,7 @@ load_long(Unpicklerobject *self)
|
||||||
static int
|
static int
|
||||||
load_counted_long(Unpicklerobject *self, int size)
|
load_counted_long(Unpicklerobject *self, int size)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
char *nbytes;
|
char *nbytes;
|
||||||
unsigned char *pdata;
|
unsigned char *pdata;
|
||||||
PyObject *along;
|
PyObject *along;
|
||||||
|
@ -4253,7 +4263,7 @@ load_build(Unpicklerobject *self)
|
||||||
PyObject *state, *inst, *slotstate;
|
PyObject *state, *inst, *slotstate;
|
||||||
PyObject *__setstate__;
|
PyObject *__setstate__;
|
||||||
PyObject *d_key, *d_value;
|
PyObject *d_key, *d_value;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int res = -1;
|
int res = -1;
|
||||||
|
|
||||||
/* Stack is ... instance, state. We want to leave instance at
|
/* Stack is ... instance, state. We want to leave instance at
|
||||||
|
@ -5710,7 +5720,7 @@ PyMODINIT_FUNC
|
||||||
initcPickle(void)
|
initcPickle(void)
|
||||||
{
|
{
|
||||||
PyObject *m, *d, *di, *v, *k;
|
PyObject *m, *d, *di, *v, *k;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
char *rev = "1.71"; /* XXX when does this change? */
|
char *rev = "1.71"; /* XXX when does this change? */
|
||||||
PyObject *format_version;
|
PyObject *format_version;
|
||||||
PyObject *compatible_formats;
|
PyObject *compatible_formats;
|
||||||
|
|
|
@ -47,7 +47,7 @@ PyDoc_STRVAR(cStringIO_module_documentation,
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
char *buf;
|
char *buf;
|
||||||
int pos, string_size;
|
Py_ssize_t pos, string_size;
|
||||||
} IOobject;
|
} IOobject;
|
||||||
|
|
||||||
#define IOOOBJECT(O) ((IOobject*)(O))
|
#define IOOOBJECT(O) ((IOobject*)(O))
|
||||||
|
@ -57,9 +57,10 @@ typedef struct {
|
||||||
typedef struct { /* Subtype of IOobject */
|
typedef struct { /* Subtype of IOobject */
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
char *buf;
|
char *buf;
|
||||||
int pos, string_size;
|
Py_ssize_t pos, string_size;
|
||||||
|
|
||||||
int buf_size, softspace;
|
Py_ssize_t buf_size;
|
||||||
|
int softspace;
|
||||||
} Oobject;
|
} Oobject;
|
||||||
|
|
||||||
/* Declarations for objects of type StringI */
|
/* Declarations for objects of type StringI */
|
||||||
|
@ -67,7 +68,7 @@ typedef struct { /* Subtype of IOobject */
|
||||||
typedef struct { /* Subtype of IOobject */
|
typedef struct { /* Subtype of IOobject */
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
char *buf;
|
char *buf;
|
||||||
int pos, string_size;
|
Py_ssize_t pos, string_size;
|
||||||
/* We store a reference to the object here in order to keep
|
/* We store a reference to the object here in order to keep
|
||||||
the buffer alive during the lifetime of the Iobject. */
|
the buffer alive during the lifetime of the Iobject. */
|
||||||
PyObject *pbuf;
|
PyObject *pbuf;
|
||||||
|
@ -154,7 +155,7 @@ PyDoc_STRVAR(IO_read__doc__,
|
||||||
"read([s]) -- Read s characters, or the rest of the string");
|
"read([s]) -- Read s characters, or the rest of the string");
|
||||||
|
|
||||||
static int
|
static int
|
||||||
IO_cread(PyObject *self, char **output, int n) {
|
IO_cread(PyObject *self, char **output, Py_ssize_t n) {
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
|
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
|
||||||
|
@ -171,10 +172,10 @@ IO_cread(PyObject *self, char **output, int n) {
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
IO_read(IOobject *self, PyObject *args) {
|
IO_read(IOobject *self, PyObject *args) {
|
||||||
int n = -1;
|
Py_ssize_t n = -1;
|
||||||
char *output;
|
char *output;
|
||||||
|
|
||||||
UNLESS (PyArg_ParseTuple(args, "|i:read", &n)) return NULL;
|
UNLESS (PyArg_ParseTuple(args, "|n:read", &n)) return NULL;
|
||||||
|
|
||||||
if ( (n=IO_cread((PyObject*)self,&output,n)) < 0) return NULL;
|
if ( (n=IO_cread((PyObject*)self,&output,n)) < 0) return NULL;
|
||||||
|
|
||||||
|
@ -186,7 +187,7 @@ PyDoc_STRVAR(IO_readline__doc__, "readline() -- Read one line");
|
||||||
static int
|
static int
|
||||||
IO_creadline(PyObject *self, char **output) {
|
IO_creadline(PyObject *self, char **output) {
|
||||||
char *n, *s;
|
char *n, *s;
|
||||||
int l;
|
Py_ssize_t l;
|
||||||
|
|
||||||
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
|
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
|
||||||
|
|
||||||
|
@ -197,8 +198,9 @@ IO_creadline(PyObject *self, char **output) {
|
||||||
|
|
||||||
*output=((IOobject*)self)->buf + ((IOobject*)self)->pos;
|
*output=((IOobject*)self)->buf + ((IOobject*)self)->pos;
|
||||||
l = n - ((IOobject*)self)->buf - ((IOobject*)self)->pos;
|
l = n - ((IOobject*)self)->buf - ((IOobject*)self)->pos;
|
||||||
((IOobject*)self)->pos += l;
|
assert(((IOobject*)self)->pos + l < INT_MAX);
|
||||||
return l;
|
((IOobject*)self)->pos += (int)l;
|
||||||
|
return (int)l;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -285,10 +287,10 @@ PyDoc_STRVAR(IO_truncate__doc__,
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
IO_truncate(IOobject *self, PyObject *args) {
|
IO_truncate(IOobject *self, PyObject *args) {
|
||||||
int pos = -1;
|
Py_ssize_t pos = -1;
|
||||||
|
|
||||||
UNLESS (IO__opencheck(self)) return NULL;
|
UNLESS (IO__opencheck(self)) return NULL;
|
||||||
UNLESS (PyArg_ParseTuple(args, "|i:truncate", &pos)) return NULL;
|
UNLESS (PyArg_ParseTuple(args, "|n:truncate", &pos)) return NULL;
|
||||||
if (pos < 0) pos = self->pos;
|
if (pos < 0) pos = self->pos;
|
||||||
|
|
||||||
if (self->string_size > pos) self->string_size = pos;
|
if (self->string_size > pos) self->string_size = pos;
|
||||||
|
@ -324,10 +326,11 @@ PyDoc_STRVAR(O_seek__doc__,
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
O_seek(Oobject *self, PyObject *args) {
|
O_seek(Oobject *self, PyObject *args) {
|
||||||
int position, mode = 0;
|
Py_ssize_t position;
|
||||||
|
int mode = 0;
|
||||||
|
|
||||||
UNLESS (IO__opencheck(IOOOBJECT(self))) return NULL;
|
UNLESS (IO__opencheck(IOOOBJECT(self))) return NULL;
|
||||||
UNLESS (PyArg_ParseTuple(args, "i|i:seek", &position, &mode))
|
UNLESS (PyArg_ParseTuple(args, "n|i:seek", &position, &mode))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (mode == 2) {
|
if (mode == 2) {
|
||||||
|
@ -362,8 +365,8 @@ PyDoc_STRVAR(O_write__doc__,
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
O_cwrite(PyObject *self, const char *c, int l) {
|
O_cwrite(PyObject *self, const char *c, Py_ssize_t l) {
|
||||||
int newl;
|
Py_ssize_t newl;
|
||||||
Oobject *oself;
|
Oobject *oself;
|
||||||
|
|
||||||
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
|
UNLESS (IO__opencheck(IOOOBJECT(self))) return -1;
|
||||||
|
@ -372,8 +375,10 @@ O_cwrite(PyObject *self, const char *c, int l) {
|
||||||
newl = oself->pos+l;
|
newl = oself->pos+l;
|
||||||
if (newl >= oself->buf_size) {
|
if (newl >= oself->buf_size) {
|
||||||
oself->buf_size *= 2;
|
oself->buf_size *= 2;
|
||||||
if (oself->buf_size <= newl)
|
if (oself->buf_size <= newl) {
|
||||||
oself->buf_size = newl+1;
|
assert(newl + 1 < INT_MAX);
|
||||||
|
oself->buf_size = (int)(newl+1);
|
||||||
|
}
|
||||||
UNLESS (oself->buf =
|
UNLESS (oself->buf =
|
||||||
(char*)realloc(oself->buf, oself->buf_size)) {
|
(char*)realloc(oself->buf, oself->buf_size)) {
|
||||||
PyErr_SetString(PyExc_MemoryError,"out of memory");
|
PyErr_SetString(PyExc_MemoryError,"out of memory");
|
||||||
|
@ -384,13 +389,14 @@ O_cwrite(PyObject *self, const char *c, int l) {
|
||||||
|
|
||||||
memcpy(oself->buf+oself->pos,c,l);
|
memcpy(oself->buf+oself->pos,c,l);
|
||||||
|
|
||||||
oself->pos += l;
|
assert(oself->pos + l < INT_MAX);
|
||||||
|
oself->pos += (int)l;
|
||||||
|
|
||||||
if (oself->string_size < oself->pos) {
|
if (oself->string_size < oself->pos) {
|
||||||
oself->string_size = oself->pos;
|
oself->string_size = oself->pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
return l;
|
return (int)l;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -432,7 +438,7 @@ O_writelines(Oobject *self, PyObject *args) {
|
||||||
if (it == NULL)
|
if (it == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
while ((s = PyIter_Next(it)) != NULL) {
|
while ((s = PyIter_Next(it)) != NULL) {
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
char *c;
|
char *c;
|
||||||
if (PyString_AsStringAndSize(s, &c, &n) == -1) {
|
if (PyString_AsStringAndSize(s, &c, &n) == -1) {
|
||||||
Py_DECREF(it);
|
Py_DECREF(it);
|
||||||
|
@ -564,10 +570,11 @@ I_close(Iobject *self, PyObject *unused) {
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
I_seek(Iobject *self, PyObject *args) {
|
I_seek(Iobject *self, PyObject *args) {
|
||||||
int position, mode = 0;
|
Py_ssize_t position;
|
||||||
|
int mode = 0;
|
||||||
|
|
||||||
UNLESS (IO__opencheck(IOOOBJECT(self))) return NULL;
|
UNLESS (IO__opencheck(IOOOBJECT(self))) return NULL;
|
||||||
UNLESS (PyArg_ParseTuple(args, "i|i:seek", &position, &mode))
|
UNLESS (PyArg_ParseTuple(args, "n|i:seek", &position, &mode))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (mode == 2) position += self->string_size;
|
if (mode == 2) position += self->string_size;
|
||||||
|
@ -648,7 +655,7 @@ static PyObject *
|
||||||
newIobject(PyObject *s) {
|
newIobject(PyObject *s) {
|
||||||
Iobject *self;
|
Iobject *self;
|
||||||
char *buf;
|
char *buf;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
|
if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
|
||||||
PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
|
PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
|
||||||
|
|
|
@ -214,7 +214,7 @@ multibytecodec_encerror(MultibyteCodec *codec,
|
||||||
if (buf->excobj == NULL) {
|
if (buf->excobj == NULL) {
|
||||||
buf->excobj = PyUnicodeEncodeError_Create(codec->encoding,
|
buf->excobj = PyUnicodeEncodeError_Create(codec->encoding,
|
||||||
buf->inbuf_top,
|
buf->inbuf_top,
|
||||||
(int)(buf->inbuf_end - buf->inbuf_top),
|
buf->inbuf_end - buf->inbuf_top,
|
||||||
start, end, reason);
|
start, end, reason);
|
||||||
if (buf->excobj == NULL)
|
if (buf->excobj == NULL)
|
||||||
goto errorexit;
|
goto errorexit;
|
||||||
|
|
|
@ -314,7 +314,7 @@ PyDoc_STRVAR(extendleft_doc,
|
||||||
"Extend the left side of the deque with elements from the iterable");
|
"Extend the left side of the deque with elements from the iterable");
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_deque_rotate(dequeobject *deque, int n)
|
_deque_rotate(dequeobject *deque, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int i, len=deque->len, halflen=(len+1)>>1;
|
int i, len=deque->len, halflen=(len+1)>>1;
|
||||||
PyObject *item, *rv;
|
PyObject *item, *rv;
|
||||||
|
@ -365,7 +365,7 @@ deque_rotate(dequeobject *deque, PyObject *args)
|
||||||
PyDoc_STRVAR(rotate_doc,
|
PyDoc_STRVAR(rotate_doc,
|
||||||
"Rotate the deque n steps to the right (default n=1). If n is negative, rotates left.");
|
"Rotate the deque n steps to the right (default n=1). If n is negative, rotates left.");
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
deque_len(dequeobject *deque)
|
deque_len(dequeobject *deque)
|
||||||
{
|
{
|
||||||
return deque->len;
|
return deque->len;
|
||||||
|
@ -374,7 +374,7 @@ deque_len(dequeobject *deque)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
deque_remove(dequeobject *deque, PyObject *value)
|
deque_remove(dequeobject *deque, PyObject *value)
|
||||||
{
|
{
|
||||||
int i, n=deque->len;
|
Py_ssize_t i, n=deque->len;
|
||||||
|
|
||||||
for (i=0 ; i<n ; i++) {
|
for (i=0 ; i<n ; i++) {
|
||||||
PyObject *item = deque->leftblock->data[deque->leftindex];
|
PyObject *item = deque->leftblock->data[deque->leftindex];
|
||||||
|
@ -469,7 +469,7 @@ deque_item(dequeobject *deque, int i)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int
|
static int
|
||||||
deque_del_item(dequeobject *deque, int i)
|
deque_del_item(dequeobject *deque, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
PyObject *item;
|
PyObject *item;
|
||||||
|
|
||||||
|
@ -485,7 +485,7 @@ deque_del_item(dequeobject *deque, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
deque_ass_item(dequeobject *deque, int i, PyObject *v)
|
deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
PyObject *old_value;
|
PyObject *old_value;
|
||||||
block *b;
|
block *b;
|
||||||
|
@ -776,12 +776,12 @@ deque_init(dequeobject *deque, PyObject *args, PyObject *kwds)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods deque_as_sequence = {
|
static PySequenceMethods deque_as_sequence = {
|
||||||
(inquiry)deque_len, /* sq_length */
|
(lenfunc)deque_len, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
0, /* sq_repeat */
|
0, /* sq_repeat */
|
||||||
(intargfunc)deque_item, /* sq_item */
|
(ssizeargfunc)deque_item, /* sq_item */
|
||||||
0, /* sq_slice */
|
0, /* sq_slice */
|
||||||
(intobjargproc)deque_ass_item, /* sq_ass_item */
|
(ssizeobjargproc)deque_ass_item, /* sq_ass_item */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* deque object ********************************************************/
|
/* deque object ********************************************************/
|
||||||
|
|
|
@ -596,7 +596,7 @@ normalize_datetime(int *year, int *month, int *day,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
time_alloc(PyTypeObject *type, int aware)
|
time_alloc(PyTypeObject *type, Py_ssize_t aware)
|
||||||
{
|
{
|
||||||
PyObject *self;
|
PyObject *self;
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ time_alloc(PyTypeObject *type, int aware)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
datetime_alloc(PyTypeObject *type, int aware)
|
datetime_alloc(PyTypeObject *type, Py_ssize_t aware)
|
||||||
{
|
{
|
||||||
PyObject *self;
|
PyObject *self;
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ dbm_dealloc(register dbmobject *dp)
|
||||||
PyObject_Del(dp);
|
PyObject_Del(dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
dbm_length(dbmobject *dp)
|
dbm_length(dbmobject *dp)
|
||||||
{
|
{
|
||||||
if (dp->di_dbm == NULL) {
|
if (dp->di_dbm == NULL) {
|
||||||
|
@ -162,7 +162,7 @@ dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods dbm_as_mapping = {
|
static PyMappingMethods dbm_as_mapping = {
|
||||||
(inquiry)dbm_length, /*mp_length*/
|
(lenfunc)dbm_length, /*mp_length*/
|
||||||
(binaryfunc)dbm_subscript, /*mp_subscript*/
|
(binaryfunc)dbm_subscript, /*mp_subscript*/
|
||||||
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
|
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
|
||||||
};
|
};
|
||||||
|
|
|
@ -1274,7 +1274,7 @@ _PyObject_GC_New(PyTypeObject *tp)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyVarObject *
|
PyVarObject *
|
||||||
_PyObject_GC_NewVar(PyTypeObject *tp, int nitems)
|
_PyObject_GC_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
|
||||||
{
|
{
|
||||||
const size_t size = _PyObject_VAR_SIZE(tp, nitems);
|
const size_t size = _PyObject_VAR_SIZE(tp, nitems);
|
||||||
PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(size);
|
PyVarObject *op = (PyVarObject *) _PyObject_GC_Malloc(size);
|
||||||
|
|
|
@ -86,7 +86,7 @@ dbm_dealloc(register dbmobject *dp)
|
||||||
PyObject_Del(dp);
|
PyObject_Del(dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
dbm_length(dbmobject *dp)
|
dbm_length(dbmobject *dp)
|
||||||
{
|
{
|
||||||
if (dp->di_dbm == NULL) {
|
if (dp->di_dbm == NULL) {
|
||||||
|
@ -178,7 +178,7 @@ dbm_ass_sub(dbmobject *dp, PyObject *v, PyObject *w)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods dbm_as_mapping = {
|
static PyMappingMethods dbm_as_mapping = {
|
||||||
(inquiry)dbm_length, /*mp_length*/
|
(lenfunc)dbm_length, /*mp_length*/
|
||||||
(binaryfunc)dbm_subscript, /*mp_subscript*/
|
(binaryfunc)dbm_subscript, /*mp_subscript*/
|
||||||
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
|
(objobjargproc)dbm_ass_sub, /*mp_ass_subscript*/
|
||||||
};
|
};
|
||||||
|
|
|
@ -583,8 +583,8 @@ static struct PyMethodDef mmap_object_methods[] = {
|
||||||
|
|
||||||
/* Functions for treating an mmap'ed file as a buffer */
|
/* Functions for treating an mmap'ed file as a buffer */
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
mmap_buffer_getreadbuf(mmap_object *self, int index, const void **ptr)
|
mmap_buffer_getreadbuf(mmap_object *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
CHECK_VALID(-1);
|
CHECK_VALID(-1);
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
|
@ -596,8 +596,8 @@ mmap_buffer_getreadbuf(mmap_object *self, int index, const void **ptr)
|
||||||
return self->size;
|
return self->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
mmap_buffer_getwritebuf(mmap_object *self, int index, const void **ptr)
|
mmap_buffer_getwritebuf(mmap_object *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
CHECK_VALID(-1);
|
CHECK_VALID(-1);
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
|
@ -611,8 +611,8 @@ mmap_buffer_getwritebuf(mmap_object *self, int index, const void **ptr)
|
||||||
return self->size;
|
return self->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
mmap_buffer_getsegcount(mmap_object *self, int *lenp)
|
mmap_buffer_getsegcount(mmap_object *self, Py_ssize_t *lenp)
|
||||||
{
|
{
|
||||||
CHECK_VALID(-1);
|
CHECK_VALID(-1);
|
||||||
if (lenp)
|
if (lenp)
|
||||||
|
@ -620,8 +620,8 @@ mmap_buffer_getsegcount(mmap_object *self, int *lenp)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
mmap_buffer_getcharbuffer(mmap_object *self, int index, const void **ptr)
|
mmap_buffer_getcharbuffer(mmap_object *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
@ -638,7 +638,7 @@ mmap_object_getattr(mmap_object *self, char *name)
|
||||||
return Py_FindMethod (mmap_object_methods, (PyObject *)self, name);
|
return Py_FindMethod (mmap_object_methods, (PyObject *)self, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
mmap_length(mmap_object *self)
|
mmap_length(mmap_object *self)
|
||||||
{
|
{
|
||||||
CHECK_VALID(-1);
|
CHECK_VALID(-1);
|
||||||
|
@ -646,7 +646,7 @@ mmap_length(mmap_object *self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
mmap_item(mmap_object *self, int i)
|
mmap_item(mmap_object *self, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
CHECK_VALID(NULL);
|
CHECK_VALID(NULL);
|
||||||
if (i < 0 || (size_t)i >= self->size) {
|
if (i < 0 || (size_t)i >= self->size) {
|
||||||
|
@ -657,7 +657,7 @@ mmap_item(mmap_object *self, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
mmap_slice(mmap_object *self, int ilow, int ihigh)
|
mmap_slice(mmap_object *self, Py_ssize_t ilow, Py_ssize_t ihigh)
|
||||||
{
|
{
|
||||||
CHECK_VALID(NULL);
|
CHECK_VALID(NULL);
|
||||||
if (ilow < 0)
|
if (ilow < 0)
|
||||||
|
@ -684,7 +684,7 @@ mmap_concat(mmap_object *self, PyObject *bb)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
mmap_repeat(mmap_object *self, int n)
|
mmap_repeat(mmap_object *self, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
CHECK_VALID(NULL);
|
CHECK_VALID(NULL);
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
@ -693,7 +693,7 @@ mmap_repeat(mmap_object *self, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mmap_ass_slice(mmap_object *self, int ilow, int ihigh, PyObject *v)
|
mmap_ass_slice(mmap_object *self, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
|
||||||
{
|
{
|
||||||
const char *buf;
|
const char *buf;
|
||||||
|
|
||||||
|
@ -732,7 +732,7 @@ mmap_ass_slice(mmap_object *self, int ilow, int ihigh, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mmap_ass_item(mmap_object *self, int i, PyObject *v)
|
mmap_ass_item(mmap_object *self, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
const char *buf;
|
const char *buf;
|
||||||
|
|
||||||
|
@ -759,20 +759,20 @@ mmap_ass_item(mmap_object *self, int i, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods mmap_as_sequence = {
|
static PySequenceMethods mmap_as_sequence = {
|
||||||
(inquiry)mmap_length, /*sq_length*/
|
(lenfunc)mmap_length, /*sq_length*/
|
||||||
(binaryfunc)mmap_concat, /*sq_concat*/
|
(binaryfunc)mmap_concat, /*sq_concat*/
|
||||||
(intargfunc)mmap_repeat, /*sq_repeat*/
|
(ssizeargfunc)mmap_repeat, /*sq_repeat*/
|
||||||
(intargfunc)mmap_item, /*sq_item*/
|
(ssizeargfunc)mmap_item, /*sq_item*/
|
||||||
(intintargfunc)mmap_slice, /*sq_slice*/
|
(ssizessizeargfunc)mmap_slice, /*sq_slice*/
|
||||||
(intobjargproc)mmap_ass_item, /*sq_ass_item*/
|
(ssizeobjargproc)mmap_ass_item, /*sq_ass_item*/
|
||||||
(intintobjargproc)mmap_ass_slice, /*sq_ass_slice*/
|
(ssizessizeobjargproc)mmap_ass_slice, /*sq_ass_slice*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyBufferProcs mmap_as_buffer = {
|
static PyBufferProcs mmap_as_buffer = {
|
||||||
(getreadbufferproc)mmap_buffer_getreadbuf,
|
(readbufferproc)mmap_buffer_getreadbuf,
|
||||||
(getwritebufferproc)mmap_buffer_getwritebuf,
|
(writebufferproc)mmap_buffer_getwritebuf,
|
||||||
(getsegcountproc)mmap_buffer_getsegcount,
|
(segcountproc)mmap_buffer_getsegcount,
|
||||||
(getcharbufferproc)mmap_buffer_getcharbuffer,
|
(charbufferproc)mmap_buffer_getcharbuffer,
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyTypeObject mmap_object_type = {
|
static PyTypeObject mmap_object_type = {
|
||||||
|
|
|
@ -55,9 +55,9 @@ PyDoc_STRVAR(parser_doc_string,
|
||||||
static char parser_version_string[] = "0.5";
|
static char parser_version_string[] = "0.5";
|
||||||
|
|
||||||
|
|
||||||
typedef PyObject* (*SeqMaker) (int length);
|
typedef PyObject* (*SeqMaker) (Py_ssize_t length);
|
||||||
typedef int (*SeqInserter) (PyObject* sequence,
|
typedef int (*SeqInserter) (PyObject* sequence,
|
||||||
int index,
|
Py_ssize_t index,
|
||||||
PyObject* element);
|
PyObject* element);
|
||||||
|
|
||||||
/* The function below is copyrighted by Stichting Mathematisch Centrum. The
|
/* The function below is copyrighted by Stichting Mathematisch Centrum. The
|
||||||
|
@ -632,8 +632,9 @@ parser_tuple2st(PyST_Object *self, PyObject *args, PyObject *kw)
|
||||||
static node*
|
static node*
|
||||||
build_node_children(PyObject *tuple, node *root, int *line_num)
|
build_node_children(PyObject *tuple, node *root, int *line_num)
|
||||||
{
|
{
|
||||||
int len = PyObject_Size(tuple);
|
Py_ssize_t len = PyObject_Size(tuple);
|
||||||
int i, err;
|
Py_ssize_t i;
|
||||||
|
int err;
|
||||||
|
|
||||||
for (i = 1; i < len; ++i) {
|
for (i = 1; i < len; ++i) {
|
||||||
/* elem must always be a sequence, however simple */
|
/* elem must always be a sequence, however simple */
|
||||||
|
@ -663,7 +664,7 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
if (ISTERMINAL(type)) {
|
if (ISTERMINAL(type)) {
|
||||||
int len = PyObject_Size(elem);
|
Py_ssize_t len = PyObject_Size(elem);
|
||||||
PyObject *temp;
|
PyObject *temp;
|
||||||
|
|
||||||
if ((len != 2) && (len != 3)) {
|
if ((len != 2) && (len != 3)) {
|
||||||
|
|
|
@ -1642,7 +1642,7 @@ posix_listdir(PyObject *self, PyObject *args)
|
||||||
/* MAX_PATH characters could mean a bigger encoded string */
|
/* MAX_PATH characters could mean a bigger encoded string */
|
||||||
char namebuf[MAX_PATH*2+5];
|
char namebuf[MAX_PATH*2+5];
|
||||||
char *bufptr = namebuf;
|
char *bufptr = namebuf;
|
||||||
int len = sizeof(namebuf)/sizeof(namebuf[0]);
|
Py_ssize_t len = sizeof(namebuf)/sizeof(namebuf[0]);
|
||||||
|
|
||||||
#ifdef Py_WIN_WIDE_FILENAMES
|
#ifdef Py_WIN_WIDE_FILENAMES
|
||||||
/* If on wide-character-capable OS see if argument
|
/* If on wide-character-capable OS see if argument
|
||||||
|
@ -2340,7 +2340,7 @@ posix_execv(PyObject *self, PyObject *args)
|
||||||
PyObject *argv;
|
PyObject *argv;
|
||||||
char **argvlist;
|
char **argvlist;
|
||||||
int i, argc;
|
int i, argc;
|
||||||
PyObject *(*getitem)(PyObject *, int);
|
PyObject *(*getitem)(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
/* execv has two arguments: (path, argv), where
|
/* execv has two arguments: (path, argv), where
|
||||||
argv is a list or tuple of strings. */
|
argv is a list or tuple of strings. */
|
||||||
|
@ -2409,7 +2409,7 @@ posix_execve(PyObject *self, PyObject *args)
|
||||||
char **envlist;
|
char **envlist;
|
||||||
PyObject *key, *val, *keys=NULL, *vals=NULL;
|
PyObject *key, *val, *keys=NULL, *vals=NULL;
|
||||||
int i, pos, argc, envc;
|
int i, pos, argc, envc;
|
||||||
PyObject *(*getitem)(PyObject *, int);
|
PyObject *(*getitem)(PyObject *, Py_ssize_t);
|
||||||
int lastarg = 0;
|
int lastarg = 0;
|
||||||
|
|
||||||
/* execve has three arguments: (path, argv, env), where
|
/* execve has three arguments: (path, argv, env), where
|
||||||
|
@ -2553,7 +2553,7 @@ posix_spawnv(PyObject *self, PyObject *args)
|
||||||
char **argvlist;
|
char **argvlist;
|
||||||
int mode, i, argc;
|
int mode, i, argc;
|
||||||
Py_intptr_t spawnval;
|
Py_intptr_t spawnval;
|
||||||
PyObject *(*getitem)(PyObject *, int);
|
PyObject *(*getitem)(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
/* spawnv has three arguments: (mode, path, argv), where
|
/* spawnv has three arguments: (mode, path, argv), where
|
||||||
argv is a list or tuple of strings. */
|
argv is a list or tuple of strings. */
|
||||||
|
@ -2642,7 +2642,7 @@ posix_spawnve(PyObject *self, PyObject *args)
|
||||||
PyObject *key, *val, *keys=NULL, *vals=NULL, *res=NULL;
|
PyObject *key, *val, *keys=NULL, *vals=NULL, *res=NULL;
|
||||||
int mode, i, pos, argc, envc;
|
int mode, i, pos, argc, envc;
|
||||||
Py_intptr_t spawnval;
|
Py_intptr_t spawnval;
|
||||||
PyObject *(*getitem)(PyObject *, int);
|
PyObject *(*getitem)(PyObject *, Py_ssize_t);
|
||||||
int lastarg = 0;
|
int lastarg = 0;
|
||||||
|
|
||||||
/* spawnve has four arguments: (mode, path, argv, env), where
|
/* spawnve has four arguments: (mode, path, argv, env), where
|
||||||
|
@ -2794,7 +2794,7 @@ posix_spawnvp(PyObject *self, PyObject *args)
|
||||||
char **argvlist;
|
char **argvlist;
|
||||||
int mode, i, argc;
|
int mode, i, argc;
|
||||||
Py_intptr_t spawnval;
|
Py_intptr_t spawnval;
|
||||||
PyObject *(*getitem)(PyObject *, int);
|
PyObject *(*getitem)(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
/* spawnvp has three arguments: (mode, path, argv), where
|
/* spawnvp has three arguments: (mode, path, argv), where
|
||||||
argv is a list or tuple of strings. */
|
argv is a list or tuple of strings. */
|
||||||
|
@ -2875,7 +2875,7 @@ posix_spawnvpe(PyObject *self, PyObject *args)
|
||||||
PyObject *key, *val, *keys=NULL, *vals=NULL, *res=NULL;
|
PyObject *key, *val, *keys=NULL, *vals=NULL, *res=NULL;
|
||||||
int mode, i, pos, argc, envc;
|
int mode, i, pos, argc, envc;
|
||||||
Py_intptr_t spawnval;
|
Py_intptr_t spawnval;
|
||||||
PyObject *(*getitem)(PyObject *, int);
|
PyObject *(*getitem)(PyObject *, Py_ssize_t);
|
||||||
int lastarg = 0;
|
int lastarg = 0;
|
||||||
|
|
||||||
/* spawnvpe has four arguments: (mode, path, argv, env), where
|
/* spawnvpe has four arguments: (mode, path, argv, env), where
|
||||||
|
@ -4310,14 +4310,15 @@ _PyPopenCreateProcess(char *cmdstring,
|
||||||
char *s1,*s2, *s3 = " /c ";
|
char *s1,*s2, *s3 = " /c ";
|
||||||
const char *szConsoleSpawn = "w9xpopen.exe";
|
const char *szConsoleSpawn = "w9xpopen.exe";
|
||||||
int i;
|
int i;
|
||||||
int x;
|
Py_ssize_t x;
|
||||||
|
|
||||||
if (i = GetEnvironmentVariable("COMSPEC",NULL,0)) {
|
if (i = GetEnvironmentVariable("COMSPEC",NULL,0)) {
|
||||||
char *comshell;
|
char *comshell;
|
||||||
|
|
||||||
s1 = (char *)alloca(i);
|
s1 = (char *)alloca(i);
|
||||||
if (!(x = GetEnvironmentVariable("COMSPEC", s1, i)))
|
if (!(x = GetEnvironmentVariable("COMSPEC", s1, i)))
|
||||||
return x;
|
/* x < i, so x fits into an integer */
|
||||||
|
return (int)x;
|
||||||
|
|
||||||
/* Explicitly check if we are using COMMAND.COM. If we are
|
/* Explicitly check if we are using COMMAND.COM. If we are
|
||||||
* then use the w9xpopen hack.
|
* then use the w9xpopen hack.
|
||||||
|
@ -4520,7 +4521,7 @@ _PyPopen(char *cmdstring, int mode, int n)
|
||||||
switch (mode & (_O_RDONLY | _O_TEXT | _O_BINARY | _O_WRONLY)) {
|
switch (mode & (_O_RDONLY | _O_TEXT | _O_BINARY | _O_WRONLY)) {
|
||||||
case _O_WRONLY | _O_TEXT:
|
case _O_WRONLY | _O_TEXT:
|
||||||
/* Case for writing to child Stdin in text mode. */
|
/* Case for writing to child Stdin in text mode. */
|
||||||
fd1 = _open_osfhandle((long)hChildStdinWrDup, mode);
|
fd1 = _open_osfhandle((intptr_t)hChildStdinWrDup, mode);
|
||||||
f1 = _fdopen(fd1, "w");
|
f1 = _fdopen(fd1, "w");
|
||||||
f = PyFile_FromFile(f1, cmdstring, "w", _PyPclose);
|
f = PyFile_FromFile(f1, cmdstring, "w", _PyPclose);
|
||||||
PyFile_SetBufSize(f, 0);
|
PyFile_SetBufSize(f, 0);
|
||||||
|
@ -4531,7 +4532,7 @@ _PyPopen(char *cmdstring, int mode, int n)
|
||||||
|
|
||||||
case _O_RDONLY | _O_TEXT:
|
case _O_RDONLY | _O_TEXT:
|
||||||
/* Case for reading from child Stdout in text mode. */
|
/* Case for reading from child Stdout in text mode. */
|
||||||
fd1 = _open_osfhandle((long)hChildStdoutRdDup, mode);
|
fd1 = _open_osfhandle((intptr_t)hChildStdoutRdDup, mode);
|
||||||
f1 = _fdopen(fd1, "r");
|
f1 = _fdopen(fd1, "r");
|
||||||
f = PyFile_FromFile(f1, cmdstring, "r", _PyPclose);
|
f = PyFile_FromFile(f1, cmdstring, "r", _PyPclose);
|
||||||
PyFile_SetBufSize(f, 0);
|
PyFile_SetBufSize(f, 0);
|
||||||
|
@ -4542,7 +4543,7 @@ _PyPopen(char *cmdstring, int mode, int n)
|
||||||
|
|
||||||
case _O_RDONLY | _O_BINARY:
|
case _O_RDONLY | _O_BINARY:
|
||||||
/* Case for readinig from child Stdout in binary mode. */
|
/* Case for readinig from child Stdout in binary mode. */
|
||||||
fd1 = _open_osfhandle((long)hChildStdoutRdDup, mode);
|
fd1 = _open_osfhandle((intptr_t)hChildStdoutRdDup, mode);
|
||||||
f1 = _fdopen(fd1, "rb");
|
f1 = _fdopen(fd1, "rb");
|
||||||
f = PyFile_FromFile(f1, cmdstring, "rb", _PyPclose);
|
f = PyFile_FromFile(f1, cmdstring, "rb", _PyPclose);
|
||||||
PyFile_SetBufSize(f, 0);
|
PyFile_SetBufSize(f, 0);
|
||||||
|
@ -4553,7 +4554,7 @@ _PyPopen(char *cmdstring, int mode, int n)
|
||||||
|
|
||||||
case _O_WRONLY | _O_BINARY:
|
case _O_WRONLY | _O_BINARY:
|
||||||
/* Case for writing to child Stdin in binary mode. */
|
/* Case for writing to child Stdin in binary mode. */
|
||||||
fd1 = _open_osfhandle((long)hChildStdinWrDup, mode);
|
fd1 = _open_osfhandle((intptr_t)hChildStdinWrDup, mode);
|
||||||
f1 = _fdopen(fd1, "wb");
|
f1 = _fdopen(fd1, "wb");
|
||||||
f = PyFile_FromFile(f1, cmdstring, "wb", _PyPclose);
|
f = PyFile_FromFile(f1, cmdstring, "wb", _PyPclose);
|
||||||
PyFile_SetBufSize(f, 0);
|
PyFile_SetBufSize(f, 0);
|
||||||
|
@ -4579,9 +4580,9 @@ _PyPopen(char *cmdstring, int mode, int n)
|
||||||
m2 = "wb";
|
m2 = "wb";
|
||||||
}
|
}
|
||||||
|
|
||||||
fd1 = _open_osfhandle((long)hChildStdinWrDup, mode);
|
fd1 = _open_osfhandle((intptr_t)hChildStdinWrDup, mode);
|
||||||
f1 = _fdopen(fd1, m2);
|
f1 = _fdopen(fd1, m2);
|
||||||
fd2 = _open_osfhandle((long)hChildStdoutRdDup, mode);
|
fd2 = _open_osfhandle((intptr_t)hChildStdoutRdDup, mode);
|
||||||
f2 = _fdopen(fd2, m1);
|
f2 = _fdopen(fd2, m1);
|
||||||
p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose);
|
p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose);
|
||||||
PyFile_SetBufSize(p1, 0);
|
PyFile_SetBufSize(p1, 0);
|
||||||
|
@ -4611,11 +4612,11 @@ _PyPopen(char *cmdstring, int mode, int n)
|
||||||
m2 = "wb";
|
m2 = "wb";
|
||||||
}
|
}
|
||||||
|
|
||||||
fd1 = _open_osfhandle((long)hChildStdinWrDup, mode);
|
fd1 = _open_osfhandle((intptr_t)hChildStdinWrDup, mode);
|
||||||
f1 = _fdopen(fd1, m2);
|
f1 = _fdopen(fd1, m2);
|
||||||
fd2 = _open_osfhandle((long)hChildStdoutRdDup, mode);
|
fd2 = _open_osfhandle((intptr_t)hChildStdoutRdDup, mode);
|
||||||
f2 = _fdopen(fd2, m1);
|
f2 = _fdopen(fd2, m1);
|
||||||
fd3 = _open_osfhandle((long)hChildStderrRdDup, mode);
|
fd3 = _open_osfhandle((intptr_t)hChildStderrRdDup, mode);
|
||||||
f3 = _fdopen(fd3, m1);
|
f3 = _fdopen(fd3, m1);
|
||||||
p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose);
|
p1 = PyFile_FromFile(f1, cmdstring, m2, _PyPclose);
|
||||||
p2 = PyFile_FromFile(f2, cmdstring, m1, _PyPclose);
|
p2 = PyFile_FromFile(f2, cmdstring, m1, _PyPclose);
|
||||||
|
@ -5117,8 +5118,8 @@ PyDoc_STRVAR(posix_waitpid__doc__,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
posix_waitpid(PyObject *self, PyObject *args)
|
posix_waitpid(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int pid, options;
|
intptr_t pid;
|
||||||
int status;
|
int status, options;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "ii:waitpid", &pid, &options))
|
if (!PyArg_ParseTuple(args, "ii:waitpid", &pid, &options))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -168,7 +168,7 @@ putlong(FILE *outf, Py_UInt32 val)
|
||||||
buf[1] = (unsigned char) (val >> 16);
|
buf[1] = (unsigned char) (val >> 16);
|
||||||
buf[2] = (unsigned char) (val >> 8);
|
buf[2] = (unsigned char) (val >> 8);
|
||||||
buf[3] = (unsigned char) (val >> 0);
|
buf[3] = (unsigned char) (val >> 0);
|
||||||
return fwrite(buf, 4, 1, outf);
|
return (int)fwrite(buf, 4, 1, outf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -200,7 +200,7 @@ writeheader(FILE *outf, IMAGE *image)
|
||||||
putlong(outf, image->min);
|
putlong(outf, image->min);
|
||||||
putlong(outf, image->max);
|
putlong(outf, image->max);
|
||||||
putlong(outf, 0);
|
putlong(outf, 0);
|
||||||
return fwrite("no name", 8, 1, outf);
|
return (int)fwrite("no name", 8, 1, outf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -567,7 +567,8 @@ longstoimage(PyObject *self, PyObject *args)
|
||||||
Py_Int32 *starttab = NULL, *lengthtab = NULL;
|
Py_Int32 *starttab = NULL, *lengthtab = NULL;
|
||||||
unsigned char *rlebuf = NULL;
|
unsigned char *rlebuf = NULL;
|
||||||
unsigned char *lumbuf = NULL;
|
unsigned char *lumbuf = NULL;
|
||||||
int rlebuflen, goodwrite;
|
int rlebuflen;
|
||||||
|
Py_ssize_t goodwrite;
|
||||||
PyObject *retval = NULL;
|
PyObject *retval = NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "s#iiis:longstoimage", &lptr, &len,
|
if (!PyArg_ParseTuple(args, "s#iiis:longstoimage", &lptr, &len,
|
||||||
|
|
|
@ -340,7 +340,7 @@ static PyTypeObject poll_Type;
|
||||||
static int
|
static int
|
||||||
update_ufd_array(pollObject *self)
|
update_ufd_array(pollObject *self)
|
||||||
{
|
{
|
||||||
int i, pos;
|
Py_ssize_t i, pos;
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
|
|
||||||
self->ufd_len = PyDict_Size(self->dict);
|
self->ufd_len = PyDict_Size(self->dict);
|
||||||
|
|
|
@ -543,7 +543,7 @@ hashed.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
SHA_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
SHA_new(PyObject *self, PyObject *args, PyObject *kwdict)
|
||||||
{
|
{
|
||||||
static char *kwlist[] = {"string", NULL};
|
static const char *kwlist[] = {"string", NULL};
|
||||||
SHAobject *new;
|
SHAobject *new;
|
||||||
unsigned char *cp = NULL;
|
unsigned char *cp = NULL;
|
||||||
int len;
|
int len;
|
||||||
|
|
|
@ -170,7 +170,7 @@ strop_joinfields(PyObject *self, PyObject *args)
|
||||||
int i, reslen = 0, slen = 0, sz = 100;
|
int i, reslen = 0, slen = 0, sz = 100;
|
||||||
PyObject *res = NULL;
|
PyObject *res = NULL;
|
||||||
char* p = NULL;
|
char* p = NULL;
|
||||||
intargfunc getitemfunc;
|
ssizeargfunc getitemfunc;
|
||||||
|
|
||||||
WARN;
|
WARN;
|
||||||
if (!PyArg_ParseTuple(args, "O|t#:join", &seq, &sep, &seplen))
|
if (!PyArg_ParseTuple(args, "O|t#:join", &seq, &sep, &seplen))
|
||||||
|
@ -364,7 +364,7 @@ static PyObject *
|
||||||
do_strip(PyObject *args, int striptype)
|
do_strip(PyObject *args, int striptype)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
int len, i, j;
|
Py_ssize_t len, i, j;
|
||||||
|
|
||||||
|
|
||||||
if (PyString_AsStringAndSize(args, &s, &len))
|
if (PyString_AsStringAndSize(args, &s, &len))
|
||||||
|
@ -443,7 +443,7 @@ static PyObject *
|
||||||
strop_lower(PyObject *self, PyObject *args)
|
strop_lower(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *s, *s_new;
|
char *s, *s_new;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
int changed;
|
int changed;
|
||||||
|
|
||||||
|
@ -482,7 +482,7 @@ static PyObject *
|
||||||
strop_upper(PyObject *self, PyObject *args)
|
strop_upper(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *s, *s_new;
|
char *s, *s_new;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
int changed;
|
int changed;
|
||||||
|
|
||||||
|
@ -522,7 +522,7 @@ static PyObject *
|
||||||
strop_capitalize(PyObject *self, PyObject *args)
|
strop_capitalize(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *s, *s_new;
|
char *s, *s_new;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
int changed;
|
int changed;
|
||||||
|
|
||||||
|
@ -688,7 +688,7 @@ static PyObject *
|
||||||
strop_swapcase(PyObject *self, PyObject *args)
|
strop_swapcase(PyObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
char *s, *s_new;
|
char *s, *s_new;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
int changed;
|
int changed;
|
||||||
|
|
||||||
|
|
|
@ -249,6 +249,7 @@ make_filename(char *prefix, char *name, char *path)
|
||||||
*p = SEP;
|
*p = SEP;
|
||||||
}
|
}
|
||||||
len += strlen(name);
|
len += strlen(name);
|
||||||
|
assert(len < INT_MAX);
|
||||||
return (int)len;
|
return (int)len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -808,7 +809,8 @@ get_data(char *archive, PyObject *toc_entry)
|
||||||
PyObject *raw_data, *data = NULL, *decompress;
|
PyObject *raw_data, *data = NULL, *decompress;
|
||||||
char *buf;
|
char *buf;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int err, bytes_read = 0;
|
int err;
|
||||||
|
Py_ssize_t bytes_read = 0;
|
||||||
long l;
|
long l;
|
||||||
char *datapath;
|
char *datapath;
|
||||||
long compress, data_size, file_size, file_offset;
|
long compress, data_size, file_size, file_offset;
|
||||||
|
@ -1024,7 +1026,7 @@ get_mtime_of_source(ZipImporter *self, char *path)
|
||||||
{
|
{
|
||||||
PyObject *toc_entry;
|
PyObject *toc_entry;
|
||||||
time_t mtime = 0;
|
time_t mtime = 0;
|
||||||
int lastchar = strlen(path) - 1;
|
Py_ssize_t lastchar = strlen(path) - 1;
|
||||||
char savechar = path[lastchar];
|
char savechar = path[lastchar];
|
||||||
path[lastchar] = '\0'; /* strip 'c' or 'o' from *.py[co] */
|
path[lastchar] = '\0'; /* strip 'c' or 'o' from *.py[co] */
|
||||||
toc_entry = PyDict_GetItemString(self->files, path);
|
toc_entry = PyDict_GetItemString(self->files, path);
|
||||||
|
|
|
@ -56,7 +56,7 @@ PyObject_Type(PyObject *o)
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PyObject_Size(PyObject *o)
|
PyObject_Size(PyObject *o)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
@ -74,17 +74,17 @@ PyObject_Size(PyObject *o)
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef PyObject_Length
|
#undef PyObject_Length
|
||||||
int
|
Py_ssize_t
|
||||||
PyObject_Length(PyObject *o)
|
PyObject_Length(PyObject *o)
|
||||||
{
|
{
|
||||||
return PyObject_Size(o);
|
return PyObject_Size(o);
|
||||||
}
|
}
|
||||||
#define PyObject_Length PyObject_Size
|
#define PyObject_Length PyObject_Size
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
_PyObject_LengthHint(PyObject *o)
|
_PyObject_LengthHint(PyObject *o)
|
||||||
{
|
{
|
||||||
int rv = PyObject_Size(o);
|
Py_ssize_t rv = PyObject_Size(o);
|
||||||
if (rv != -1)
|
if (rv != -1)
|
||||||
return rv;
|
return rv;
|
||||||
if (PyErr_ExceptionMatches(PyExc_TypeError) ||
|
if (PyErr_ExceptionMatches(PyExc_TypeError) ||
|
||||||
|
@ -94,7 +94,7 @@ _PyObject_LengthHint(PyObject *o)
|
||||||
PyErr_Fetch(&err_type, &err_value, &err_tb);
|
PyErr_Fetch(&err_type, &err_value, &err_tb);
|
||||||
ro = PyObject_CallMethod(o, "__length_hint__", NULL);
|
ro = PyObject_CallMethod(o, "__length_hint__", NULL);
|
||||||
if (ro != NULL) {
|
if (ro != NULL) {
|
||||||
rv = (int)PyInt_AsLong(ro);
|
rv = PyInt_AsLong(ro);
|
||||||
Py_DECREF(ro);
|
Py_DECREF(ro);
|
||||||
Py_XDECREF(err_type);
|
Py_XDECREF(err_type);
|
||||||
Py_XDECREF(err_value);
|
Py_XDECREF(err_value);
|
||||||
|
@ -218,11 +218,11 @@ PyObject_DelItemString(PyObject *o, char *key)
|
||||||
|
|
||||||
int PyObject_AsCharBuffer(PyObject *obj,
|
int PyObject_AsCharBuffer(PyObject *obj,
|
||||||
const char **buffer,
|
const char **buffer,
|
||||||
int *buffer_len)
|
Py_ssize_t *buffer_len)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb;
|
PyBufferProcs *pb;
|
||||||
const char *pp;
|
const char *pp;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (obj == NULL || buffer == NULL || buffer_len == NULL) {
|
if (obj == NULL || buffer == NULL || buffer_len == NULL) {
|
||||||
null_error();
|
null_error();
|
||||||
|
@ -264,11 +264,11 @@ PyObject_CheckReadBuffer(PyObject *obj)
|
||||||
|
|
||||||
int PyObject_AsReadBuffer(PyObject *obj,
|
int PyObject_AsReadBuffer(PyObject *obj,
|
||||||
const void **buffer,
|
const void **buffer,
|
||||||
int *buffer_len)
|
Py_ssize_t *buffer_len)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb;
|
PyBufferProcs *pb;
|
||||||
void *pp;
|
void *pp;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (obj == NULL || buffer == NULL || buffer_len == NULL) {
|
if (obj == NULL || buffer == NULL || buffer_len == NULL) {
|
||||||
null_error();
|
null_error();
|
||||||
|
@ -297,11 +297,11 @@ int PyObject_AsReadBuffer(PyObject *obj,
|
||||||
|
|
||||||
int PyObject_AsWriteBuffer(PyObject *obj,
|
int PyObject_AsWriteBuffer(PyObject *obj,
|
||||||
void **buffer,
|
void **buffer,
|
||||||
int *buffer_len)
|
Py_ssize_t *buffer_len)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb;
|
PyBufferProcs *pb;
|
||||||
void*pp;
|
void*pp;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (obj == NULL || buffer == NULL || buffer_len == NULL) {
|
if (obj == NULL || buffer == NULL || buffer_len == NULL) {
|
||||||
null_error();
|
null_error();
|
||||||
|
@ -645,7 +645,7 @@ PyNumber_Add(PyObject *v, PyObject *w)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
sequence_repeat(intargfunc repeatfunc, PyObject *seq, PyObject *n)
|
sequence_repeat(ssizeargfunc repeatfunc, PyObject *seq, PyObject *n)
|
||||||
{
|
{
|
||||||
long count;
|
long count;
|
||||||
if (PyInt_Check(n)) {
|
if (PyInt_Check(n)) {
|
||||||
|
@ -839,7 +839,7 @@ PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
|
||||||
PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
|
PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_multiply),
|
||||||
NB_SLOT(nb_multiply));
|
NB_SLOT(nb_multiply));
|
||||||
if (result == Py_NotImplemented) {
|
if (result == Py_NotImplemented) {
|
||||||
intargfunc f = NULL;
|
ssizeargfunc f = NULL;
|
||||||
PySequenceMethods *mv = v->ob_type->tp_as_sequence;
|
PySequenceMethods *mv = v->ob_type->tp_as_sequence;
|
||||||
PySequenceMethods *mw = w->ob_type->tp_as_sequence;
|
PySequenceMethods *mw = w->ob_type->tp_as_sequence;
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
|
@ -943,7 +943,7 @@ PyNumber_Absolute(PyObject *o)
|
||||||
|
|
||||||
/* Add a check for embedded NULL-bytes in the argument. */
|
/* Add a check for embedded NULL-bytes in the argument. */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
int_from_string(const char *s, int len)
|
int_from_string(const char *s, Py_ssize_t len)
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
PyObject *x;
|
PyObject *x;
|
||||||
|
@ -965,7 +965,7 @@ PyNumber_Int(PyObject *o)
|
||||||
{
|
{
|
||||||
PyNumberMethods *m;
|
PyNumberMethods *m;
|
||||||
const char *buffer;
|
const char *buffer;
|
||||||
int buffer_len;
|
Py_ssize_t buffer_len;
|
||||||
|
|
||||||
if (o == NULL)
|
if (o == NULL)
|
||||||
return null_error();
|
return null_error();
|
||||||
|
@ -1006,7 +1006,7 @@ PyNumber_Int(PyObject *o)
|
||||||
|
|
||||||
/* Add a check for embedded NULL-bytes in the argument. */
|
/* Add a check for embedded NULL-bytes in the argument. */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
long_from_string(const char *s, int len)
|
long_from_string(const char *s, Py_ssize_t len)
|
||||||
{
|
{
|
||||||
char *end;
|
char *end;
|
||||||
PyObject *x;
|
PyObject *x;
|
||||||
|
@ -1028,7 +1028,7 @@ PyNumber_Long(PyObject *o)
|
||||||
{
|
{
|
||||||
PyNumberMethods *m;
|
PyNumberMethods *m;
|
||||||
const char *buffer;
|
const char *buffer;
|
||||||
int buffer_len;
|
Py_ssize_t buffer_len;
|
||||||
|
|
||||||
if (o == NULL)
|
if (o == NULL)
|
||||||
return null_error();
|
return null_error();
|
||||||
|
@ -1103,7 +1103,7 @@ PySequence_Check(PyObject *s)
|
||||||
s->ob_type->tp_as_sequence->sq_item != NULL;
|
s->ob_type->tp_as_sequence->sq_item != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PySequence_Size(PyObject *s)
|
PySequence_Size(PyObject *s)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
@ -1122,7 +1122,7 @@ PySequence_Size(PyObject *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef PySequence_Length
|
#undef PySequence_Length
|
||||||
int
|
Py_ssize_t
|
||||||
PySequence_Length(PyObject *s)
|
PySequence_Length(PyObject *s)
|
||||||
{
|
{
|
||||||
return PySequence_Size(s);
|
return PySequence_Size(s);
|
||||||
|
@ -1154,7 +1154,7 @@ PySequence_Concat(PyObject *s, PyObject *o)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PySequence_Repeat(PyObject *o, int count)
|
PySequence_Repeat(PyObject *o, Py_ssize_t count)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
|
||||||
|
@ -1207,7 +1207,7 @@ PySequence_InPlaceConcat(PyObject *s, PyObject *o)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PySequence_InPlaceRepeat(PyObject *o, int count)
|
PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
|
||||||
|
@ -1236,7 +1236,7 @@ PySequence_InPlaceRepeat(PyObject *o, int count)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PySequence_GetItem(PyObject *s, int i)
|
PySequence_GetItem(PyObject *s, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
|
||||||
|
@ -1247,7 +1247,7 @@ PySequence_GetItem(PyObject *s, int i)
|
||||||
if (m && m->sq_item) {
|
if (m && m->sq_item) {
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
if (m->sq_length) {
|
if (m->sq_length) {
|
||||||
int l = (*m->sq_length)(s);
|
Py_ssize_t l = (*m->sq_length)(s);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
i += l;
|
i += l;
|
||||||
|
@ -1260,7 +1260,7 @@ PySequence_GetItem(PyObject *s, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
sliceobj_from_intint(int i, int j)
|
sliceobj_from_intint(Py_ssize_t i, Py_ssize_t j)
|
||||||
{
|
{
|
||||||
PyObject *start, *end, *slice;
|
PyObject *start, *end, *slice;
|
||||||
start = PyInt_FromLong((long)i);
|
start = PyInt_FromLong((long)i);
|
||||||
|
@ -1278,7 +1278,7 @@ sliceobj_from_intint(int i, int j)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PySequence_GetSlice(PyObject *s, int i1, int i2)
|
PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
PyMappingMethods *mp;
|
PyMappingMethods *mp;
|
||||||
|
@ -1289,7 +1289,7 @@ PySequence_GetSlice(PyObject *s, int i1, int i2)
|
||||||
if (m && m->sq_slice) {
|
if (m && m->sq_slice) {
|
||||||
if (i1 < 0 || i2 < 0) {
|
if (i1 < 0 || i2 < 0) {
|
||||||
if (m->sq_length) {
|
if (m->sq_length) {
|
||||||
int l = (*m->sq_length)(s);
|
Py_ssize_t l = (*m->sq_length)(s);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (i1 < 0)
|
if (i1 < 0)
|
||||||
|
@ -1313,7 +1313,7 @@ PySequence_GetSlice(PyObject *s, int i1, int i2)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PySequence_SetItem(PyObject *s, int i, PyObject *o)
|
PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
|
||||||
|
@ -1326,7 +1326,7 @@ PySequence_SetItem(PyObject *s, int i, PyObject *o)
|
||||||
if (m && m->sq_ass_item) {
|
if (m && m->sq_ass_item) {
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
if (m->sq_length) {
|
if (m->sq_length) {
|
||||||
int l = (*m->sq_length)(s);
|
Py_ssize_t l = (*m->sq_length)(s);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return -1;
|
return -1;
|
||||||
i += l;
|
i += l;
|
||||||
|
@ -1340,7 +1340,7 @@ PySequence_SetItem(PyObject *s, int i, PyObject *o)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PySequence_DelItem(PyObject *s, int i)
|
PySequence_DelItem(PyObject *s, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
|
||||||
|
@ -1353,7 +1353,7 @@ PySequence_DelItem(PyObject *s, int i)
|
||||||
if (m && m->sq_ass_item) {
|
if (m && m->sq_ass_item) {
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
if (m->sq_length) {
|
if (m->sq_length) {
|
||||||
int l = (*m->sq_length)(s);
|
Py_ssize_t l = (*m->sq_length)(s);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return -1;
|
return -1;
|
||||||
i += l;
|
i += l;
|
||||||
|
@ -1367,7 +1367,7 @@ PySequence_DelItem(PyObject *s, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PySequence_SetSlice(PyObject *s, int i1, int i2, PyObject *o)
|
PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
PyMappingMethods *mp;
|
PyMappingMethods *mp;
|
||||||
|
@ -1381,7 +1381,7 @@ PySequence_SetSlice(PyObject *s, int i1, int i2, PyObject *o)
|
||||||
if (m && m->sq_ass_slice) {
|
if (m && m->sq_ass_slice) {
|
||||||
if (i1 < 0 || i2 < 0) {
|
if (i1 < 0 || i2 < 0) {
|
||||||
if (m->sq_length) {
|
if (m->sq_length) {
|
||||||
int l = (*m->sq_length)(s);
|
Py_ssize_t l = (*m->sq_length)(s);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (i1 < 0)
|
if (i1 < 0)
|
||||||
|
@ -1406,7 +1406,7 @@ PySequence_SetSlice(PyObject *s, int i1, int i2, PyObject *o)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PySequence_DelSlice(PyObject *s, int i1, int i2)
|
PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
|
||||||
{
|
{
|
||||||
PySequenceMethods *m;
|
PySequenceMethods *m;
|
||||||
|
|
||||||
|
@ -1419,7 +1419,7 @@ PySequence_DelSlice(PyObject *s, int i1, int i2)
|
||||||
if (m && m->sq_ass_slice) {
|
if (m && m->sq_ass_slice) {
|
||||||
if (i1 < 0 || i2 < 0) {
|
if (i1 < 0 || i2 < 0) {
|
||||||
if (m->sq_length) {
|
if (m->sq_length) {
|
||||||
int l = (*m->sq_length)(s);
|
Py_ssize_t l = (*m->sq_length)(s);
|
||||||
if (l < 0)
|
if (l < 0)
|
||||||
return -1;
|
return -1;
|
||||||
if (i1 < 0)
|
if (i1 < 0)
|
||||||
|
@ -1438,9 +1438,9 @@ PyObject *
|
||||||
PySequence_Tuple(PyObject *v)
|
PySequence_Tuple(PyObject *v)
|
||||||
{
|
{
|
||||||
PyObject *it; /* iter(v) */
|
PyObject *it; /* iter(v) */
|
||||||
int n; /* guess for result tuple size */
|
Py_ssize_t n; /* guess for result tuple size */
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
int j;
|
Py_ssize_t j;
|
||||||
|
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return null_error();
|
return null_error();
|
||||||
|
@ -1486,7 +1486,7 @@ PySequence_Tuple(PyObject *v)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (j >= n) {
|
if (j >= n) {
|
||||||
int oldn = n;
|
Py_ssize_t oldn = n;
|
||||||
/* The over-allocation strategy can grow a bit faster
|
/* The over-allocation strategy can grow a bit faster
|
||||||
than for lists because unlike lists the
|
than for lists because unlike lists the
|
||||||
over-allocation isn't permanent -- we reclaim
|
over-allocation isn't permanent -- we reclaim
|
||||||
|
@ -1708,7 +1708,7 @@ PyMapping_Check(PyObject *o)
|
||||||
o->ob_type->tp_as_sequence->sq_slice);
|
o->ob_type->tp_as_sequence->sq_slice);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PyMapping_Size(PyObject *o)
|
PyMapping_Size(PyObject *o)
|
||||||
{
|
{
|
||||||
PyMappingMethods *m;
|
PyMappingMethods *m;
|
||||||
|
@ -1727,7 +1727,7 @@ PyMapping_Size(PyObject *o)
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef PyMapping_Length
|
#undef PyMapping_Length
|
||||||
int
|
Py_ssize_t
|
||||||
PyMapping_Length(PyObject *o)
|
PyMapping_Length(PyObject *o)
|
||||||
{
|
{
|
||||||
return PyMapping_Size(o);
|
return PyMapping_Size(o);
|
||||||
|
@ -2053,7 +2053,7 @@ static int
|
||||||
abstract_issubclass(PyObject *derived, PyObject *cls)
|
abstract_issubclass(PyObject *derived, PyObject *cls)
|
||||||
{
|
{
|
||||||
PyObject *bases;
|
PyObject *bases;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
|
|
||||||
|
@ -2137,7 +2137,7 @@ recursive_isinstance(PyObject *inst, PyObject *cls, int recursion_depth)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (PyTuple_Check(cls)) {
|
else if (PyTuple_Check(cls)) {
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
if (!recursion_depth) {
|
if (!recursion_depth) {
|
||||||
PyErr_SetString(PyExc_RuntimeError,
|
PyErr_SetString(PyExc_RuntimeError,
|
||||||
|
@ -2191,8 +2191,8 @@ recursive_issubclass(PyObject *derived, PyObject *cls, int recursion_depth)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (PyTuple_Check(cls)) {
|
if (PyTuple_Check(cls)) {
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int n = PyTuple_GET_SIZE(cls);
|
Py_ssize_t n = PyTuple_GET_SIZE(cls);
|
||||||
|
|
||||||
if (!recursion_depth) {
|
if (!recursion_depth) {
|
||||||
PyErr_SetString(PyExc_RuntimeError,
|
PyErr_SetString(PyExc_RuntimeError,
|
||||||
|
|
|
@ -8,15 +8,15 @@ typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
PyObject *b_base;
|
PyObject *b_base;
|
||||||
void *b_ptr;
|
void *b_ptr;
|
||||||
int b_size;
|
Py_ssize_t b_size;
|
||||||
int b_offset;
|
Py_ssize_t b_offset;
|
||||||
int b_readonly;
|
int b_readonly;
|
||||||
long b_hash;
|
long b_hash;
|
||||||
} PyBufferObject;
|
} PyBufferObject;
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_buf(PyBufferObject *self, void **ptr, int *size)
|
get_buf(PyBufferObject *self, void **ptr, Py_ssize_t *size)
|
||||||
{
|
{
|
||||||
if (self->b_base == NULL) {
|
if (self->b_base == NULL) {
|
||||||
assert (ptr != NULL);
|
assert (ptr != NULL);
|
||||||
|
@ -24,8 +24,8 @@ get_buf(PyBufferObject *self, void **ptr, int *size)
|
||||||
*size = self->b_size;
|
*size = self->b_size;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int count, offset;
|
Py_ssize_t count, offset;
|
||||||
getreadbufferproc proc;
|
readbufferproc proc;
|
||||||
PyBufferProcs *bp = self->b_base->ob_type->tp_as_buffer;
|
PyBufferProcs *bp = self->b_base->ob_type->tp_as_buffer;
|
||||||
if ((*bp->bf_getsegcount)(self->b_base, NULL) != 1) {
|
if ((*bp->bf_getsegcount)(self->b_base, NULL) != 1) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
@ -35,7 +35,7 @@ get_buf(PyBufferObject *self, void **ptr, int *size)
|
||||||
if (self->b_readonly)
|
if (self->b_readonly)
|
||||||
proc = bp->bf_getreadbuffer;
|
proc = bp->bf_getreadbuffer;
|
||||||
else
|
else
|
||||||
proc = (getreadbufferproc)bp->bf_getwritebuffer;
|
proc = (readbufferproc)bp->bf_getwritebuffer;
|
||||||
if ((count = (*proc)(self->b_base, 0, ptr)) < 0)
|
if ((count = (*proc)(self->b_base, 0, ptr)) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
/* apply constraints to the start/end */
|
/* apply constraints to the start/end */
|
||||||
|
@ -56,7 +56,7 @@ get_buf(PyBufferObject *self, void **ptr, int *size)
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_from_memory(PyObject *base, int size, int offset, void *ptr,
|
buffer_from_memory(PyObject *base, Py_ssize_t size, Py_ssize_t offset, void *ptr,
|
||||||
int readonly)
|
int readonly)
|
||||||
{
|
{
|
||||||
PyBufferObject * b;
|
PyBufferObject * b;
|
||||||
|
@ -88,7 +88,7 @@ buffer_from_memory(PyObject *base, int size, int offset, void *ptr,
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_from_object(PyObject *base, int size, int offset, int readonly)
|
buffer_from_object(PyObject *base, Py_ssize_t size, Py_ssize_t offset, int readonly)
|
||||||
{
|
{
|
||||||
if (offset < 0) {
|
if (offset < 0) {
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
|
@ -99,7 +99,7 @@ buffer_from_object(PyObject *base, int size, int offset, int readonly)
|
||||||
/* another buffer, refer to the base object */
|
/* another buffer, refer to the base object */
|
||||||
PyBufferObject *b = (PyBufferObject *)base;
|
PyBufferObject *b = (PyBufferObject *)base;
|
||||||
if (b->b_size != Py_END_OF_BUFFER) {
|
if (b->b_size != Py_END_OF_BUFFER) {
|
||||||
int base_size = b->b_size - offset;
|
Py_ssize_t base_size = b->b_size - offset;
|
||||||
if (base_size < 0)
|
if (base_size < 0)
|
||||||
base_size = 0;
|
base_size = 0;
|
||||||
if (size == Py_END_OF_BUFFER || size > base_size)
|
if (size == Py_END_OF_BUFFER || size > base_size)
|
||||||
|
@ -113,7 +113,7 @@ buffer_from_object(PyObject *base, int size, int offset, int readonly)
|
||||||
|
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyBuffer_FromObject(PyObject *base, int offset, int size)
|
PyBuffer_FromObject(PyObject *base, Py_ssize_t offset, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb = base->ob_type->tp_as_buffer;
|
PyBufferProcs *pb = base->ob_type->tp_as_buffer;
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ PyBuffer_FromObject(PyObject *base, int offset, int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyBuffer_FromReadWriteObject(PyObject *base, int offset, int size)
|
PyBuffer_FromReadWriteObject(PyObject *base, Py_ssize_t offset, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb = base->ob_type->tp_as_buffer;
|
PyBufferProcs *pb = base->ob_type->tp_as_buffer;
|
||||||
|
|
||||||
|
@ -145,19 +145,19 @@ PyBuffer_FromReadWriteObject(PyObject *base, int offset, int size)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyBuffer_FromMemory(void *ptr, int size)
|
PyBuffer_FromMemory(void *ptr, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
return buffer_from_memory(NULL, size, 0, ptr, 1);
|
return buffer_from_memory(NULL, size, 0, ptr, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyBuffer_FromReadWriteMemory(void *ptr, int size)
|
PyBuffer_FromReadWriteMemory(void *ptr, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
return buffer_from_memory(NULL, size, 0, ptr, 0);
|
return buffer_from_memory(NULL, size, 0, ptr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyBuffer_New(int size)
|
PyBuffer_New(Py_ssize_t size)
|
||||||
{
|
{
|
||||||
PyObject *o;
|
PyObject *o;
|
||||||
PyBufferObject * b;
|
PyBufferObject * b;
|
||||||
|
@ -167,6 +167,7 @@ PyBuffer_New(int size)
|
||||||
"size must be zero or positive");
|
"size must be zero or positive");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
/* XXX: check for overflow in multiply */
|
||||||
/* Inline PyObject_New */
|
/* Inline PyObject_New */
|
||||||
o = PyObject_MALLOC(sizeof(*b) + size);
|
o = PyObject_MALLOC(sizeof(*b) + size);
|
||||||
if ( o == NULL )
|
if ( o == NULL )
|
||||||
|
@ -189,13 +190,13 @@ static PyObject *
|
||||||
buffer_new(PyTypeObject *type, PyObject *args, PyObject *kw)
|
buffer_new(PyTypeObject *type, PyObject *args, PyObject *kw)
|
||||||
{
|
{
|
||||||
PyObject *ob;
|
PyObject *ob;
|
||||||
int offset = 0;
|
Py_ssize_t offset = 0;
|
||||||
int size = Py_END_OF_BUFFER;
|
Py_ssize_t size = Py_END_OF_BUFFER;
|
||||||
|
|
||||||
if (!_PyArg_NoKeywords("buffer()", kw))
|
if (!_PyArg_NoKeywords("buffer()", kw))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|ii:buffer", &ob, &offset, &size))
|
if (!PyArg_ParseTuple(args, "O|ll:buffer", &ob, &offset, &size))
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyBuffer_FromObject(ob, offset, size);
|
return PyBuffer_FromObject(ob, offset, size);
|
||||||
}
|
}
|
||||||
|
@ -220,7 +221,8 @@ static int
|
||||||
buffer_compare(PyBufferObject *self, PyBufferObject *other)
|
buffer_compare(PyBufferObject *self, PyBufferObject *other)
|
||||||
{
|
{
|
||||||
void *p1, *p2;
|
void *p1, *p2;
|
||||||
int len_self, len_other, min_len, cmp;
|
Py_ssize_t len_self, len_other, min_len;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
if (!get_buf(self, &p1, &len_self))
|
if (!get_buf(self, &p1, &len_self))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -238,17 +240,17 @@ buffer_compare(PyBufferObject *self, PyBufferObject *other)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_repr(PyBufferObject *self)
|
buffer_repr(PyBufferObject *self)
|
||||||
{
|
{
|
||||||
char *status = self->b_readonly ? "read-only" : "read-write";
|
const char *status = self->b_readonly ? "read-only" : "read-write";
|
||||||
|
|
||||||
if ( self->b_base == NULL )
|
if ( self->b_base == NULL )
|
||||||
return PyString_FromFormat("<%s buffer ptr %p, size %d at %p>",
|
return PyString_FromFormat("<%s buffer ptr %p, size %ld at %p>",
|
||||||
status,
|
status,
|
||||||
self->b_ptr,
|
self->b_ptr,
|
||||||
self->b_size,
|
self->b_size,
|
||||||
self);
|
self);
|
||||||
else
|
else
|
||||||
return PyString_FromFormat(
|
return PyString_FromFormat(
|
||||||
"<%s buffer for %p, size %d, offset %d at %p>",
|
"<%s buffer for %p, size %ld, offset %ld at %p>",
|
||||||
status,
|
status,
|
||||||
self->b_base,
|
self->b_base,
|
||||||
self->b_size,
|
self->b_size,
|
||||||
|
@ -260,8 +262,8 @@ static long
|
||||||
buffer_hash(PyBufferObject *self)
|
buffer_hash(PyBufferObject *self)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
register int len;
|
register Py_ssize_t len;
|
||||||
register unsigned char *p;
|
register unsigned char *p;
|
||||||
register long x;
|
register long x;
|
||||||
|
|
||||||
|
@ -300,7 +302,7 @@ static PyObject *
|
||||||
buffer_str(PyBufferObject *self)
|
buffer_str(PyBufferObject *self)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!get_buf(self, &ptr, &size))
|
if (!get_buf(self, &ptr, &size))
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyString_FromStringAndSize(ptr, size);
|
return PyString_FromStringAndSize(ptr, size);
|
||||||
|
@ -308,11 +310,11 @@ buffer_str(PyBufferObject *self)
|
||||||
|
|
||||||
/* Sequence methods */
|
/* Sequence methods */
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
buffer_length(PyBufferObject *self)
|
buffer_length(PyBufferObject *self)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!get_buf(self, &ptr, &size))
|
if (!get_buf(self, &ptr, &size))
|
||||||
return -1;
|
return -1;
|
||||||
return size;
|
return size;
|
||||||
|
@ -325,7 +327,7 @@ buffer_concat(PyBufferObject *self, PyObject *other)
|
||||||
void *ptr1, *ptr2;
|
void *ptr1, *ptr2;
|
||||||
char *p;
|
char *p;
|
||||||
PyObject *ob;
|
PyObject *ob;
|
||||||
int size, count;
|
Py_ssize_t size, count;
|
||||||
|
|
||||||
if ( pb == NULL ||
|
if ( pb == NULL ||
|
||||||
pb->bf_getreadbuffer == NULL ||
|
pb->bf_getreadbuffer == NULL ||
|
||||||
|
@ -369,12 +371,12 @@ buffer_concat(PyBufferObject *self, PyObject *other)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_repeat(PyBufferObject *self, int count)
|
buffer_repeat(PyBufferObject *self, Py_ssize_t count)
|
||||||
{
|
{
|
||||||
PyObject *ob;
|
PyObject *ob;
|
||||||
register char *p;
|
register char *p;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
|
|
||||||
if ( count < 0 )
|
if ( count < 0 )
|
||||||
count = 0;
|
count = 0;
|
||||||
|
@ -398,10 +400,10 @@ buffer_repeat(PyBufferObject *self, int count)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_item(PyBufferObject *self, int idx)
|
buffer_item(PyBufferObject *self, Py_ssize_t idx)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!get_buf(self, &ptr, &size))
|
if (!get_buf(self, &ptr, &size))
|
||||||
return NULL;
|
return NULL;
|
||||||
if ( idx < 0 || idx >= size ) {
|
if ( idx < 0 || idx >= size ) {
|
||||||
|
@ -412,10 +414,10 @@ buffer_item(PyBufferObject *self, int idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
buffer_slice(PyBufferObject *self, int left, int right)
|
buffer_slice(PyBufferObject *self, Py_ssize_t left, Py_ssize_t right)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!get_buf(self, &ptr, &size))
|
if (!get_buf(self, &ptr, &size))
|
||||||
return NULL;
|
return NULL;
|
||||||
if ( left < 0 )
|
if ( left < 0 )
|
||||||
|
@ -431,12 +433,12 @@ buffer_slice(PyBufferObject *self, int left, int right)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
buffer_ass_item(PyBufferObject *self, int idx, PyObject *other)
|
buffer_ass_item(PyBufferObject *self, Py_ssize_t idx, PyObject *other)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb;
|
PyBufferProcs *pb;
|
||||||
void *ptr1, *ptr2;
|
void *ptr1, *ptr2;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
int count;
|
Py_ssize_t count;
|
||||||
|
|
||||||
if ( self->b_readonly ) {
|
if ( self->b_readonly ) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
@ -482,13 +484,13 @@ buffer_ass_item(PyBufferObject *self, int idx, PyObject *other)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
buffer_ass_slice(PyBufferObject *self, int left, int right, PyObject *other)
|
buffer_ass_slice(PyBufferObject *self, Py_ssize_t left, Py_ssize_t right, PyObject *other)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb;
|
PyBufferProcs *pb;
|
||||||
void *ptr1, *ptr2;
|
void *ptr1, *ptr2;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
int slice_len;
|
Py_ssize_t slice_len;
|
||||||
int count;
|
Py_ssize_t count;
|
||||||
|
|
||||||
if ( self->b_readonly ) {
|
if ( self->b_readonly ) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
@ -541,10 +543,10 @@ buffer_ass_slice(PyBufferObject *self, int left, int right, PyObject *other)
|
||||||
|
|
||||||
/* Buffer methods */
|
/* Buffer methods */
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
buffer_getreadbuf(PyBufferObject *self, int idx, void **pp)
|
buffer_getreadbuf(PyBufferObject *self, Py_ssize_t idx, void **pp)
|
||||||
{
|
{
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if ( idx != 0 ) {
|
if ( idx != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
"accessing non-existent buffer segment");
|
"accessing non-existent buffer segment");
|
||||||
|
@ -555,8 +557,8 @@ buffer_getreadbuf(PyBufferObject *self, int idx, void **pp)
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
buffer_getwritebuf(PyBufferObject *self, int idx, void **pp)
|
buffer_getwritebuf(PyBufferObject *self, Py_ssize_t idx, void **pp)
|
||||||
{
|
{
|
||||||
if ( self->b_readonly )
|
if ( self->b_readonly )
|
||||||
{
|
{
|
||||||
|
@ -566,11 +568,11 @@ buffer_getwritebuf(PyBufferObject *self, int idx, void **pp)
|
||||||
return buffer_getreadbuf(self, idx, pp);
|
return buffer_getreadbuf(self, idx, pp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
buffer_getsegcount(PyBufferObject *self, int *lenp)
|
buffer_getsegcount(PyBufferObject *self, Py_ssize_t *lenp)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!get_buf(self, &ptr, &size))
|
if (!get_buf(self, &ptr, &size))
|
||||||
return -1;
|
return -1;
|
||||||
if (lenp)
|
if (lenp)
|
||||||
|
@ -578,11 +580,11 @@ buffer_getsegcount(PyBufferObject *self, int *lenp)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
buffer_getcharbuf(PyBufferObject *self, int idx, const char **pp)
|
buffer_getcharbuf(PyBufferObject *self, Py_ssize_t idx, const char **pp)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if ( idx != 0 ) {
|
if ( idx != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
"accessing non-existent buffer segment");
|
"accessing non-existent buffer segment");
|
||||||
|
@ -596,20 +598,20 @@ buffer_getcharbuf(PyBufferObject *self, int idx, const char **pp)
|
||||||
|
|
||||||
|
|
||||||
static PySequenceMethods buffer_as_sequence = {
|
static PySequenceMethods buffer_as_sequence = {
|
||||||
(inquiry)buffer_length, /*sq_length*/
|
(lenfunc)buffer_length, /*sq_length*/
|
||||||
(binaryfunc)buffer_concat, /*sq_concat*/
|
(binaryfunc)buffer_concat, /*sq_concat*/
|
||||||
(intargfunc)buffer_repeat, /*sq_repeat*/
|
(ssizeargfunc)buffer_repeat, /*sq_repeat*/
|
||||||
(intargfunc)buffer_item, /*sq_item*/
|
(ssizeargfunc)buffer_item, /*sq_item*/
|
||||||
(intintargfunc)buffer_slice, /*sq_slice*/
|
(ssizessizeargfunc)buffer_slice, /*sq_slice*/
|
||||||
(intobjargproc)buffer_ass_item, /*sq_ass_item*/
|
(ssizeobjargproc)buffer_ass_item, /*sq_ass_item*/
|
||||||
(intintobjargproc)buffer_ass_slice, /*sq_ass_slice*/
|
(ssizessizeobjargproc)buffer_ass_slice, /*sq_ass_slice*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyBufferProcs buffer_as_buffer = {
|
static PyBufferProcs buffer_as_buffer = {
|
||||||
(getreadbufferproc)buffer_getreadbuf,
|
(readbufferproc)buffer_getreadbuf,
|
||||||
(getwritebufferproc)buffer_getwritebuf,
|
(writebufferproc)buffer_getwritebuf,
|
||||||
(getsegcountproc)buffer_getsegcount,
|
(segcountproc)buffer_getsegcount,
|
||||||
(getcharbufferproc)buffer_getcharbuf,
|
(charbufferproc)buffer_getcharbuf,
|
||||||
};
|
};
|
||||||
|
|
||||||
PyTypeObject PyBuffer_Type = {
|
PyTypeObject PyBuffer_Type = {
|
||||||
|
|
|
@ -68,7 +68,7 @@ PyClass_New(PyObject *bases, PyObject *dict, PyObject *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *base;
|
PyObject *base;
|
||||||
if (!PyTuple_Check(bases)) {
|
if (!PyTuple_Check(bases)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
@ -185,7 +185,7 @@ class_dealloc(PyClassObject *op)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
class_lookup(PyClassObject *cp, PyObject *name, PyClassObject **pclass)
|
class_lookup(PyClassObject *cp, PyObject *name, PyClassObject **pclass)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *value = PyDict_GetItem(cp->cl_dict, name);
|
PyObject *value = PyDict_GetItem(cp->cl_dict, name);
|
||||||
if (value != NULL) {
|
if (value != NULL) {
|
||||||
*pclass = cp;
|
*pclass = cp;
|
||||||
|
@ -281,7 +281,7 @@ set_dict(PyClassObject *c, PyObject *v)
|
||||||
static char *
|
static char *
|
||||||
set_bases(PyClassObject *c, PyObject *v)
|
set_bases(PyClassObject *c, PyObject *v)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
if (v == NULL || !PyTuple_Check(v))
|
if (v == NULL || !PyTuple_Check(v))
|
||||||
return "__bases__ must be a tuple object";
|
return "__bases__ must be a tuple object";
|
||||||
|
@ -483,7 +483,7 @@ PyTypeObject PyClass_Type = {
|
||||||
int
|
int
|
||||||
PyClass_IsSubclass(PyObject *class, PyObject *base)
|
PyClass_IsSubclass(PyObject *class, PyObject *base)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyClassObject *cp;
|
PyClassObject *cp;
|
||||||
if (class == base)
|
if (class == base)
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -996,12 +996,12 @@ instance_traverse(PyInstanceObject *o, visitproc visit, void *arg)
|
||||||
static PyObject *getitemstr, *setitemstr, *delitemstr, *lenstr;
|
static PyObject *getitemstr, *setitemstr, *delitemstr, *lenstr;
|
||||||
static PyObject *iterstr, *nextstr;
|
static PyObject *iterstr, *nextstr;
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
instance_length(PyInstanceObject *inst)
|
instance_length(PyInstanceObject *inst)
|
||||||
{
|
{
|
||||||
PyObject *func;
|
PyObject *func;
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
int outcome;
|
Py_ssize_t outcome;
|
||||||
|
|
||||||
if (lenstr == NULL)
|
if (lenstr == NULL)
|
||||||
lenstr = PyString_InternFromString("__len__");
|
lenstr = PyString_InternFromString("__len__");
|
||||||
|
@ -1013,9 +1013,13 @@ instance_length(PyInstanceObject *inst)
|
||||||
if (res == NULL)
|
if (res == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (PyInt_Check(res)) {
|
if (PyInt_Check(res)) {
|
||||||
long temp = PyInt_AsLong(res);
|
Py_ssize_t temp = PyInt_AsSsize_t(res);
|
||||||
outcome = (int)temp;
|
if (temp == -1 && PyErr_Occurred()) {
|
||||||
#if SIZEOF_INT < SIZEOF_LONG
|
Py_DECREF(res);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
outcome = (Py_ssize_t)temp;
|
||||||
|
#if SIZEOF_SIZE_T < SIZEOF_LONG
|
||||||
/* Overflow check -- range of PyInt is more than C int */
|
/* Overflow check -- range of PyInt is more than C int */
|
||||||
if (outcome != temp) {
|
if (outcome != temp) {
|
||||||
PyErr_SetString(PyExc_OverflowError,
|
PyErr_SetString(PyExc_OverflowError,
|
||||||
|
@ -1097,13 +1101,13 @@ instance_ass_subscript(PyInstanceObject *inst, PyObject *key, PyObject *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods instance_as_mapping = {
|
static PyMappingMethods instance_as_mapping = {
|
||||||
(inquiry)instance_length, /* mp_length */
|
(lenfunc)instance_length, /* mp_length */
|
||||||
(binaryfunc)instance_subscript, /* mp_subscript */
|
(binaryfunc)instance_subscript, /* mp_subscript */
|
||||||
(objobjargproc)instance_ass_subscript, /* mp_ass_subscript */
|
(objobjargproc)instance_ass_subscript, /* mp_ass_subscript */
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
instance_item(PyInstanceObject *inst, int i)
|
instance_item(PyInstanceObject *inst, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
PyObject *func, *arg, *res;
|
PyObject *func, *arg, *res;
|
||||||
|
|
||||||
|
@ -1112,7 +1116,7 @@ instance_item(PyInstanceObject *inst, int i)
|
||||||
func = instance_getattr(inst, getitemstr);
|
func = instance_getattr(inst, getitemstr);
|
||||||
if (func == NULL)
|
if (func == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
arg = Py_BuildValue("(i)", i);
|
arg = Py_BuildValue("(n)", i);
|
||||||
if (arg == NULL) {
|
if (arg == NULL) {
|
||||||
Py_DECREF(func);
|
Py_DECREF(func);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1124,7 +1128,7 @@ instance_item(PyInstanceObject *inst, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
sliceobj_from_intint(int i, int j)
|
sliceobj_from_intint(Py_ssize_t i, Py_ssize_t j)
|
||||||
{
|
{
|
||||||
PyObject *start, *end, *res;
|
PyObject *start, *end, *res;
|
||||||
|
|
||||||
|
@ -1145,7 +1149,7 @@ sliceobj_from_intint(int i, int j)
|
||||||
|
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
instance_slice(PyInstanceObject *inst, int i, int j)
|
instance_slice(PyInstanceObject *inst, Py_ssize_t i, Py_ssize_t j)
|
||||||
{
|
{
|
||||||
PyObject *func, *arg, *res;
|
PyObject *func, *arg, *res;
|
||||||
static PyObject *getslicestr;
|
static PyObject *getslicestr;
|
||||||
|
@ -1179,7 +1183,7 @@ instance_slice(PyInstanceObject *inst, int i, int j)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
instance_ass_item(PyInstanceObject *inst, int i, PyObject *item)
|
instance_ass_item(PyInstanceObject *inst, Py_ssize_t i, PyObject *item)
|
||||||
{
|
{
|
||||||
PyObject *func, *arg, *res;
|
PyObject *func, *arg, *res;
|
||||||
|
|
||||||
|
@ -1213,7 +1217,7 @@ instance_ass_item(PyInstanceObject *inst, int i, PyObject *item)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
instance_ass_slice(PyInstanceObject *inst, int i, int j, PyObject *value)
|
instance_ass_slice(PyInstanceObject *inst, Py_ssize_t i, Py_ssize_t j, PyObject *value)
|
||||||
{
|
{
|
||||||
PyObject *func, *arg, *res;
|
PyObject *func, *arg, *res;
|
||||||
static PyObject *setslicestr, *delslicestr;
|
static PyObject *setslicestr, *delslicestr;
|
||||||
|
@ -1322,13 +1326,13 @@ instance_contains(PyInstanceObject *inst, PyObject *member)
|
||||||
|
|
||||||
static PySequenceMethods
|
static PySequenceMethods
|
||||||
instance_as_sequence = {
|
instance_as_sequence = {
|
||||||
(inquiry)instance_length, /* sq_length */
|
(lenfunc)instance_length, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
0, /* sq_repeat */
|
0, /* sq_repeat */
|
||||||
(intargfunc)instance_item, /* sq_item */
|
(ssizeargfunc)instance_item, /* sq_item */
|
||||||
(intintargfunc)instance_slice, /* sq_slice */
|
(ssizessizeargfunc)instance_slice, /* sq_slice */
|
||||||
(intobjargproc)instance_ass_item, /* sq_ass_item */
|
(ssizeobjargproc)instance_ass_item, /* sq_ass_item */
|
||||||
(intintobjargproc)instance_ass_slice, /* sq_ass_slice */
|
(ssizessizeobjargproc)instance_ass_slice,/* sq_ass_slice */
|
||||||
(objobjproc)instance_contains, /* sq_contains */
|
(objobjproc)instance_contains, /* sq_contains */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2430,7 +2434,7 @@ instancemethod_call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||||
Py_INCREF(arg);
|
Py_INCREF(arg);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int argcount = PyTuple_Size(arg);
|
Py_ssize_t argcount = PyTuple_Size(arg);
|
||||||
PyObject *newarg = PyTuple_New(argcount + 1);
|
PyObject *newarg = PyTuple_New(argcount + 1);
|
||||||
int i;
|
int i;
|
||||||
if (newarg == NULL)
|
if (newarg == NULL)
|
||||||
|
|
|
@ -28,7 +28,7 @@ all_name_chars(unsigned char *s)
|
||||||
static void
|
static void
|
||||||
intern_strings(PyObject *tuple)
|
intern_strings(PyObject *tuple)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
|
for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
|
||||||
PyObject *v = PyTuple_GET_ITEM(tuple, i);
|
PyObject *v = PyTuple_GET_ITEM(tuple, i);
|
||||||
|
@ -48,7 +48,7 @@ PyCode_New(int argcount, int nlocals, int stacksize, int flags,
|
||||||
PyObject *lnotab)
|
PyObject *lnotab)
|
||||||
{
|
{
|
||||||
PyCodeObject *co;
|
PyCodeObject *co;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
/* Check argument types */
|
/* Check argument types */
|
||||||
if (argcount < 0 || nlocals < 0 ||
|
if (argcount < 0 || nlocals < 0 ||
|
||||||
code == NULL ||
|
code == NULL ||
|
||||||
|
@ -135,7 +135,7 @@ validate_and_copy_tuple(PyObject *tup)
|
||||||
{
|
{
|
||||||
PyObject *newtuple;
|
PyObject *newtuple;
|
||||||
PyObject *item;
|
PyObject *item;
|
||||||
int i, len;
|
Py_ssize_t i, len;
|
||||||
|
|
||||||
len = PyTuple_GET_SIZE(tup);
|
len = PyTuple_GET_SIZE(tup);
|
||||||
newtuple = PyTuple_New(len);
|
newtuple = PyTuple_New(len);
|
||||||
|
|
|
@ -680,7 +680,7 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
char s_buffer[256];
|
char s_buffer[256];
|
||||||
#endif
|
#endif
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (PyString_Check(v)) {
|
if (PyString_Check(v)) {
|
||||||
s = PyString_AS_STRING(v);
|
s = PyString_AS_STRING(v);
|
||||||
|
@ -699,7 +699,7 @@ complex_subtype_from_string(PyTypeObject *type, PyObject *v)
|
||||||
NULL))
|
NULL))
|
||||||
return NULL;
|
return NULL;
|
||||||
s = s_buffer;
|
s = s_buffer;
|
||||||
len = (int)strlen(s);
|
len = strlen(s);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
||||||
|
|
|
@ -209,7 +209,7 @@ getset_set(PyGetSetDescrObject *descr, PyObject *obj, PyObject *value)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
methoddescr_call(PyMethodDescrObject *descr, PyObject *args, PyObject *kwds)
|
methoddescr_call(PyMethodDescrObject *descr, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
int argc;
|
Py_ssize_t argc;
|
||||||
PyObject *self, *func, *result;
|
PyObject *self, *func, *result;
|
||||||
|
|
||||||
/* Make sure that the first argument is acceptable as 'self' */
|
/* Make sure that the first argument is acceptable as 'self' */
|
||||||
|
@ -267,7 +267,7 @@ classmethoddescr_call(PyMethodDescrObject *descr, PyObject *args,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrapperdescr_call(PyWrapperDescrObject *descr, PyObject *args, PyObject *kwds)
|
wrapperdescr_call(PyWrapperDescrObject *descr, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
int argc;
|
Py_ssize_t argc;
|
||||||
PyObject *self, *func, *result;
|
PyObject *self, *func, *result;
|
||||||
|
|
||||||
/* Make sure that the first argument is acceptable as 'self' */
|
/* Make sure that the first argument is acceptable as 'self' */
|
||||||
|
@ -669,7 +669,7 @@ typedef struct {
|
||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
} proxyobject;
|
} proxyobject;
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
proxy_len(proxyobject *pp)
|
proxy_len(proxyobject *pp)
|
||||||
{
|
{
|
||||||
return PyObject_Size(pp->dict);
|
return PyObject_Size(pp->dict);
|
||||||
|
@ -682,7 +682,7 @@ proxy_getitem(proxyobject *pp, PyObject *key)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods proxy_as_mapping = {
|
static PyMappingMethods proxy_as_mapping = {
|
||||||
(inquiry)proxy_len, /* mp_length */
|
(lenfunc)proxy_len, /* mp_length */
|
||||||
(binaryfunc)proxy_getitem, /* mp_subscript */
|
(binaryfunc)proxy_getitem, /* mp_subscript */
|
||||||
0, /* mp_ass_subscript */
|
0, /* mp_ass_subscript */
|
||||||
};
|
};
|
||||||
|
|
|
@ -217,8 +217,8 @@ reported by this function, and outstanding exceptions are maintained.
|
||||||
static dictentry *
|
static dictentry *
|
||||||
lookdict(dictobject *mp, PyObject *key, register long hash)
|
lookdict(dictobject *mp, PyObject *key, register long hash)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register unsigned int perturb;
|
register size_t perturb;
|
||||||
register dictentry *freeslot;
|
register dictentry *freeslot;
|
||||||
register unsigned int mask = mp->ma_mask;
|
register unsigned int mask = mp->ma_mask;
|
||||||
dictentry *ep0 = mp->ma_table;
|
dictentry *ep0 = mp->ma_table;
|
||||||
|
@ -328,8 +328,8 @@ Done:
|
||||||
static dictentry *
|
static dictentry *
|
||||||
lookdict_string(dictobject *mp, PyObject *key, register long hash)
|
lookdict_string(dictobject *mp, PyObject *key, register long hash)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register unsigned int perturb;
|
register size_t perturb;
|
||||||
register dictentry *freeslot;
|
register dictentry *freeslot;
|
||||||
register unsigned int mask = mp->ma_mask;
|
register unsigned int mask = mp->ma_mask;
|
||||||
dictentry *ep0 = mp->ma_table;
|
dictentry *ep0 = mp->ma_table;
|
||||||
|
@ -690,9 +690,10 @@ PyDict_Clear(PyObject *op)
|
||||||
* delete keys), via PyDict_SetItem().
|
* delete keys), via PyDict_SetItem().
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
PyDict_Next(PyObject *op, int *ppos, PyObject **pkey, PyObject **pvalue)
|
PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
|
||||||
{
|
{
|
||||||
register int i, mask;
|
register Py_ssize_t i;
|
||||||
|
register int mask;
|
||||||
register dictentry *ep;
|
register dictentry *ep;
|
||||||
|
|
||||||
if (!PyDict_Check(op))
|
if (!PyDict_Check(op))
|
||||||
|
@ -786,7 +787,7 @@ dict_print(register dictobject *mp, register FILE *fp, register int flags)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
dict_repr(dictobject *mp)
|
dict_repr(dictobject *mp)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *s, *temp, *colon = NULL;
|
PyObject *s, *temp, *colon = NULL;
|
||||||
PyObject *pieces = NULL, *result = NULL;
|
PyObject *pieces = NULL, *result = NULL;
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
|
@ -862,7 +863,7 @@ Done:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
dict_length(dictobject *mp)
|
dict_length(dictobject *mp)
|
||||||
{
|
{
|
||||||
return mp->ma_used;
|
return mp->ma_used;
|
||||||
|
@ -898,7 +899,7 @@ dict_ass_sub(dictobject *mp, PyObject *v, PyObject *w)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods dict_as_mapping = {
|
static PyMappingMethods dict_as_mapping = {
|
||||||
(inquiry)dict_length, /*mp_length*/
|
(lenfunc)dict_length, /*mp_length*/
|
||||||
(binaryfunc)dict_subscript, /*mp_subscript*/
|
(binaryfunc)dict_subscript, /*mp_subscript*/
|
||||||
(objobjargproc)dict_ass_sub, /*mp_ass_subscript*/
|
(objobjargproc)dict_ass_sub, /*mp_ass_subscript*/
|
||||||
};
|
};
|
||||||
|
@ -1109,7 +1110,7 @@ int
|
||||||
PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override)
|
PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override)
|
||||||
{
|
{
|
||||||
PyObject *it; /* iter(seq2) */
|
PyObject *it; /* iter(seq2) */
|
||||||
int i; /* index into seq2 of current element */
|
int i; /* index into seq2 of current element */
|
||||||
PyObject *item; /* seq2[i] */
|
PyObject *item; /* seq2[i] */
|
||||||
PyObject *fast; /* item as a 2-tuple or 2-list */
|
PyObject *fast; /* item as a 2-tuple or 2-list */
|
||||||
|
|
||||||
|
@ -1123,7 +1124,7 @@ PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override)
|
||||||
|
|
||||||
for (i = 0; ; ++i) {
|
for (i = 0; ; ++i) {
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
|
|
||||||
fast = NULL;
|
fast = NULL;
|
||||||
item = PyIter_Next(it);
|
item = PyIter_Next(it);
|
||||||
|
@ -1147,7 +1148,7 @@ PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override)
|
||||||
if (n != 2) {
|
if (n != 2) {
|
||||||
PyErr_Format(PyExc_ValueError,
|
PyErr_Format(PyExc_ValueError,
|
||||||
"dictionary update sequence element #%d "
|
"dictionary update sequence element #%d "
|
||||||
"has length %d; 2 is required",
|
"has length %ld; 2 is required",
|
||||||
i, n);
|
i, n);
|
||||||
goto Fail;
|
goto Fail;
|
||||||
}
|
}
|
||||||
|
@ -1300,7 +1301,7 @@ PyDict_Copy(PyObject *o)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PyDict_Size(PyObject *mp)
|
PyDict_Size(PyObject *mp)
|
||||||
{
|
{
|
||||||
if (mp == NULL || !PyDict_Check(mp)) {
|
if (mp == NULL || !PyDict_Check(mp)) {
|
||||||
|
@ -1708,7 +1709,8 @@ dict_popitem(dictobject *mp)
|
||||||
static int
|
static int
|
||||||
dict_traverse(PyObject *op, visitproc visit, void *arg)
|
dict_traverse(PyObject *op, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
int i = 0, err;
|
Py_ssize_t i = 0;
|
||||||
|
int err;
|
||||||
PyObject *pk;
|
PyObject *pk;
|
||||||
PyObject *pv;
|
PyObject *pv;
|
||||||
|
|
||||||
|
@ -2057,7 +2059,7 @@ dictiter_dealloc(dictiterobject *di)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
dictiter_len(dictiterobject *di)
|
dictiter_len(dictiterobject *di)
|
||||||
{
|
{
|
||||||
int len = 0;
|
long len = 0;
|
||||||
if (di->di_dict != NULL && di->di_used == di->di_dict->ma_used)
|
if (di->di_dict != NULL && di->di_used == di->di_dict->ma_used)
|
||||||
len = di->len;
|
len = di->len;
|
||||||
return PyInt_FromLong(len);
|
return PyInt_FromLong(len);
|
||||||
|
|
|
@ -241,7 +241,7 @@ PyDoc_STRVAR(reversed_doc,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
reversed_len(reversedobject *ro)
|
reversed_len(reversedobject *ro)
|
||||||
{
|
{
|
||||||
int position, seqsize;
|
Py_ssize_t position, seqsize;
|
||||||
|
|
||||||
if (ro->seq == NULL)
|
if (ro->seq == NULL)
|
||||||
return PyInt_FromLong(0);
|
return PyInt_FromLong(0);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* File object implementation */
|
/* File object implementation */
|
||||||
|
|
||||||
|
#define PY_SSIZE_T_CLEAN
|
||||||
#include "Python.h"
|
#include "Python.h"
|
||||||
#include "structmember.h"
|
#include "structmember.h"
|
||||||
|
|
||||||
|
@ -869,8 +870,8 @@ static PyObject *
|
||||||
file_readinto(PyFileObject *f, PyObject *args)
|
file_readinto(PyFileObject *f, PyObject *args)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
int ntodo;
|
Py_ssize_t ntodo;
|
||||||
size_t ndone, nnow;
|
Py_ssize_t ndone, nnow;
|
||||||
|
|
||||||
if (f->f_fp == NULL)
|
if (f->f_fp == NULL)
|
||||||
return err_closed();
|
return err_closed();
|
||||||
|
@ -988,7 +989,8 @@ getline_via_fgets(FILE *fp)
|
||||||
pvend = buf + total_v_size;
|
pvend = buf + total_v_size;
|
||||||
nfree = pvend - pvfree;
|
nfree = pvend - pvfree;
|
||||||
memset(pvfree, '\n', nfree);
|
memset(pvfree, '\n', nfree);
|
||||||
p = fgets(pvfree, nfree, fp);
|
assert(nfree < INT_MAX); /* Should be atmost MAXBUFSIZE */
|
||||||
|
p = fgets(pvfree, (int)nfree, fp);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
|
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
|
@ -1062,7 +1064,8 @@ getline_via_fgets(FILE *fp)
|
||||||
pvend = BUF(v) + total_v_size;
|
pvend = BUF(v) + total_v_size;
|
||||||
nfree = pvend - pvfree;
|
nfree = pvend - pvfree;
|
||||||
memset(pvfree, '\n', nfree);
|
memset(pvfree, '\n', nfree);
|
||||||
p = fgets(pvfree, nfree, fp);
|
assert(nfree < INT_MAX);
|
||||||
|
p = fgets(pvfree, (int)nfree, fp);
|
||||||
Py_END_ALLOW_THREADS
|
Py_END_ALLOW_THREADS
|
||||||
|
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
|
@ -1271,7 +1274,7 @@ PyFile_GetLine(PyObject *f, int n)
|
||||||
|
|
||||||
if (n < 0 && result != NULL && PyString_Check(result)) {
|
if (n < 0 && result != NULL && PyString_Check(result)) {
|
||||||
char *s = PyString_AS_STRING(result);
|
char *s = PyString_AS_STRING(result);
|
||||||
int len = PyString_GET_SIZE(result);
|
Py_ssize_t len = PyString_GET_SIZE(result);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
|
@ -1292,7 +1295,7 @@ PyFile_GetLine(PyObject *f, int n)
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
if (n < 0 && result != NULL && PyUnicode_Check(result)) {
|
if (n < 0 && result != NULL && PyUnicode_Check(result)) {
|
||||||
Py_UNICODE *s = PyUnicode_AS_UNICODE(result);
|
Py_UNICODE *s = PyUnicode_AS_UNICODE(result);
|
||||||
int len = PyUnicode_GET_SIZE(result);
|
Py_ssize_t len = PyUnicode_GET_SIZE(result);
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
|
@ -1468,7 +1471,7 @@ static PyObject *
|
||||||
file_write(PyFileObject *f, PyObject *args)
|
file_write(PyFileObject *f, PyObject *args)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
int n, n2;
|
Py_ssize_t n, n2;
|
||||||
if (f->f_fp == NULL)
|
if (f->f_fp == NULL)
|
||||||
return err_closed();
|
return err_closed();
|
||||||
if (!PyArg_ParseTuple(args, f->f_binary ? "s#" : "t#", &s, &n))
|
if (!PyArg_ParseTuple(args, f->f_binary ? "s#" : "t#", &s, &n))
|
||||||
|
@ -1494,7 +1497,8 @@ file_writelines(PyFileObject *f, PyObject *seq)
|
||||||
PyObject *list, *line;
|
PyObject *list, *line;
|
||||||
PyObject *it; /* iter(seq) */
|
PyObject *it; /* iter(seq) */
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
int i, j, index, len, nwritten, islist;
|
int index, islist;
|
||||||
|
Py_ssize_t i, j, nwritten, len;
|
||||||
|
|
||||||
assert(seq != NULL);
|
assert(seq != NULL);
|
||||||
if (f->f_fp == NULL)
|
if (f->f_fp == NULL)
|
||||||
|
@ -1552,7 +1556,6 @@ file_writelines(PyFileObject *f, PyObject *seq)
|
||||||
PyObject *v = PyList_GET_ITEM(list, i);
|
PyObject *v = PyList_GET_ITEM(list, i);
|
||||||
if (!PyString_Check(v)) {
|
if (!PyString_Check(v)) {
|
||||||
const char *buffer;
|
const char *buffer;
|
||||||
int len;
|
|
||||||
if (((f->f_binary &&
|
if (((f->f_binary &&
|
||||||
PyObject_AsReadBuffer(v,
|
PyObject_AsReadBuffer(v,
|
||||||
(const void**)&buffer,
|
(const void**)&buffer,
|
||||||
|
@ -1789,7 +1792,7 @@ drop_readahead(PyFileObject *f)
|
||||||
static int
|
static int
|
||||||
readahead(PyFileObject *f, int bufsize)
|
readahead(PyFileObject *f, int bufsize)
|
||||||
{
|
{
|
||||||
int chunksize;
|
Py_ssize_t chunksize;
|
||||||
|
|
||||||
if (f->f_buf != NULL) {
|
if (f->f_buf != NULL) {
|
||||||
if( (f->f_bufend - f->f_bufptr) >= 1)
|
if( (f->f_bufend - f->f_bufptr) >= 1)
|
||||||
|
@ -1829,7 +1832,7 @@ readahead_get_line_skip(PyFileObject *f, int skip, int bufsize)
|
||||||
PyStringObject* s;
|
PyStringObject* s;
|
||||||
char *bufptr;
|
char *bufptr;
|
||||||
char *buf;
|
char *buf;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (f->f_buf == NULL)
|
if (f->f_buf == NULL)
|
||||||
if (readahead(f, bufsize) < 0)
|
if (readahead(f, bufsize) < 0)
|
||||||
|
@ -1855,8 +1858,9 @@ readahead_get_line_skip(PyFileObject *f, int skip, int bufsize)
|
||||||
bufptr = f->f_bufptr;
|
bufptr = f->f_bufptr;
|
||||||
buf = f->f_buf;
|
buf = f->f_buf;
|
||||||
f->f_buf = NULL; /* Force new readahead buffer */
|
f->f_buf = NULL; /* Force new readahead buffer */
|
||||||
|
assert(skip+len < INT_MAX);
|
||||||
s = readahead_get_line_skip(
|
s = readahead_get_line_skip(
|
||||||
f, skip+len, bufsize + (bufsize>>2) );
|
f, (int)(skip+len), bufsize + (bufsize>>2) );
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
PyMem_Free(buf);
|
PyMem_Free(buf);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2061,7 +2065,7 @@ PyTypeObject PyFile_Type = {
|
||||||
int
|
int
|
||||||
PyFile_SoftSpace(PyObject *f, int newflag)
|
PyFile_SoftSpace(PyObject *f, int newflag)
|
||||||
{
|
{
|
||||||
int oldflag = 0;
|
long oldflag = 0;
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
/* Do nothing */
|
/* Do nothing */
|
||||||
}
|
}
|
||||||
|
@ -2077,6 +2081,7 @@ PyFile_SoftSpace(PyObject *f, int newflag)
|
||||||
else {
|
else {
|
||||||
if (PyInt_Check(v))
|
if (PyInt_Check(v))
|
||||||
oldflag = PyInt_AsLong(v);
|
oldflag = PyInt_AsLong(v);
|
||||||
|
assert(oldflag < INT_MAX);
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
}
|
}
|
||||||
v = PyInt_FromLong((long)newflag);
|
v = PyInt_FromLong((long)newflag);
|
||||||
|
@ -2088,7 +2093,7 @@ PyFile_SoftSpace(PyObject *f, int newflag)
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldflag;
|
return (int)oldflag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Interfaces to write objects/strings to file-like objects */
|
/* Interfaces to write objects/strings to file-like objects */
|
||||||
|
|
|
@ -87,7 +87,7 @@ PyFloat_FromString(PyObject *v, char **pend)
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
char s_buffer[256]; /* for objects convertible to a char buffer */
|
char s_buffer[256]; /* for objects convertible to a char buffer */
|
||||||
#endif
|
#endif
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (pend)
|
if (pend)
|
||||||
*pend = NULL;
|
*pend = NULL;
|
||||||
|
@ -108,7 +108,7 @@ PyFloat_FromString(PyObject *v, char **pend)
|
||||||
NULL))
|
NULL))
|
||||||
return NULL;
|
return NULL;
|
||||||
s = s_buffer;
|
s = s_buffer;
|
||||||
len = (int)strlen(s);
|
len = strlen(s);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
else if (PyObject_AsCharBuffer(v, &s, &len)) {
|
||||||
|
|
|
@ -71,9 +71,9 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno)
|
||||||
int new_lasti = 0; /* The new value of f_lasti */
|
int new_lasti = 0; /* The new value of f_lasti */
|
||||||
int new_iblock = 0; /* The new value of f_iblock */
|
int new_iblock = 0; /* The new value of f_iblock */
|
||||||
char *code = NULL; /* The bytecode for the frame... */
|
char *code = NULL; /* The bytecode for the frame... */
|
||||||
int code_len = 0; /* ...and its length */
|
Py_ssize_t code_len = 0; /* ...and its length */
|
||||||
char *lnotab = NULL; /* Iterating over co_lnotab */
|
char *lnotab = NULL; /* Iterating over co_lnotab */
|
||||||
int lnotab_len = 0; /* (ditto) */
|
Py_ssize_t lnotab_len = 0; /* (ditto) */
|
||||||
int offset = 0; /* (ditto) */
|
int offset = 0; /* (ditto) */
|
||||||
int line = 0; /* (ditto) */
|
int line = 0; /* (ditto) */
|
||||||
int addr = 0; /* (ditto) */
|
int addr = 0; /* (ditto) */
|
||||||
|
@ -540,7 +540,7 @@ PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals,
|
||||||
PyFrameObject *back = tstate->frame;
|
PyFrameObject *back = tstate->frame;
|
||||||
PyFrameObject *f;
|
PyFrameObject *f;
|
||||||
PyObject *builtins;
|
PyObject *builtins;
|
||||||
int extras, ncells, nfrees, i;
|
Py_ssize_t extras, ncells, nfrees, i;
|
||||||
|
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
if (code == NULL || globals == NULL || !PyDict_Check(globals) ||
|
if (code == NULL || globals == NULL || !PyDict_Check(globals) ||
|
||||||
|
@ -678,10 +678,10 @@ PyFrame_BlockPop(PyFrameObject *f)
|
||||||
/* Convert between "fast" version of locals and dictionary version */
|
/* Convert between "fast" version of locals and dictionary version */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
map_to_dict(PyObject *map, int nmap, PyObject *dict, PyObject **values,
|
map_to_dict(PyObject *map, Py_ssize_t nmap, PyObject *dict, PyObject **values,
|
||||||
int deref)
|
Py_ssize_t deref)
|
||||||
{
|
{
|
||||||
int j;
|
Py_ssize_t j;
|
||||||
for (j = nmap; --j >= 0; ) {
|
for (j = nmap; --j >= 0; ) {
|
||||||
PyObject *key = PyTuple_GET_ITEM(map, j);
|
PyObject *key = PyTuple_GET_ITEM(map, j);
|
||||||
PyObject *value = values[j];
|
PyObject *value = values[j];
|
||||||
|
@ -699,10 +699,10 @@ map_to_dict(PyObject *map, int nmap, PyObject *dict, PyObject **values,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dict_to_map(PyObject *map, int nmap, PyObject *dict, PyObject **values,
|
dict_to_map(PyObject *map, Py_ssize_t nmap, PyObject *dict, PyObject **values,
|
||||||
int deref, int clear)
|
Py_ssize_t deref, int clear)
|
||||||
{
|
{
|
||||||
int j;
|
Py_ssize_t j;
|
||||||
for (j = nmap; --j >= 0; ) {
|
for (j = nmap; --j >= 0; ) {
|
||||||
PyObject *key = PyTuple_GET_ITEM(map, j);
|
PyObject *key = PyTuple_GET_ITEM(map, j);
|
||||||
PyObject *value = PyObject_GetItem(dict, key);
|
PyObject *value = PyObject_GetItem(dict, key);
|
||||||
|
@ -733,7 +733,7 @@ PyFrame_FastToLocals(PyFrameObject *f)
|
||||||
PyObject *locals, *map;
|
PyObject *locals, *map;
|
||||||
PyObject **fast;
|
PyObject **fast;
|
||||||
PyObject *error_type, *error_value, *error_traceback;
|
PyObject *error_type, *error_value, *error_traceback;
|
||||||
int j;
|
Py_ssize_t j;
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
return;
|
return;
|
||||||
locals = f->f_locals;
|
locals = f->f_locals;
|
||||||
|
@ -776,7 +776,7 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear)
|
||||||
PyObject *locals, *map;
|
PyObject *locals, *map;
|
||||||
PyObject **fast;
|
PyObject **fast;
|
||||||
PyObject *error_type, *error_value, *error_traceback;
|
PyObject *error_type, *error_value, *error_traceback;
|
||||||
int j;
|
Py_ssize_t j;
|
||||||
if (f == NULL)
|
if (f == NULL)
|
||||||
return;
|
return;
|
||||||
locals = f->f_locals;
|
locals = f->f_locals;
|
||||||
|
|
|
@ -232,7 +232,7 @@ static int
|
||||||
func_set_code(PyFunctionObject *op, PyObject *value)
|
func_set_code(PyFunctionObject *op, PyObject *value)
|
||||||
{
|
{
|
||||||
PyObject *tmp;
|
PyObject *tmp;
|
||||||
int nfree, nclosure;
|
Py_ssize_t nfree, nclosure;
|
||||||
|
|
||||||
if (restricted())
|
if (restricted())
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -248,8 +248,8 @@ func_set_code(PyFunctionObject *op, PyObject *value)
|
||||||
PyTuple_GET_SIZE(op->func_closure));
|
PyTuple_GET_SIZE(op->func_closure));
|
||||||
if (nclosure != nfree) {
|
if (nclosure != nfree) {
|
||||||
PyErr_Format(PyExc_ValueError,
|
PyErr_Format(PyExc_ValueError,
|
||||||
"%s() requires a code object with %d free vars,"
|
"%s() requires a code object with %ld free vars,"
|
||||||
" not %d",
|
" not %ld",
|
||||||
PyString_AsString(op->func_name),
|
PyString_AsString(op->func_name),
|
||||||
nclosure, nfree);
|
nclosure, nfree);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -363,7 +363,7 @@ func_new(PyTypeObject* type, PyObject* args, PyObject* kw)
|
||||||
PyObject *defaults = Py_None;
|
PyObject *defaults = Py_None;
|
||||||
PyObject *closure = Py_None;
|
PyObject *closure = Py_None;
|
||||||
PyFunctionObject *newfunc;
|
PyFunctionObject *newfunc;
|
||||||
int nfree, nclosure;
|
Py_ssize_t nfree, nclosure;
|
||||||
static const char *kwlist[] = {"code", "globals", "name",
|
static const char *kwlist[] = {"code", "globals", "name",
|
||||||
"argdefs", "closure", 0};
|
"argdefs", "closure", 0};
|
||||||
|
|
||||||
|
@ -401,11 +401,11 @@ func_new(PyTypeObject* type, PyObject* args, PyObject* kw)
|
||||||
nclosure = closure == Py_None ? 0 : PyTuple_GET_SIZE(closure);
|
nclosure = closure == Py_None ? 0 : PyTuple_GET_SIZE(closure);
|
||||||
if (nfree != nclosure)
|
if (nfree != nclosure)
|
||||||
return PyErr_Format(PyExc_ValueError,
|
return PyErr_Format(PyExc_ValueError,
|
||||||
"%s requires closure of length %d, not %d",
|
"%s requires closure of length %ld, not %ld",
|
||||||
PyString_AS_STRING(code->co_name),
|
PyString_AS_STRING(code->co_name),
|
||||||
nfree, nclosure);
|
nfree, nclosure);
|
||||||
if (nclosure) {
|
if (nclosure) {
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
for (i = 0; i < nclosure; i++) {
|
for (i = 0; i < nclosure; i++) {
|
||||||
PyObject *o = PyTuple_GET_ITEM(closure, i);
|
PyObject *o = PyTuple_GET_ITEM(closure, i);
|
||||||
if (!PyCell_Check(o)) {
|
if (!PyCell_Check(o)) {
|
||||||
|
@ -516,7 +516,7 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
PyObject *argdefs;
|
PyObject *argdefs;
|
||||||
PyObject **d, **k;
|
PyObject **d, **k;
|
||||||
int nk, nd;
|
Py_ssize_t nk, nd;
|
||||||
|
|
||||||
argdefs = PyFunction_GET_DEFAULTS(func);
|
argdefs = PyFunction_GET_DEFAULTS(func);
|
||||||
if (argdefs != NULL && PyTuple_Check(argdefs)) {
|
if (argdefs != NULL && PyTuple_Check(argdefs)) {
|
||||||
|
@ -529,7 +529,7 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kw != NULL && PyDict_Check(kw)) {
|
if (kw != NULL && PyDict_Check(kw)) {
|
||||||
int pos, i;
|
Py_ssize_t pos, i;
|
||||||
nk = PyDict_Size(kw);
|
nk = PyDict_Size(kw);
|
||||||
k = PyMem_NEW(PyObject *, 2*nk);
|
k = PyMem_NEW(PyObject *, 2*nk);
|
||||||
if (k == NULL) {
|
if (k == NULL) {
|
||||||
|
|
|
@ -108,6 +108,22 @@ PyInt_FromLong(long ival)
|
||||||
return (PyObject *) v;
|
return (PyObject *) v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
PyInt_FromSize_t(size_t ival)
|
||||||
|
{
|
||||||
|
if (ival <= LONG_MAX)
|
||||||
|
return PyInt_FromLong((long)ival);
|
||||||
|
return _PyLong_FromSize_t(ival);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
PyInt_FromSsize_t(Py_ssize_t ival)
|
||||||
|
{
|
||||||
|
if (ival >= LONG_MIN && ival <= LONG_MAX)
|
||||||
|
return PyInt_FromLong((long)ival);
|
||||||
|
return _PyLong_FromSsize_t(ival);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
int_dealloc(PyIntObject *v)
|
int_dealloc(PyIntObject *v)
|
||||||
{
|
{
|
||||||
|
@ -169,6 +185,59 @@ PyInt_AsLong(register PyObject *op)
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Py_ssize_t
|
||||||
|
PyInt_AsSsize_t(register PyObject *op)
|
||||||
|
{
|
||||||
|
PyNumberMethods *nb;
|
||||||
|
PyIntObject *io;
|
||||||
|
Py_ssize_t val;
|
||||||
|
if (op && !PyInt_CheckExact(op) && PyLong_Check(op))
|
||||||
|
return _PyLong_AsSsize_t(op);
|
||||||
|
#if SIZEOF_SIZE_T==SIZEOF_LONG
|
||||||
|
return PyInt_AsLong(op);
|
||||||
|
#else
|
||||||
|
|
||||||
|
if (op && PyInt_Check(op))
|
||||||
|
return PyInt_AS_LONG((PyIntObject*) op);
|
||||||
|
|
||||||
|
if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
|
||||||
|
(nb->nb_int == NULL && nb->nb_long == 0)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError, "an integer is required");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nb->nb_long != 0) {
|
||||||
|
io = (PyIntObject*) (*nb->nb_long) (op);
|
||||||
|
} else {
|
||||||
|
io = (PyIntObject*) (*nb->nb_int) (op);
|
||||||
|
}
|
||||||
|
if (io == NULL)
|
||||||
|
return -1;
|
||||||
|
if (!PyInt_Check(io)) {
|
||||||
|
if (PyLong_Check(io)) {
|
||||||
|
/* got a long? => retry int conversion */
|
||||||
|
val = _PyLong_AsSsize_t((PyObject *)io);
|
||||||
|
Py_DECREF(io);
|
||||||
|
if ((val == -1) && PyErr_Occurred())
|
||||||
|
return -1;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Py_DECREF(io);
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"nb_int should return int object");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val = PyInt_AS_LONG(io);
|
||||||
|
Py_DECREF(io);
|
||||||
|
|
||||||
|
return val;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
PyInt_AsUnsignedLongMask(register PyObject *op)
|
PyInt_AsUnsignedLongMask(register PyObject *op)
|
||||||
{
|
{
|
||||||
|
@ -302,7 +371,7 @@ PyInt_FromString(char *s, char **pend, int base)
|
||||||
|
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
PyObject *
|
PyObject *
|
||||||
PyInt_FromUnicode(Py_UNICODE *s, int length, int base)
|
PyInt_FromUnicode(Py_UNICODE *s, Py_ssize_t length, int base)
|
||||||
{
|
{
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
char *buffer = PyMem_MALLOC(length+1);
|
char *buffer = PyMem_MALLOC(length+1);
|
||||||
|
|
|
@ -74,7 +74,7 @@ iter_iternext(PyObject *iterator)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
iter_len(seqiterobject *it)
|
iter_len(seqiterobject *it)
|
||||||
{
|
{
|
||||||
int seqsize, len;
|
Py_ssize_t seqsize, len;
|
||||||
|
|
||||||
if (it->it_seq) {
|
if (it->it_seq) {
|
||||||
seqsize = PySequence_Size(it->it_seq);
|
seqsize = PySequence_Size(it->it_seq);
|
||||||
|
|
|
@ -22,11 +22,11 @@
|
||||||
* than ob_size on entry.
|
* than ob_size on entry.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
list_resize(PyListObject *self, int newsize)
|
list_resize(PyListObject *self, Py_ssize_t newsize)
|
||||||
{
|
{
|
||||||
PyObject **items;
|
PyObject **items;
|
||||||
size_t new_allocated;
|
size_t new_allocated;
|
||||||
int allocated = self->allocated;
|
Py_ssize_t allocated = self->allocated;
|
||||||
|
|
||||||
/* Bypass realloc() when a previous overallocation is large enough
|
/* Bypass realloc() when a previous overallocation is large enough
|
||||||
to accommodate the newsize. If the newsize falls lower than half
|
to accommodate the newsize. If the newsize falls lower than half
|
||||||
|
@ -82,7 +82,7 @@ PyList_Fini(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyList_New(int size)
|
PyList_New(Py_ssize_t size)
|
||||||
{
|
{
|
||||||
PyListObject *op;
|
PyListObject *op;
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
|
@ -118,7 +118,7 @@ PyList_New(int size)
|
||||||
return (PyObject *) op;
|
return (PyObject *) op;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PyList_Size(PyObject *op)
|
PyList_Size(PyObject *op)
|
||||||
{
|
{
|
||||||
if (!PyList_Check(op)) {
|
if (!PyList_Check(op)) {
|
||||||
|
@ -132,7 +132,7 @@ PyList_Size(PyObject *op)
|
||||||
static PyObject *indexerr = NULL;
|
static PyObject *indexerr = NULL;
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyList_GetItem(PyObject *op, int i)
|
PyList_GetItem(PyObject *op, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (!PyList_Check(op)) {
|
if (!PyList_Check(op)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -149,7 +149,7 @@ PyList_GetItem(PyObject *op, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyList_SetItem(register PyObject *op, register int i,
|
PyList_SetItem(register PyObject *op, register Py_ssize_t i,
|
||||||
register PyObject *newitem)
|
register PyObject *newitem)
|
||||||
{
|
{
|
||||||
register PyObject *olditem;
|
register PyObject *olditem;
|
||||||
|
@ -173,9 +173,9 @@ PyList_SetItem(register PyObject *op, register int i,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ins1(PyListObject *self, int where, PyObject *v)
|
ins1(PyListObject *self, Py_ssize_t where, PyObject *v)
|
||||||
{
|
{
|
||||||
int i, n = self->ob_size;
|
Py_ssize_t i, n = self->ob_size;
|
||||||
PyObject **items;
|
PyObject **items;
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -206,7 +206,7 @@ ins1(PyListObject *self, int where, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyList_Insert(PyObject *op, int where, PyObject *newitem)
|
PyList_Insert(PyObject *op, Py_ssize_t where, PyObject *newitem)
|
||||||
{
|
{
|
||||||
if (!PyList_Check(op)) {
|
if (!PyList_Check(op)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -218,7 +218,7 @@ PyList_Insert(PyObject *op, int where, PyObject *newitem)
|
||||||
static int
|
static int
|
||||||
app1(PyListObject *self, PyObject *v)
|
app1(PyListObject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
int n = PyList_GET_SIZE(self);
|
Py_ssize_t n = PyList_GET_SIZE(self);
|
||||||
|
|
||||||
assert (v != NULL);
|
assert (v != NULL);
|
||||||
if (n == INT_MAX) {
|
if (n == INT_MAX) {
|
||||||
|
@ -249,7 +249,7 @@ PyList_Append(PyObject *op, PyObject *newitem)
|
||||||
static void
|
static void
|
||||||
list_dealloc(PyListObject *op)
|
list_dealloc(PyListObject *op)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject_GC_UnTrack(op);
|
PyObject_GC_UnTrack(op);
|
||||||
Py_TRASHCAN_SAFE_BEGIN(op)
|
Py_TRASHCAN_SAFE_BEGIN(op)
|
||||||
if (op->ob_item != NULL) {
|
if (op->ob_item != NULL) {
|
||||||
|
@ -273,12 +273,13 @@ list_dealloc(PyListObject *op)
|
||||||
static int
|
static int
|
||||||
list_print(PyListObject *op, FILE *fp, int flags)
|
list_print(PyListObject *op, FILE *fp, int flags)
|
||||||
{
|
{
|
||||||
int i;
|
int rc;
|
||||||
|
Py_ssize_t i;
|
||||||
|
|
||||||
i = Py_ReprEnter((PyObject*)op);
|
rc = Py_ReprEnter((PyObject*)op);
|
||||||
if (i != 0) {
|
if (rc != 0) {
|
||||||
if (i < 0)
|
if (rc < 0)
|
||||||
return i;
|
return rc;
|
||||||
fprintf(fp, "[...]");
|
fprintf(fp, "[...]");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -299,7 +300,7 @@ list_print(PyListObject *op, FILE *fp, int flags)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_repr(PyListObject *v)
|
list_repr(PyListObject *v)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *s, *temp;
|
PyObject *s, *temp;
|
||||||
PyObject *pieces = NULL, *result = NULL;
|
PyObject *pieces = NULL, *result = NULL;
|
||||||
|
|
||||||
|
@ -363,7 +364,7 @@ Done:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
list_length(PyListObject *a)
|
list_length(PyListObject *a)
|
||||||
{
|
{
|
||||||
return a->ob_size;
|
return a->ob_size;
|
||||||
|
@ -372,7 +373,8 @@ list_length(PyListObject *a)
|
||||||
static int
|
static int
|
||||||
list_contains(PyListObject *a, PyObject *el)
|
list_contains(PyListObject *a, PyObject *el)
|
||||||
{
|
{
|
||||||
int i, cmp;
|
Py_ssize_t i;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
for (i = 0, cmp = 0 ; cmp == 0 && i < a->ob_size; ++i)
|
for (i = 0, cmp = 0 ; cmp == 0 && i < a->ob_size; ++i)
|
||||||
cmp = PyObject_RichCompareBool(el, PyList_GET_ITEM(a, i),
|
cmp = PyObject_RichCompareBool(el, PyList_GET_ITEM(a, i),
|
||||||
|
@ -381,7 +383,7 @@ list_contains(PyListObject *a, PyObject *el)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_item(PyListObject *a, int i)
|
list_item(PyListObject *a, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (i < 0 || i >= a->ob_size) {
|
if (i < 0 || i >= a->ob_size) {
|
||||||
if (indexerr == NULL)
|
if (indexerr == NULL)
|
||||||
|
@ -395,11 +397,11 @@ list_item(PyListObject *a, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_slice(PyListObject *a, int ilow, int ihigh)
|
list_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
|
||||||
{
|
{
|
||||||
PyListObject *np;
|
PyListObject *np;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
int i, len;
|
Py_ssize_t i, len;
|
||||||
if (ilow < 0)
|
if (ilow < 0)
|
||||||
ilow = 0;
|
ilow = 0;
|
||||||
else if (ilow > a->ob_size)
|
else if (ilow > a->ob_size)
|
||||||
|
@ -424,7 +426,7 @@ list_slice(PyListObject *a, int ilow, int ihigh)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyList_GetSlice(PyObject *a, int ilow, int ihigh)
|
PyList_GetSlice(PyObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
|
||||||
{
|
{
|
||||||
if (!PyList_Check(a)) {
|
if (!PyList_Check(a)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -436,8 +438,8 @@ PyList_GetSlice(PyObject *a, int ilow, int ihigh)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_concat(PyListObject *a, PyObject *bb)
|
list_concat(PyListObject *a, PyObject *bb)
|
||||||
{
|
{
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
PyListObject *np;
|
PyListObject *np;
|
||||||
if (!PyList_Check(bb)) {
|
if (!PyList_Check(bb)) {
|
||||||
|
@ -473,10 +475,10 @@ list_concat(PyListObject *a, PyObject *bb)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_repeat(PyListObject *a, int n)
|
list_repeat(PyListObject *a, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
PyListObject *np;
|
PyListObject *np;
|
||||||
PyObject **p, **items;
|
PyObject **p, **items;
|
||||||
PyObject *elem;
|
PyObject *elem;
|
||||||
|
@ -515,7 +517,7 @@ list_repeat(PyListObject *a, int n)
|
||||||
static int
|
static int
|
||||||
list_clear(PyListObject *a)
|
list_clear(PyListObject *a)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject **item = a->ob_item;
|
PyObject **item = a->ob_item;
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
/* Because XDECREF can recursively invoke operations on
|
/* Because XDECREF can recursively invoke operations on
|
||||||
|
@ -542,7 +544,7 @@ list_clear(PyListObject *a)
|
||||||
* guaranteed the call cannot fail.
|
* guaranteed the call cannot fail.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v)
|
list_ass_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
|
||||||
{
|
{
|
||||||
/* Because [X]DECREF can recursively invoke list operations on
|
/* Because [X]DECREF can recursively invoke list operations on
|
||||||
this list, we must postpone all [X]DECREF activity until
|
this list, we must postpone all [X]DECREF activity until
|
||||||
|
@ -555,10 +557,10 @@ list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v)
|
||||||
PyObject **item;
|
PyObject **item;
|
||||||
PyObject **vitem = NULL;
|
PyObject **vitem = NULL;
|
||||||
PyObject *v_as_SF = NULL; /* PySequence_Fast(v) */
|
PyObject *v_as_SF = NULL; /* PySequence_Fast(v) */
|
||||||
int n; /* # of elements in replacement list */
|
Py_ssize_t n; /* # of elements in replacement list */
|
||||||
int norig; /* # of elements in list getting replaced */
|
Py_ssize_t norig; /* # of elements in list getting replaced */
|
||||||
int d; /* Change in size */
|
Py_ssize_t d; /* Change in size */
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
size_t s;
|
size_t s;
|
||||||
int result = -1; /* guilty until proved innocent */
|
int result = -1; /* guilty until proved innocent */
|
||||||
#define b ((PyListObject *)v)
|
#define b ((PyListObject *)v)
|
||||||
|
@ -640,7 +642,7 @@ list_ass_slice(PyListObject *a, int ilow, int ihigh, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyList_SetSlice(PyObject *a, int ilow, int ihigh, PyObject *v)
|
PyList_SetSlice(PyObject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v)
|
||||||
{
|
{
|
||||||
if (!PyList_Check(a)) {
|
if (!PyList_Check(a)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -650,10 +652,10 @@ PyList_SetSlice(PyObject *a, int ilow, int ihigh, PyObject *v)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_inplace_repeat(PyListObject *self, int n)
|
list_inplace_repeat(PyListObject *self, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
PyObject **items;
|
PyObject **items;
|
||||||
int size, i, j, p;
|
Py_ssize_t size, i, j, p;
|
||||||
|
|
||||||
|
|
||||||
size = PyList_GET_SIZE(self);
|
size = PyList_GET_SIZE(self);
|
||||||
|
@ -685,7 +687,7 @@ list_inplace_repeat(PyListObject *self, int n)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
list_ass_item(PyListObject *a, int i, PyObject *v)
|
list_ass_item(PyListObject *a, Py_ssize_t i, PyObject *v)
|
||||||
{
|
{
|
||||||
PyObject *old_value;
|
PyObject *old_value;
|
||||||
if (i < 0 || i >= a->ob_size) {
|
if (i < 0 || i >= a->ob_size) {
|
||||||
|
@ -705,9 +707,9 @@ list_ass_item(PyListObject *a, int i, PyObject *v)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
listinsert(PyListObject *self, PyObject *args)
|
listinsert(PyListObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
if (!PyArg_ParseTuple(args, "iO:insert", &i, &v))
|
if (!PyArg_ParseTuple(args, "nO:insert", &i, &v))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (ins1(self, i, v) == 0)
|
if (ins1(self, i, v) == 0)
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
@ -726,10 +728,10 @@ static PyObject *
|
||||||
listextend(PyListObject *self, PyObject *b)
|
listextend(PyListObject *self, PyObject *b)
|
||||||
{
|
{
|
||||||
PyObject *it; /* iter(v) */
|
PyObject *it; /* iter(v) */
|
||||||
int m; /* size of self */
|
Py_ssize_t m; /* size of self */
|
||||||
int n; /* guess for size of b */
|
Py_ssize_t n; /* guess for size of b */
|
||||||
int mn; /* m + n */
|
Py_ssize_t mn; /* m + n */
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *(*iternext)(PyObject *);
|
PyObject *(*iternext)(PyObject *);
|
||||||
|
|
||||||
/* Special cases:
|
/* Special cases:
|
||||||
|
@ -858,7 +860,7 @@ list_inplace_concat(PyListObject *self, PyObject *other)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
listpop(PyListObject *self, PyObject *args)
|
listpop(PyListObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int i = -1;
|
Py_ssize_t i = -1;
|
||||||
PyObject *v, *arg = NULL;
|
PyObject *v, *arg = NULL;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
|
@ -866,8 +868,8 @@ listpop(PyListObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (arg != NULL) {
|
if (arg != NULL) {
|
||||||
if (PyInt_Check(arg))
|
if (PyInt_Check(arg))
|
||||||
i = (int)(PyInt_AS_LONG((PyIntObject*) arg));
|
i = PyInt_AS_LONG((PyIntObject*) arg);
|
||||||
else if (!PyArg_ParseTuple(args, "|i:pop", &i))
|
else if (!PyArg_ParseTuple(args, "|n:pop", &i))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (self->ob_size == 0) {
|
if (self->ob_size == 0) {
|
||||||
|
@ -929,7 +931,7 @@ islt(PyObject *x, PyObject *y, PyObject *compare)
|
||||||
{
|
{
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
PyObject *args;
|
PyObject *args;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
assert(compare != NULL);
|
assert(compare != NULL);
|
||||||
/* Call the user's comparison function and translate the 3-way
|
/* Call the user's comparison function and translate the 3-way
|
||||||
|
@ -988,7 +990,7 @@ static int
|
||||||
binarysort(PyObject **lo, PyObject **hi, PyObject **start, PyObject *compare)
|
binarysort(PyObject **lo, PyObject **hi, PyObject **start, PyObject *compare)
|
||||||
/* compare -- comparison function object, or NULL for default */
|
/* compare -- comparison function object, or NULL for default */
|
||||||
{
|
{
|
||||||
register int k;
|
register Py_ssize_t k;
|
||||||
register PyObject **l, **p, **r;
|
register PyObject **l, **p, **r;
|
||||||
register PyObject *pivot;
|
register PyObject *pivot;
|
||||||
|
|
||||||
|
@ -1050,11 +1052,11 @@ elements to get out of order).
|
||||||
|
|
||||||
Returns -1 in case of error.
|
Returns -1 in case of error.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
count_run(PyObject **lo, PyObject **hi, PyObject *compare, int *descending)
|
count_run(PyObject **lo, PyObject **hi, PyObject *compare, int *descending)
|
||||||
{
|
{
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
|
|
||||||
assert(lo < hi);
|
assert(lo < hi);
|
||||||
*descending = 0;
|
*descending = 0;
|
||||||
|
@ -1105,12 +1107,12 @@ key, and the last n-k should follow key.
|
||||||
|
|
||||||
Returns -1 on error. See listsort.txt for info on the method.
|
Returns -1 on error. See listsort.txt for info on the method.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
gallop_left(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
gallop_left(PyObject *key, PyObject **a, Py_ssize_t n, Py_ssize_t hint, PyObject *compare)
|
||||||
{
|
{
|
||||||
int ofs;
|
Py_ssize_t ofs;
|
||||||
int lastofs;
|
Py_ssize_t lastofs;
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
|
|
||||||
assert(key && a && n > 0 && hint >= 0 && hint < n);
|
assert(key && a && n > 0 && hint >= 0 && hint < n);
|
||||||
|
|
||||||
|
@ -1121,7 +1123,7 @@ gallop_left(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
||||||
/* a[hint] < key -- gallop right, until
|
/* a[hint] < key -- gallop right, until
|
||||||
* a[hint + lastofs] < key <= a[hint + ofs]
|
* a[hint + lastofs] < key <= a[hint + ofs]
|
||||||
*/
|
*/
|
||||||
const int maxofs = n - hint; /* &a[n-1] is highest */
|
const Py_ssize_t maxofs = n - hint; /* &a[n-1] is highest */
|
||||||
while (ofs < maxofs) {
|
while (ofs < maxofs) {
|
||||||
IFLT(a[ofs], key) {
|
IFLT(a[ofs], key) {
|
||||||
lastofs = ofs;
|
lastofs = ofs;
|
||||||
|
@ -1142,7 +1144,7 @@ gallop_left(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
||||||
/* key <= a[hint] -- gallop left, until
|
/* key <= a[hint] -- gallop left, until
|
||||||
* a[hint - ofs] < key <= a[hint - lastofs]
|
* a[hint - ofs] < key <= a[hint - lastofs]
|
||||||
*/
|
*/
|
||||||
const int maxofs = hint + 1; /* &a[0] is lowest */
|
const Py_ssize_t maxofs = hint + 1; /* &a[0] is lowest */
|
||||||
while (ofs < maxofs) {
|
while (ofs < maxofs) {
|
||||||
IFLT(*(a-ofs), key)
|
IFLT(*(a-ofs), key)
|
||||||
break;
|
break;
|
||||||
|
@ -1168,7 +1170,7 @@ gallop_left(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
||||||
*/
|
*/
|
||||||
++lastofs;
|
++lastofs;
|
||||||
while (lastofs < ofs) {
|
while (lastofs < ofs) {
|
||||||
int m = lastofs + ((ofs - lastofs) >> 1);
|
Py_ssize_t m = lastofs + ((ofs - lastofs) >> 1);
|
||||||
|
|
||||||
IFLT(a[m], key)
|
IFLT(a[m], key)
|
||||||
lastofs = m+1; /* a[m] < key */
|
lastofs = m+1; /* a[m] < key */
|
||||||
|
@ -1196,12 +1198,12 @@ The code duplication is massive, but this is enough different given that
|
||||||
we're sticking to "<" comparisons that it's much harder to follow if
|
we're sticking to "<" comparisons that it's much harder to follow if
|
||||||
written as one routine with yet another "left or right?" flag.
|
written as one routine with yet another "left or right?" flag.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
gallop_right(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
gallop_right(PyObject *key, PyObject **a, Py_ssize_t n, Py_ssize_t hint, PyObject *compare)
|
||||||
{
|
{
|
||||||
int ofs;
|
Py_ssize_t ofs;
|
||||||
int lastofs;
|
Py_ssize_t lastofs;
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
|
|
||||||
assert(key && a && n > 0 && hint >= 0 && hint < n);
|
assert(key && a && n > 0 && hint >= 0 && hint < n);
|
||||||
|
|
||||||
|
@ -1212,7 +1214,7 @@ gallop_right(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
||||||
/* key < a[hint] -- gallop left, until
|
/* key < a[hint] -- gallop left, until
|
||||||
* a[hint - ofs] <= key < a[hint - lastofs]
|
* a[hint - ofs] <= key < a[hint - lastofs]
|
||||||
*/
|
*/
|
||||||
const int maxofs = hint + 1; /* &a[0] is lowest */
|
const Py_ssize_t maxofs = hint + 1; /* &a[0] is lowest */
|
||||||
while (ofs < maxofs) {
|
while (ofs < maxofs) {
|
||||||
IFLT(key, *(a-ofs)) {
|
IFLT(key, *(a-ofs)) {
|
||||||
lastofs = ofs;
|
lastofs = ofs;
|
||||||
|
@ -1234,7 +1236,7 @@ gallop_right(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
||||||
/* a[hint] <= key -- gallop right, until
|
/* a[hint] <= key -- gallop right, until
|
||||||
* a[hint + lastofs] <= key < a[hint + ofs]
|
* a[hint + lastofs] <= key < a[hint + ofs]
|
||||||
*/
|
*/
|
||||||
const int maxofs = n - hint; /* &a[n-1] is highest */
|
const Py_ssize_t maxofs = n - hint; /* &a[n-1] is highest */
|
||||||
while (ofs < maxofs) {
|
while (ofs < maxofs) {
|
||||||
IFLT(key, a[ofs])
|
IFLT(key, a[ofs])
|
||||||
break;
|
break;
|
||||||
|
@ -1259,7 +1261,7 @@ gallop_right(PyObject *key, PyObject **a, int n, int hint, PyObject *compare)
|
||||||
*/
|
*/
|
||||||
++lastofs;
|
++lastofs;
|
||||||
while (lastofs < ofs) {
|
while (lastofs < ofs) {
|
||||||
int m = lastofs + ((ofs - lastofs) >> 1);
|
Py_ssize_t m = lastofs + ((ofs - lastofs) >> 1);
|
||||||
|
|
||||||
IFLT(key, a[m])
|
IFLT(key, a[m])
|
||||||
ofs = m; /* key < a[m] */
|
ofs = m; /* key < a[m] */
|
||||||
|
@ -1294,7 +1296,7 @@ fail:
|
||||||
*/
|
*/
|
||||||
struct s_slice {
|
struct s_slice {
|
||||||
PyObject **base;
|
PyObject **base;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct s_MergeState {
|
typedef struct s_MergeState {
|
||||||
|
@ -1305,13 +1307,13 @@ typedef struct s_MergeState {
|
||||||
* to MIN_GALLOP. merge_lo and merge_hi tend to nudge it higher for
|
* to MIN_GALLOP. merge_lo and merge_hi tend to nudge it higher for
|
||||||
* random data, and lower for highly structured data.
|
* random data, and lower for highly structured data.
|
||||||
*/
|
*/
|
||||||
int min_gallop;
|
Py_ssize_t min_gallop;
|
||||||
|
|
||||||
/* 'a' is temp storage to help with merges. It contains room for
|
/* 'a' is temp storage to help with merges. It contains room for
|
||||||
* alloced entries.
|
* alloced entries.
|
||||||
*/
|
*/
|
||||||
PyObject **a; /* may point to temparray below */
|
PyObject **a; /* may point to temparray below */
|
||||||
int alloced;
|
Py_ssize_t alloced;
|
||||||
|
|
||||||
/* A stack of n pending runs yet to be merged. Run #i starts at
|
/* A stack of n pending runs yet to be merged. Run #i starts at
|
||||||
* address base[i] and extends for len[i] elements. It's always
|
* address base[i] and extends for len[i] elements. It's always
|
||||||
|
@ -1359,7 +1361,7 @@ merge_freemem(MergeState *ms)
|
||||||
* Returns 0 on success and -1 if the memory can't be gotten.
|
* Returns 0 on success and -1 if the memory can't be gotten.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
merge_getmem(MergeState *ms, int need)
|
merge_getmem(MergeState *ms, Py_ssize_t need)
|
||||||
{
|
{
|
||||||
assert(ms != NULL);
|
assert(ms != NULL);
|
||||||
if (need <= ms->alloced)
|
if (need <= ms->alloced)
|
||||||
|
@ -1386,14 +1388,15 @@ merge_getmem(MergeState *ms, int need)
|
||||||
* merge, and should have na <= nb. See listsort.txt for more info.
|
* merge, and should have na <= nb. See listsort.txt for more info.
|
||||||
* Return 0 if successful, -1 if error.
|
* Return 0 if successful, -1 if error.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
merge_lo(MergeState *ms, PyObject **pa, int na, PyObject **pb, int nb)
|
merge_lo(MergeState *ms, PyObject **pa, Py_ssize_t na,
|
||||||
|
PyObject **pb, Py_ssize_t nb)
|
||||||
{
|
{
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
PyObject *compare;
|
PyObject *compare;
|
||||||
PyObject **dest;
|
PyObject **dest;
|
||||||
int result = -1; /* guilty until proved innocent */
|
int result = -1; /* guilty until proved innocent */
|
||||||
int min_gallop = ms->min_gallop;
|
Py_ssize_t min_gallop = ms->min_gallop;
|
||||||
|
|
||||||
assert(ms && pa && pb && na > 0 && nb > 0 && pa + na == pb);
|
assert(ms && pa && pb && na > 0 && nb > 0 && pa + na == pb);
|
||||||
if (MERGE_GETMEM(ms, na) < 0)
|
if (MERGE_GETMEM(ms, na) < 0)
|
||||||
|
@ -1411,8 +1414,8 @@ merge_lo(MergeState *ms, PyObject **pa, int na, PyObject **pb, int nb)
|
||||||
|
|
||||||
compare = ms->compare;
|
compare = ms->compare;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
int acount = 0; /* # of times A won in a row */
|
Py_ssize_t acount = 0; /* # of times A won in a row */
|
||||||
int bcount = 0; /* # of times B won in a row */
|
Py_ssize_t bcount = 0; /* # of times B won in a row */
|
||||||
|
|
||||||
/* Do the straightforward thing until (if ever) one run
|
/* Do the straightforward thing until (if ever) one run
|
||||||
* appears to win consistently.
|
* appears to win consistently.
|
||||||
|
@ -1517,16 +1520,16 @@ CopyB:
|
||||||
* merge, and should have na >= nb. See listsort.txt for more info.
|
* merge, and should have na >= nb. See listsort.txt for more info.
|
||||||
* Return 0 if successful, -1 if error.
|
* Return 0 if successful, -1 if error.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
merge_hi(MergeState *ms, PyObject **pa, int na, PyObject **pb, int nb)
|
merge_hi(MergeState *ms, PyObject **pa, Py_ssize_t na, PyObject **pb, Py_ssize_t nb)
|
||||||
{
|
{
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
PyObject *compare;
|
PyObject *compare;
|
||||||
PyObject **dest;
|
PyObject **dest;
|
||||||
int result = -1; /* guilty until proved innocent */
|
int result = -1; /* guilty until proved innocent */
|
||||||
PyObject **basea;
|
PyObject **basea;
|
||||||
PyObject **baseb;
|
PyObject **baseb;
|
||||||
int min_gallop = ms->min_gallop;
|
Py_ssize_t min_gallop = ms->min_gallop;
|
||||||
|
|
||||||
assert(ms && pa && pb && na > 0 && nb > 0 && pa + na == pb);
|
assert(ms && pa && pb && na > 0 && nb > 0 && pa + na == pb);
|
||||||
if (MERGE_GETMEM(ms, nb) < 0)
|
if (MERGE_GETMEM(ms, nb) < 0)
|
||||||
|
@ -1547,8 +1550,8 @@ merge_hi(MergeState *ms, PyObject **pa, int na, PyObject **pb, int nb)
|
||||||
|
|
||||||
compare = ms->compare;
|
compare = ms->compare;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
int acount = 0; /* # of times A won in a row */
|
Py_ssize_t acount = 0; /* # of times A won in a row */
|
||||||
int bcount = 0; /* # of times B won in a row */
|
Py_ssize_t bcount = 0; /* # of times B won in a row */
|
||||||
|
|
||||||
/* Do the straightforward thing until (if ever) one run
|
/* Do the straightforward thing until (if ever) one run
|
||||||
* appears to win consistently.
|
* appears to win consistently.
|
||||||
|
@ -1654,12 +1657,12 @@ CopyA:
|
||||||
/* Merge the two runs at stack indices i and i+1.
|
/* Merge the two runs at stack indices i and i+1.
|
||||||
* Returns 0 on success, -1 on error.
|
* Returns 0 on success, -1 on error.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
merge_at(MergeState *ms, int i)
|
merge_at(MergeState *ms, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
PyObject **pa, **pb;
|
PyObject **pa, **pb;
|
||||||
int na, nb;
|
Py_ssize_t na, nb;
|
||||||
int k;
|
Py_ssize_t k;
|
||||||
PyObject *compare;
|
PyObject *compare;
|
||||||
|
|
||||||
assert(ms != NULL);
|
assert(ms != NULL);
|
||||||
|
@ -1728,7 +1731,7 @@ merge_collapse(MergeState *ms)
|
||||||
|
|
||||||
assert(ms);
|
assert(ms);
|
||||||
while (ms->n > 1) {
|
while (ms->n > 1) {
|
||||||
int n = ms->n - 2;
|
Py_ssize_t n = ms->n - 2;
|
||||||
if (n > 0 && p[n-1].len <= p[n].len + p[n+1].len) {
|
if (n > 0 && p[n-1].len <= p[n].len + p[n+1].len) {
|
||||||
if (p[n-1].len < p[n+1].len)
|
if (p[n-1].len < p[n+1].len)
|
||||||
--n;
|
--n;
|
||||||
|
@ -1757,7 +1760,7 @@ merge_force_collapse(MergeState *ms)
|
||||||
|
|
||||||
assert(ms);
|
assert(ms);
|
||||||
while (ms->n > 1) {
|
while (ms->n > 1) {
|
||||||
int n = ms->n - 2;
|
Py_ssize_t n = ms->n - 2;
|
||||||
if (n > 0 && p[n-1].len < p[n+1].len)
|
if (n > 0 && p[n-1].len < p[n+1].len)
|
||||||
--n;
|
--n;
|
||||||
if (merge_at(ms, n) < 0)
|
if (merge_at(ms, n) < 0)
|
||||||
|
@ -1776,10 +1779,10 @@ merge_force_collapse(MergeState *ms)
|
||||||
*
|
*
|
||||||
* See listsort.txt for more info.
|
* See listsort.txt for more info.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
merge_compute_minrun(int n)
|
merge_compute_minrun(Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int r = 0; /* becomes 1 if any 1 bits are shifted off */
|
Py_ssize_t r = 0; /* becomes 1 if any 1 bits are shifted off */
|
||||||
|
|
||||||
assert(n >= 0);
|
assert(n >= 0);
|
||||||
while (n >= 64) {
|
while (n >= 64) {
|
||||||
|
@ -1972,16 +1975,16 @@ listsort(PyListObject *self, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
MergeState ms;
|
MergeState ms;
|
||||||
PyObject **lo, **hi;
|
PyObject **lo, **hi;
|
||||||
int nremaining;
|
Py_ssize_t nremaining;
|
||||||
int minrun;
|
Py_ssize_t minrun;
|
||||||
int saved_ob_size, saved_allocated;
|
Py_ssize_t saved_ob_size, saved_allocated;
|
||||||
PyObject **saved_ob_item;
|
PyObject **saved_ob_item;
|
||||||
PyObject **final_ob_item;
|
PyObject **final_ob_item;
|
||||||
PyObject *compare = NULL;
|
PyObject *compare = NULL;
|
||||||
PyObject *result = NULL; /* guilty until proved innocent */
|
PyObject *result = NULL; /* guilty until proved innocent */
|
||||||
int reverse = 0;
|
int reverse = 0;
|
||||||
PyObject *keyfunc = NULL;
|
PyObject *keyfunc = NULL;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *key, *value, *kvpair;
|
PyObject *key, *value, *kvpair;
|
||||||
static const char *kwlist[] = {"cmp", "key", "reverse", 0};
|
static const char *kwlist[] = {"cmp", "key", "reverse", 0};
|
||||||
|
|
||||||
|
@ -2055,7 +2058,7 @@ listsort(PyListObject *self, PyObject *args, PyObject *kwds)
|
||||||
minrun = merge_compute_minrun(nremaining);
|
minrun = merge_compute_minrun(nremaining);
|
||||||
do {
|
do {
|
||||||
int descending;
|
int descending;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
|
|
||||||
/* Identify next run. */
|
/* Identify next run. */
|
||||||
n = count_run(lo, hi, compare, &descending);
|
n = count_run(lo, hi, compare, &descending);
|
||||||
|
@ -2065,7 +2068,7 @@ listsort(PyListObject *self, PyObject *args, PyObject *kwds)
|
||||||
reverse_slice(lo, lo + n);
|
reverse_slice(lo, lo + n);
|
||||||
/* If short, extend to min(minrun, nremaining). */
|
/* If short, extend to min(minrun, nremaining). */
|
||||||
if (n < minrun) {
|
if (n < minrun) {
|
||||||
const int force = nremaining <= minrun ?
|
const Py_ssize_t force = nremaining <= minrun ?
|
||||||
nremaining : minrun;
|
nremaining : minrun;
|
||||||
if (binarysort(lo, lo + force, lo + n, compare) < 0)
|
if (binarysort(lo, lo + force, lo + n, compare) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -2177,7 +2180,7 @@ PyList_AsTuple(PyObject *v)
|
||||||
{
|
{
|
||||||
PyObject *w;
|
PyObject *w;
|
||||||
PyObject **p;
|
PyObject **p;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
if (v == NULL || !PyList_Check(v)) {
|
if (v == NULL || !PyList_Check(v)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2200,7 +2203,7 @@ PyList_AsTuple(PyObject *v)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
listindex(PyListObject *self, PyObject *args)
|
listindex(PyListObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int i, start=0, stop=self->ob_size;
|
Py_ssize_t i, start=0, stop=self->ob_size;
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|O&O&:index", &v,
|
if (!PyArg_ParseTuple(args, "O|O&O&:index", &v,
|
||||||
|
@ -2220,7 +2223,7 @@ listindex(PyListObject *self, PyObject *args)
|
||||||
for (i = start; i < stop && i < self->ob_size; i++) {
|
for (i = start; i < stop && i < self->ob_size; i++) {
|
||||||
int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ);
|
int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ);
|
||||||
if (cmp > 0)
|
if (cmp > 0)
|
||||||
return PyInt_FromLong((long)i);
|
return PyInt_FromSsize_t(i);
|
||||||
else if (cmp < 0)
|
else if (cmp < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2231,8 +2234,8 @@ listindex(PyListObject *self, PyObject *args)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
listcount(PyListObject *self, PyObject *v)
|
listcount(PyListObject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
int count = 0;
|
Py_ssize_t count = 0;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
for (i = 0; i < self->ob_size; i++) {
|
for (i = 0; i < self->ob_size; i++) {
|
||||||
int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ);
|
int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ);
|
||||||
|
@ -2241,13 +2244,13 @@ listcount(PyListObject *self, PyObject *v)
|
||||||
else if (cmp < 0)
|
else if (cmp < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong((long)count);
|
return PyInt_FromSsize_t(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
listremove(PyListObject *self, PyObject *v)
|
listremove(PyListObject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
for (i = 0; i < self->ob_size; i++) {
|
for (i = 0; i < self->ob_size; i++) {
|
||||||
int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ);
|
int cmp = PyObject_RichCompareBool(self->ob_item[i], v, Py_EQ);
|
||||||
|
@ -2267,13 +2270,13 @@ listremove(PyListObject *self, PyObject *v)
|
||||||
static int
|
static int
|
||||||
list_traverse(PyListObject *o, visitproc visit, void *arg)
|
list_traverse(PyListObject *o, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
int i, err;
|
Py_ssize_t i;
|
||||||
PyObject *x;
|
PyObject *x;
|
||||||
|
|
||||||
for (i = o->ob_size; --i >= 0; ) {
|
for (i = o->ob_size; --i >= 0; ) {
|
||||||
x = o->ob_item[i];
|
x = o->ob_item[i];
|
||||||
if (x != NULL) {
|
if (x != NULL) {
|
||||||
err = visit(x, arg);
|
int err = visit(x, arg);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -2285,7 +2288,7 @@ static PyObject *
|
||||||
list_richcompare(PyObject *v, PyObject *w, int op)
|
list_richcompare(PyObject *v, PyObject *w, int op)
|
||||||
{
|
{
|
||||||
PyListObject *vl, *wl;
|
PyListObject *vl, *wl;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (!PyList_Check(v) || !PyList_Check(w)) {
|
if (!PyList_Check(v) || !PyList_Check(w)) {
|
||||||
Py_INCREF(Py_NotImplemented);
|
Py_INCREF(Py_NotImplemented);
|
||||||
|
@ -2318,8 +2321,8 @@ list_richcompare(PyObject *v, PyObject *w, int op)
|
||||||
|
|
||||||
if (i >= vl->ob_size || i >= wl->ob_size) {
|
if (i >= vl->ob_size || i >= wl->ob_size) {
|
||||||
/* No more items to compare -- compare sizes */
|
/* No more items to compare -- compare sizes */
|
||||||
int vs = vl->ob_size;
|
Py_ssize_t vs = vl->ob_size;
|
||||||
int ws = wl->ob_size;
|
Py_ssize_t ws = wl->ob_size;
|
||||||
int cmp;
|
int cmp;
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
@ -2433,16 +2436,16 @@ static PyMethodDef list_methods[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static PySequenceMethods list_as_sequence = {
|
static PySequenceMethods list_as_sequence = {
|
||||||
(inquiry)list_length, /* sq_length */
|
(lenfunc)list_length, /* sq_length */
|
||||||
(binaryfunc)list_concat, /* sq_concat */
|
(binaryfunc)list_concat, /* sq_concat */
|
||||||
(intargfunc)list_repeat, /* sq_repeat */
|
(ssizeargfunc)list_repeat, /* sq_repeat */
|
||||||
(intargfunc)list_item, /* sq_item */
|
(ssizeargfunc)list_item, /* sq_item */
|
||||||
(intintargfunc)list_slice, /* sq_slice */
|
(ssizessizeargfunc)list_slice, /* sq_slice */
|
||||||
(intobjargproc)list_ass_item, /* sq_ass_item */
|
(ssizeobjargproc)list_ass_item, /* sq_ass_item */
|
||||||
(intintobjargproc)list_ass_slice, /* sq_ass_slice */
|
(ssizessizeobjargproc)list_ass_slice, /* sq_ass_slice */
|
||||||
(objobjproc)list_contains, /* sq_contains */
|
(objobjproc)list_contains, /* sq_contains */
|
||||||
(binaryfunc)list_inplace_concat, /* sq_inplace_concat */
|
(binaryfunc)list_inplace_concat, /* sq_inplace_concat */
|
||||||
(intargfunc)list_inplace_repeat, /* sq_inplace_repeat */
|
(ssizeargfunc)list_inplace_repeat, /* sq_inplace_repeat */
|
||||||
};
|
};
|
||||||
|
|
||||||
PyDoc_STRVAR(list_doc,
|
PyDoc_STRVAR(list_doc,
|
||||||
|
@ -2452,14 +2455,8 @@ PyDoc_STRVAR(list_doc,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list_subscript(PyListObject* self, PyObject* item)
|
list_subscript(PyListObject* self, PyObject* item)
|
||||||
{
|
{
|
||||||
if (PyInt_Check(item)) {
|
if (PyInt_Check(item) || PyLong_Check(item)) {
|
||||||
long i = PyInt_AS_LONG(item);
|
Py_ssize_t i = PyInt_AsSsize_t(item);
|
||||||
if (i < 0)
|
|
||||||
i += PyList_GET_SIZE(self);
|
|
||||||
return list_item(self, i);
|
|
||||||
}
|
|
||||||
else if (PyLong_Check(item)) {
|
|
||||||
long i = PyLong_AsLong(item);
|
|
||||||
if (i == -1 && PyErr_Occurred())
|
if (i == -1 && PyErr_Occurred())
|
||||||
return NULL;
|
return NULL;
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
@ -2467,7 +2464,7 @@ list_subscript(PyListObject* self, PyObject* item)
|
||||||
return list_item(self, i);
|
return list_item(self, i);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
int start, stop, step, slicelength, cur, i;
|
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||||
PyObject* result;
|
PyObject* result;
|
||||||
PyObject* it;
|
PyObject* it;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
|
@ -2521,7 +2518,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
return list_ass_item(self, i, value);
|
return list_ass_item(self, i, value);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
int start, stop, step, slicelength;
|
Py_ssize_t start, stop, step, slicelength;
|
||||||
|
|
||||||
if (PySlice_GetIndicesEx((PySliceObject*)item, self->ob_size,
|
if (PySlice_GetIndicesEx((PySliceObject*)item, self->ob_size,
|
||||||
&start, &stop, &step, &slicelength) < 0) {
|
&start, &stop, &step, &slicelength) < 0) {
|
||||||
|
@ -2535,7 +2532,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
if (value == NULL) {
|
if (value == NULL) {
|
||||||
/* delete slice */
|
/* delete slice */
|
||||||
PyObject **garbage;
|
PyObject **garbage;
|
||||||
int cur, i;
|
Py_ssize_t cur, i;
|
||||||
|
|
||||||
if (slicelength <= 0)
|
if (slicelength <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2554,7 +2551,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
for (cur = start, i = 0;
|
for (cur = start, i = 0;
|
||||||
cur < stop;
|
cur < stop;
|
||||||
cur += step, i++) {
|
cur += step, i++) {
|
||||||
int lim = step;
|
Py_ssize_t lim = step;
|
||||||
|
|
||||||
garbage[i] = PyList_GET_ITEM(self, cur);
|
garbage[i] = PyList_GET_ITEM(self, cur);
|
||||||
|
|
||||||
|
@ -2586,7 +2583,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
else {
|
else {
|
||||||
/* assign slice */
|
/* assign slice */
|
||||||
PyObject **garbage, *ins, *seq, **seqitems, **selfitems;
|
PyObject **garbage, *ins, *seq, **seqitems, **selfitems;
|
||||||
int cur, i;
|
Py_ssize_t cur, i;
|
||||||
|
|
||||||
/* protect against a[::-1] = a */
|
/* protect against a[::-1] = a */
|
||||||
if (self == (PyListObject*)value) {
|
if (self == (PyListObject*)value) {
|
||||||
|
@ -2601,8 +2598,9 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PySequence_Fast_GET_SIZE(seq) != slicelength) {
|
if (PySequence_Fast_GET_SIZE(seq) != slicelength) {
|
||||||
|
/* XXX can we use %zd here? */
|
||||||
PyErr_Format(PyExc_ValueError,
|
PyErr_Format(PyExc_ValueError,
|
||||||
"attempt to assign sequence of size %d to extended slice of size %d",
|
"attempt to assign sequence of size %ld to extended slice of size %ld",
|
||||||
PySequence_Fast_GET_SIZE(seq),
|
PySequence_Fast_GET_SIZE(seq),
|
||||||
slicelength);
|
slicelength);
|
||||||
Py_DECREF(seq);
|
Py_DECREF(seq);
|
||||||
|
@ -2645,7 +2643,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyMappingMethods list_as_mapping = {
|
static PyMappingMethods list_as_mapping = {
|
||||||
(inquiry)list_length,
|
(lenfunc)list_length,
|
||||||
(binaryfunc)list_subscript,
|
(binaryfunc)list_subscript,
|
||||||
(objobjargproc)list_ass_subscript
|
(objobjargproc)list_ass_subscript
|
||||||
};
|
};
|
||||||
|
@ -2767,11 +2765,11 @@ listiter_next(listiterobject *it)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
listiter_len(listiterobject *it)
|
listiter_len(listiterobject *it)
|
||||||
{
|
{
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
if (it->it_seq) {
|
if (it->it_seq) {
|
||||||
len = PyList_GET_SIZE(it->it_seq) - it->it_index;
|
len = PyList_GET_SIZE(it->it_seq) - it->it_index;
|
||||||
if (len >= 0)
|
if (len >= 0)
|
||||||
return PyInt_FromLong((long)len);
|
return PyInt_FromSsize_t(len);
|
||||||
}
|
}
|
||||||
return PyInt_FromLong(0);
|
return PyInt_FromLong(0);
|
||||||
}
|
}
|
||||||
|
@ -2880,17 +2878,17 @@ listreviter_next(listreviterobject *it)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
listreviter_len(listreviterobject *it)
|
listreviter_len(listreviterobject *it)
|
||||||
{
|
{
|
||||||
int len = it->it_index + 1;
|
Py_ssize_t len = it->it_index + 1;
|
||||||
if (it->it_seq == NULL || PyList_GET_SIZE(it->it_seq) < len)
|
if (it->it_seq == NULL || PyList_GET_SIZE(it->it_seq) < len)
|
||||||
return 0;
|
return 0;
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods listreviter_as_sequence = {
|
static PySequenceMethods listreviter_as_sequence = {
|
||||||
(inquiry)listreviter_len, /* sq_length */
|
(lenfunc)listreviter_len, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -50,8 +50,8 @@ static PyObject *long_format(PyObject *aa, int base, int addL);
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
long_normalize(register PyLongObject *v)
|
long_normalize(register PyLongObject *v)
|
||||||
{
|
{
|
||||||
int j = ABS(v->ob_size);
|
Py_ssize_t j = ABS(v->ob_size);
|
||||||
register int i = j;
|
Py_ssize_t i = j;
|
||||||
|
|
||||||
while (i > 0 && v->ob_digit[i-1] == 0)
|
while (i > 0 && v->ob_digit[i-1] == 0)
|
||||||
--i;
|
--i;
|
||||||
|
@ -64,8 +64,13 @@ long_normalize(register PyLongObject *v)
|
||||||
Return NULL and set exception if we run out of memory. */
|
Return NULL and set exception if we run out of memory. */
|
||||||
|
|
||||||
PyLongObject *
|
PyLongObject *
|
||||||
_PyLong_New(int size)
|
_PyLong_New(Py_ssize_t size)
|
||||||
{
|
{
|
||||||
|
if (size > INT_MAX) {
|
||||||
|
/* XXX: Fix this check when ob_size becomes ssize_t */
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
|
return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,7 +78,7 @@ PyObject *
|
||||||
_PyLong_Copy(PyLongObject *src)
|
_PyLong_Copy(PyLongObject *src)
|
||||||
{
|
{
|
||||||
PyLongObject *result;
|
PyLongObject *result;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
assert(src != NULL);
|
assert(src != NULL);
|
||||||
i = src->ob_size;
|
i = src->ob_size;
|
||||||
|
@ -198,7 +203,8 @@ PyLong_AsLong(PyObject *vv)
|
||||||
/* This version by Tim Peters */
|
/* This version by Tim Peters */
|
||||||
register PyLongObject *v;
|
register PyLongObject *v;
|
||||||
unsigned long x, prev;
|
unsigned long x, prev;
|
||||||
int i, sign;
|
Py_ssize_t i;
|
||||||
|
int sign;
|
||||||
|
|
||||||
if (vv == NULL || !PyLong_Check(vv)) {
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
if (vv != NULL && PyInt_Check(vv))
|
if (vv != NULL && PyInt_Check(vv))
|
||||||
|
@ -235,6 +241,50 @@ PyLong_AsLong(PyObject *vv)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get a Py_ssize_t from a long int object.
|
||||||
|
Returns -1 and sets an error condition if overflow occurs. */
|
||||||
|
|
||||||
|
Py_ssize_t
|
||||||
|
_PyLong_AsSsize_t(PyObject *vv)
|
||||||
|
{
|
||||||
|
register PyLongObject *v;
|
||||||
|
size_t x, prev;
|
||||||
|
Py_ssize_t i;
|
||||||
|
int sign;
|
||||||
|
|
||||||
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
v = (PyLongObject *)vv;
|
||||||
|
i = v->ob_size;
|
||||||
|
sign = 1;
|
||||||
|
x = 0;
|
||||||
|
if (i < 0) {
|
||||||
|
sign = -1;
|
||||||
|
i = -(i);
|
||||||
|
}
|
||||||
|
while (--i >= 0) {
|
||||||
|
prev = x;
|
||||||
|
x = (x << SHIFT) + v->ob_digit[i];
|
||||||
|
if ((x >> SHIFT) != prev)
|
||||||
|
goto overflow;
|
||||||
|
}
|
||||||
|
/* Haven't lost any bits, but if the sign bit is set we're in
|
||||||
|
* trouble *unless* this is the min negative number. So,
|
||||||
|
* trouble iff sign bit set && (positive || some bit set other
|
||||||
|
* than the sign bit).
|
||||||
|
*/
|
||||||
|
if ((Py_ssize_t)x < 0 && (sign > 0 || (x << 1) != 0))
|
||||||
|
goto overflow;
|
||||||
|
return (Py_ssize_t)x * sign;
|
||||||
|
|
||||||
|
overflow:
|
||||||
|
PyErr_SetString(PyExc_OverflowError,
|
||||||
|
"long int too large to convert to int");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get a C unsigned long int from a long int object.
|
/* Get a C unsigned long int from a long int object.
|
||||||
Returns -1 and sets an error condition if overflow occurs. */
|
Returns -1 and sets an error condition if overflow occurs. */
|
||||||
|
|
||||||
|
@ -243,7 +293,7 @@ PyLong_AsUnsignedLong(PyObject *vv)
|
||||||
{
|
{
|
||||||
register PyLongObject *v;
|
register PyLongObject *v;
|
||||||
unsigned long x, prev;
|
unsigned long x, prev;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (vv == NULL || !PyLong_Check(vv)) {
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
if (vv != NULL && PyInt_Check(vv)) {
|
if (vv != NULL && PyInt_Check(vv)) {
|
||||||
|
@ -286,7 +336,8 @@ PyLong_AsUnsignedLongMask(PyObject *vv)
|
||||||
{
|
{
|
||||||
register PyLongObject *v;
|
register PyLongObject *v;
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
int i, sign;
|
Py_ssize_t i;
|
||||||
|
int sign;
|
||||||
|
|
||||||
if (vv == NULL || !PyLong_Check(vv)) {
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
if (vv != NULL && PyInt_Check(vv))
|
if (vv != NULL && PyInt_Check(vv))
|
||||||
|
@ -324,7 +375,7 @@ _PyLong_NumBits(PyObject *vv)
|
||||||
{
|
{
|
||||||
PyLongObject *v = (PyLongObject *)vv;
|
PyLongObject *v = (PyLongObject *)vv;
|
||||||
size_t result = 0;
|
size_t result = 0;
|
||||||
int ndigits;
|
Py_ssize_t ndigits;
|
||||||
|
|
||||||
assert(v != NULL);
|
assert(v != NULL);
|
||||||
assert(PyLong_Check(v));
|
assert(PyLong_Check(v));
|
||||||
|
@ -334,7 +385,7 @@ _PyLong_NumBits(PyObject *vv)
|
||||||
digit msd = v->ob_digit[ndigits - 1];
|
digit msd = v->ob_digit[ndigits - 1];
|
||||||
|
|
||||||
result = (ndigits - 1) * SHIFT;
|
result = (ndigits - 1) * SHIFT;
|
||||||
if (result / SHIFT != (size_t)ndigits - 1)
|
if (result / SHIFT != ndigits - 1)
|
||||||
goto Overflow;
|
goto Overflow;
|
||||||
do {
|
do {
|
||||||
++result;
|
++result;
|
||||||
|
@ -464,7 +515,7 @@ _PyLong_AsByteArray(PyLongObject* v,
|
||||||
int little_endian, int is_signed)
|
int little_endian, int is_signed)
|
||||||
{
|
{
|
||||||
int i; /* index into v->ob_digit */
|
int i; /* index into v->ob_digit */
|
||||||
int ndigits; /* |v->ob_size| */
|
Py_ssize_t ndigits; /* |v->ob_size| */
|
||||||
twodigits accum; /* sliding register */
|
twodigits accum; /* sliding register */
|
||||||
unsigned int accumbits; /* # bits in accum */
|
unsigned int accumbits; /* # bits in accum */
|
||||||
int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
|
int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
|
||||||
|
@ -612,7 +663,8 @@ _PyLong_AsScaledDouble(PyObject *vv, int *exponent)
|
||||||
PyLongObject *v;
|
PyLongObject *v;
|
||||||
double x;
|
double x;
|
||||||
const double multiplier = (double)(1L << SHIFT);
|
const double multiplier = (double)(1L << SHIFT);
|
||||||
int i, sign;
|
Py_ssize_t i;
|
||||||
|
int sign;
|
||||||
int nbitsneeded;
|
int nbitsneeded;
|
||||||
|
|
||||||
if (vv == NULL || !PyLong_Check(vv)) {
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
|
@ -772,6 +824,30 @@ PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
|
||||||
SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
|
SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Create a new long int object from a C Py_ssize_t. */
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
_PyLong_FromSsize_t(Py_ssize_t ival)
|
||||||
|
{
|
||||||
|
Py_ssize_t bytes = ival;
|
||||||
|
int one = 1;
|
||||||
|
return _PyLong_FromByteArray(
|
||||||
|
(unsigned char *)&bytes,
|
||||||
|
SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a new long int object from a C size_t. */
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
_PyLong_FromSize_t(size_t ival)
|
||||||
|
{
|
||||||
|
size_t bytes = ival;
|
||||||
|
int one = 1;
|
||||||
|
return _PyLong_FromByteArray(
|
||||||
|
(unsigned char *)&bytes,
|
||||||
|
SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/* Get a C PY_LONG_LONG int from a long int object.
|
/* Get a C PY_LONG_LONG int from a long int object.
|
||||||
Return -1 and set an error if overflow occurs. */
|
Return -1 and set an error if overflow occurs. */
|
||||||
|
|
||||||
|
@ -859,7 +935,8 @@ PyLong_AsUnsignedLongLongMask(PyObject *vv)
|
||||||
{
|
{
|
||||||
register PyLongObject *v;
|
register PyLongObject *v;
|
||||||
unsigned PY_LONG_LONG x;
|
unsigned PY_LONG_LONG x;
|
||||||
int i, sign;
|
Py_ssize_t i;
|
||||||
|
int sign;
|
||||||
|
|
||||||
if (vv == NULL || !PyLong_Check(vv)) {
|
if (vv == NULL || !PyLong_Check(vv)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -920,7 +997,7 @@ convert_binop(PyObject *v, PyObject *w, PyLongObject **a, PyLongObject **b) {
|
||||||
* x[m-1], and the remaining carry (0 or 1) is returned.
|
* x[m-1], and the remaining carry (0 or 1) is returned.
|
||||||
*/
|
*/
|
||||||
static digit
|
static digit
|
||||||
v_iadd(digit *x, int m, digit *y, int n)
|
v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
digit carry = 0;
|
digit carry = 0;
|
||||||
|
@ -946,7 +1023,7 @@ v_iadd(digit *x, int m, digit *y, int n)
|
||||||
* far as x[m-1], and the remaining borrow (0 or 1) is returned.
|
* far as x[m-1], and the remaining borrow (0 or 1) is returned.
|
||||||
*/
|
*/
|
||||||
static digit
|
static digit
|
||||||
v_isub(digit *x, int m, digit *y, int n)
|
v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
digit borrow = 0;
|
digit borrow = 0;
|
||||||
|
@ -980,10 +1057,10 @@ mul1(PyLongObject *a, wdigit n)
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
muladd1(PyLongObject *a, wdigit n, wdigit extra)
|
muladd1(PyLongObject *a, wdigit n, wdigit extra)
|
||||||
{
|
{
|
||||||
int size_a = ABS(a->ob_size);
|
Py_ssize_t size_a = ABS(a->ob_size);
|
||||||
PyLongObject *z = _PyLong_New(size_a+1);
|
PyLongObject *z = _PyLong_New(size_a+1);
|
||||||
twodigits carry = extra;
|
twodigits carry = extra;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (z == NULL)
|
if (z == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1003,7 +1080,7 @@ muladd1(PyLongObject *a, wdigit n, wdigit extra)
|
||||||
immutable. */
|
immutable. */
|
||||||
|
|
||||||
static digit
|
static digit
|
||||||
inplace_divrem1(digit *pout, digit *pin, int size, digit n)
|
inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
|
||||||
{
|
{
|
||||||
twodigits rem = 0;
|
twodigits rem = 0;
|
||||||
|
|
||||||
|
@ -1026,7 +1103,7 @@ inplace_divrem1(digit *pout, digit *pin, int size, digit n)
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
divrem1(PyLongObject *a, digit n, digit *prem)
|
divrem1(PyLongObject *a, digit n, digit *prem)
|
||||||
{
|
{
|
||||||
const int size = ABS(a->ob_size);
|
const Py_ssize_t size = ABS(a->ob_size);
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
|
|
||||||
assert(n > 0 && n <= MASK);
|
assert(n > 0 && n <= MASK);
|
||||||
|
@ -1046,8 +1123,8 @@ long_format(PyObject *aa, int base, int addL)
|
||||||
{
|
{
|
||||||
register PyLongObject *a = (PyLongObject *)aa;
|
register PyLongObject *a = (PyLongObject *)aa;
|
||||||
PyStringObject *str;
|
PyStringObject *str;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
const int size_a = ABS(a->ob_size);
|
const Py_ssize_t size_a = ABS(a->ob_size);
|
||||||
char *p;
|
char *p;
|
||||||
int bits;
|
int bits;
|
||||||
char sign = '\0';
|
char sign = '\0';
|
||||||
|
@ -1107,7 +1184,7 @@ long_format(PyObject *aa, int base, int addL)
|
||||||
/* Not 0, and base not a power of 2. Divide repeatedly by
|
/* Not 0, and base not a power of 2. Divide repeatedly by
|
||||||
base, but for speed use the highest power of base that
|
base, but for speed use the highest power of base that
|
||||||
fits in a digit. */
|
fits in a digit. */
|
||||||
int size = size_a;
|
Py_ssize_t size = size_a;
|
||||||
digit *pin = a->ob_digit;
|
digit *pin = a->ob_digit;
|
||||||
PyLongObject *scratch;
|
PyLongObject *scratch;
|
||||||
/* powbasw <- largest power of base that fits in a digit. */
|
/* powbasw <- largest power of base that fits in a digit. */
|
||||||
|
@ -1200,7 +1277,7 @@ long_from_binary_base(char **str, int base)
|
||||||
char *p = *str;
|
char *p = *str;
|
||||||
char *start = p;
|
char *start = p;
|
||||||
int bits_per_char;
|
int bits_per_char;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
twodigits accum;
|
twodigits accum;
|
||||||
int bits_in_accum;
|
int bits_in_accum;
|
||||||
|
@ -1261,7 +1338,7 @@ long_from_binary_base(char **str, int base)
|
||||||
bits_in_accum += bits_per_char;
|
bits_in_accum += bits_per_char;
|
||||||
if (bits_in_accum >= SHIFT) {
|
if (bits_in_accum >= SHIFT) {
|
||||||
*pdigit++ = (digit)(accum & MASK);
|
*pdigit++ = (digit)(accum & MASK);
|
||||||
assert(pdigit - z->ob_digit <= n);
|
assert(pdigit - z->ob_digit <= (int)n);
|
||||||
accum >>= SHIFT;
|
accum >>= SHIFT;
|
||||||
bits_in_accum -= SHIFT;
|
bits_in_accum -= SHIFT;
|
||||||
assert(bits_in_accum < SHIFT);
|
assert(bits_in_accum < SHIFT);
|
||||||
|
@ -1270,7 +1347,7 @@ long_from_binary_base(char **str, int base)
|
||||||
if (bits_in_accum) {
|
if (bits_in_accum) {
|
||||||
assert(bits_in_accum <= SHIFT);
|
assert(bits_in_accum <= SHIFT);
|
||||||
*pdigit++ = (digit)accum;
|
*pdigit++ = (digit)accum;
|
||||||
assert(pdigit - z->ob_digit <= n);
|
assert(pdigit - z->ob_digit <= (int)n);
|
||||||
}
|
}
|
||||||
while (pdigit - z->ob_digit < n)
|
while (pdigit - z->ob_digit < n)
|
||||||
*pdigit++ = 0;
|
*pdigit++ = 0;
|
||||||
|
@ -1356,7 +1433,7 @@ PyLong_FromString(char *str, char **pend, int base)
|
||||||
|
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
PyObject *
|
PyObject *
|
||||||
PyLong_FromUnicode(Py_UNICODE *u, int length, int base)
|
PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
|
||||||
{
|
{
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
char *buffer = PyMem_MALLOC(length+1);
|
char *buffer = PyMem_MALLOC(length+1);
|
||||||
|
@ -1387,7 +1464,7 @@ static int
|
||||||
long_divrem(PyLongObject *a, PyLongObject *b,
|
long_divrem(PyLongObject *a, PyLongObject *b,
|
||||||
PyLongObject **pdiv, PyLongObject **prem)
|
PyLongObject **pdiv, PyLongObject **prem)
|
||||||
{
|
{
|
||||||
int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
|
Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
|
|
||||||
if (size_b == 0) {
|
if (size_b == 0) {
|
||||||
|
@ -1433,12 +1510,12 @@ long_divrem(PyLongObject *a, PyLongObject *b,
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
|
x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
|
||||||
{
|
{
|
||||||
int size_v = ABS(v1->ob_size), size_w = ABS(w1->ob_size);
|
Py_ssize_t size_v = ABS(v1->ob_size), size_w = ABS(w1->ob_size);
|
||||||
digit d = (digit) ((twodigits)BASE / (w1->ob_digit[size_w-1] + 1));
|
digit d = (digit) ((twodigits)BASE / (w1->ob_digit[size_w-1] + 1));
|
||||||
PyLongObject *v = mul1(v1, d);
|
PyLongObject *v = mul1(v1, d);
|
||||||
PyLongObject *w = mul1(w1, d);
|
PyLongObject *w = mul1(w1, d);
|
||||||
PyLongObject *a;
|
PyLongObject *a;
|
||||||
int j, k;
|
Py_ssize_t j, k;
|
||||||
|
|
||||||
if (v == NULL || w == NULL) {
|
if (v == NULL || w == NULL) {
|
||||||
Py_XDECREF(v);
|
Py_XDECREF(v);
|
||||||
|
@ -1550,7 +1627,7 @@ long_str(PyObject *v)
|
||||||
static int
|
static int
|
||||||
long_compare(PyLongObject *a, PyLongObject *b)
|
long_compare(PyLongObject *a, PyLongObject *b)
|
||||||
{
|
{
|
||||||
int sign;
|
Py_ssize_t sign;
|
||||||
|
|
||||||
if (a->ob_size != b->ob_size) {
|
if (a->ob_size != b->ob_size) {
|
||||||
if (ABS(a->ob_size) == 0 && ABS(b->ob_size) == 0)
|
if (ABS(a->ob_size) == 0 && ABS(b->ob_size) == 0)
|
||||||
|
@ -1559,7 +1636,7 @@ long_compare(PyLongObject *a, PyLongObject *b)
|
||||||
sign = a->ob_size - b->ob_size;
|
sign = a->ob_size - b->ob_size;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int i = ABS(a->ob_size);
|
Py_ssize_t i = ABS(a->ob_size);
|
||||||
while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
|
while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
|
||||||
;
|
;
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
@ -1577,7 +1654,8 @@ static long
|
||||||
long_hash(PyLongObject *v)
|
long_hash(PyLongObject *v)
|
||||||
{
|
{
|
||||||
long x;
|
long x;
|
||||||
int i, sign;
|
Py_ssize_t i;
|
||||||
|
int sign;
|
||||||
|
|
||||||
/* This is designed so that Python ints and longs with the
|
/* This is designed so that Python ints and longs with the
|
||||||
same value hash to the same value, otherwise comparisons
|
same value hash to the same value, otherwise comparisons
|
||||||
|
@ -1608,7 +1686,7 @@ long_hash(PyLongObject *v)
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
x_add(PyLongObject *a, PyLongObject *b)
|
x_add(PyLongObject *a, PyLongObject *b)
|
||||||
{
|
{
|
||||||
int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
|
Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
int i;
|
int i;
|
||||||
digit carry = 0;
|
digit carry = 0;
|
||||||
|
@ -1616,7 +1694,7 @@ x_add(PyLongObject *a, PyLongObject *b)
|
||||||
/* Ensure a is the larger of the two: */
|
/* Ensure a is the larger of the two: */
|
||||||
if (size_a < size_b) {
|
if (size_a < size_b) {
|
||||||
{ PyLongObject *temp = a; a = b; b = temp; }
|
{ PyLongObject *temp = a; a = b; b = temp; }
|
||||||
{ int size_temp = size_a;
|
{ Py_ssize_t size_temp = size_a;
|
||||||
size_a = size_b;
|
size_a = size_b;
|
||||||
size_b = size_temp; }
|
size_b = size_temp; }
|
||||||
}
|
}
|
||||||
|
@ -1642,9 +1720,9 @@ x_add(PyLongObject *a, PyLongObject *b)
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
x_sub(PyLongObject *a, PyLongObject *b)
|
x_sub(PyLongObject *a, PyLongObject *b)
|
||||||
{
|
{
|
||||||
int size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
|
Py_ssize_t size_a = ABS(a->ob_size), size_b = ABS(b->ob_size);
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int sign = 1;
|
int sign = 1;
|
||||||
digit borrow = 0;
|
digit borrow = 0;
|
||||||
|
|
||||||
|
@ -1652,7 +1730,7 @@ x_sub(PyLongObject *a, PyLongObject *b)
|
||||||
if (size_a < size_b) {
|
if (size_a < size_b) {
|
||||||
sign = -1;
|
sign = -1;
|
||||||
{ PyLongObject *temp = a; a = b; b = temp; }
|
{ PyLongObject *temp = a; a = b; b = temp; }
|
||||||
{ int size_temp = size_a;
|
{ Py_ssize_t size_temp = size_a;
|
||||||
size_a = size_b;
|
size_a = size_b;
|
||||||
size_b = size_temp; }
|
size_b = size_temp; }
|
||||||
}
|
}
|
||||||
|
@ -1752,9 +1830,9 @@ static PyLongObject *
|
||||||
x_mul(PyLongObject *a, PyLongObject *b)
|
x_mul(PyLongObject *a, PyLongObject *b)
|
||||||
{
|
{
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
int size_a = ABS(a->ob_size);
|
Py_ssize_t size_a = ABS(a->ob_size);
|
||||||
int size_b = ABS(b->ob_size);
|
Py_ssize_t size_b = ABS(b->ob_size);
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
z = _PyLong_New(size_a + size_b);
|
z = _PyLong_New(size_a + size_b);
|
||||||
if (z == NULL)
|
if (z == NULL)
|
||||||
|
@ -1840,11 +1918,11 @@ x_mul(PyLongObject *a, PyLongObject *b)
|
||||||
Returns 0 on success, -1 on failure.
|
Returns 0 on success, -1 on failure.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
kmul_split(PyLongObject *n, int size, PyLongObject **high, PyLongObject **low)
|
kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
|
||||||
{
|
{
|
||||||
PyLongObject *hi, *lo;
|
PyLongObject *hi, *lo;
|
||||||
int size_lo, size_hi;
|
Py_ssize_t size_lo, size_hi;
|
||||||
const int size_n = ABS(n->ob_size);
|
const Py_ssize_t size_n = ABS(n->ob_size);
|
||||||
|
|
||||||
size_lo = MIN(size_n, size);
|
size_lo = MIN(size_n, size);
|
||||||
size_hi = size_n - size_lo;
|
size_hi = size_n - size_lo;
|
||||||
|
@ -1873,16 +1951,16 @@ static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
k_mul(PyLongObject *a, PyLongObject *b)
|
k_mul(PyLongObject *a, PyLongObject *b)
|
||||||
{
|
{
|
||||||
int asize = ABS(a->ob_size);
|
Py_ssize_t asize = ABS(a->ob_size);
|
||||||
int bsize = ABS(b->ob_size);
|
Py_ssize_t bsize = ABS(b->ob_size);
|
||||||
PyLongObject *ah = NULL;
|
PyLongObject *ah = NULL;
|
||||||
PyLongObject *al = NULL;
|
PyLongObject *al = NULL;
|
||||||
PyLongObject *bh = NULL;
|
PyLongObject *bh = NULL;
|
||||||
PyLongObject *bl = NULL;
|
PyLongObject *bl = NULL;
|
||||||
PyLongObject *ret = NULL;
|
PyLongObject *ret = NULL;
|
||||||
PyLongObject *t1, *t2, *t3;
|
PyLongObject *t1, *t2, *t3;
|
||||||
int shift; /* the number of digits we split off */
|
Py_ssize_t shift; /* the number of digits we split off */
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
/* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
|
/* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
|
||||||
* Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
|
* Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
|
||||||
|
@ -2094,9 +2172,9 @@ ah*bh and al*bl too.
|
||||||
static PyLongObject *
|
static PyLongObject *
|
||||||
k_lopsided_mul(PyLongObject *a, PyLongObject *b)
|
k_lopsided_mul(PyLongObject *a, PyLongObject *b)
|
||||||
{
|
{
|
||||||
const int asize = ABS(a->ob_size);
|
const Py_ssize_t asize = ABS(a->ob_size);
|
||||||
int bsize = ABS(b->ob_size);
|
Py_ssize_t bsize = ABS(b->ob_size);
|
||||||
int nbdone; /* # of b digits already multiplied */
|
Py_ssize_t nbdone; /* # of b digits already multiplied */
|
||||||
PyLongObject *ret;
|
PyLongObject *ret;
|
||||||
PyLongObject *bslice = NULL;
|
PyLongObject *bslice = NULL;
|
||||||
|
|
||||||
|
@ -2117,7 +2195,7 @@ k_lopsided_mul(PyLongObject *a, PyLongObject *b)
|
||||||
nbdone = 0;
|
nbdone = 0;
|
||||||
while (bsize > 0) {
|
while (bsize > 0) {
|
||||||
PyLongObject *product;
|
PyLongObject *product;
|
||||||
const int nbtouse = MIN(bsize, asize);
|
const Py_ssize_t nbtouse = MIN(bsize, asize);
|
||||||
|
|
||||||
/* Multiply the next slice of b by a. */
|
/* Multiply the next slice of b by a. */
|
||||||
memcpy(bslice->ob_digit, b->ob_digit + nbdone,
|
memcpy(bslice->ob_digit, b->ob_digit + nbdone,
|
||||||
|
@ -2353,7 +2431,7 @@ long_pow(PyObject *v, PyObject *w, PyObject *x)
|
||||||
int negativeOutput = 0; /* if x<0 return negative output */
|
int negativeOutput = 0; /* if x<0 return negative output */
|
||||||
|
|
||||||
PyLongObject *z = NULL; /* accumulated result */
|
PyLongObject *z = NULL; /* accumulated result */
|
||||||
int i, j, k; /* counters */
|
Py_ssize_t i, j, k; /* counters */
|
||||||
PyLongObject *temp = NULL;
|
PyLongObject *temp = NULL;
|
||||||
|
|
||||||
/* 5-ary values. If the exponent is large enough, table is
|
/* 5-ary values. If the exponent is large enough, table is
|
||||||
|
@ -2597,7 +2675,7 @@ long_rshift(PyLongObject *v, PyLongObject *w)
|
||||||
PyLongObject *a, *b;
|
PyLongObject *a, *b;
|
||||||
PyLongObject *z = NULL;
|
PyLongObject *z = NULL;
|
||||||
long shiftby;
|
long shiftby;
|
||||||
int newsize, wordshift, loshift, hishift, i, j;
|
Py_ssize_t newsize, wordshift, loshift, hishift, i, j;
|
||||||
digit lomask, himask;
|
digit lomask, himask;
|
||||||
|
|
||||||
CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
|
CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
|
||||||
|
@ -2664,7 +2742,7 @@ long_lshift(PyObject *v, PyObject *w)
|
||||||
PyLongObject *a, *b;
|
PyLongObject *a, *b;
|
||||||
PyLongObject *z = NULL;
|
PyLongObject *z = NULL;
|
||||||
long shiftby;
|
long shiftby;
|
||||||
int oldsize, newsize, wordshift, remshift, i, j;
|
Py_ssize_t oldsize, newsize, wordshift, remshift, i, j;
|
||||||
twodigits accum;
|
twodigits accum;
|
||||||
|
|
||||||
CONVERT_BINOP(v, w, &a, &b);
|
CONVERT_BINOP(v, w, &a, &b);
|
||||||
|
@ -2723,7 +2801,7 @@ long_bitwise(PyLongObject *a,
|
||||||
{
|
{
|
||||||
digit maska, maskb; /* 0 or MASK */
|
digit maska, maskb; /* 0 or MASK */
|
||||||
int negz;
|
int negz;
|
||||||
int size_a, size_b, size_z;
|
Py_ssize_t size_a, size_b, size_z;
|
||||||
PyLongObject *z;
|
PyLongObject *z;
|
||||||
int i;
|
int i;
|
||||||
digit diga, digb;
|
digit diga, digb;
|
||||||
|
@ -2965,7 +3043,7 @@ static PyObject *
|
||||||
long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
PyLongObject *tmp, *new;
|
PyLongObject *tmp, *new;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
assert(PyType_IsSubtype(type, &PyLong_Type));
|
assert(PyType_IsSubtype(type, &PyLong_Type));
|
||||||
tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
|
tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
|
||||||
|
|
|
@ -65,7 +65,7 @@ PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||||
PyCFunctionObject* f = (PyCFunctionObject*)func;
|
PyCFunctionObject* f = (PyCFunctionObject*)func;
|
||||||
PyCFunction meth = PyCFunction_GET_FUNCTION(func);
|
PyCFunction meth = PyCFunction_GET_FUNCTION(func);
|
||||||
PyObject *self = PyCFunction_GET_SELF(func);
|
PyObject *self = PyCFunction_GET_SELF(func);
|
||||||
int size;
|
long size;
|
||||||
|
|
||||||
switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
|
switch (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST)) {
|
||||||
case METH_VARARGS:
|
case METH_VARARGS:
|
||||||
|
@ -81,7 +81,7 @@ PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
return (*meth)(self, NULL);
|
return (*meth)(self, NULL);
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"%.200s() takes no arguments (%d given)",
|
"%.200s() takes no arguments (%ld given)",
|
||||||
f->m_ml->ml_name, size);
|
f->m_ml->ml_name, size);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw)
|
||||||
if (size == 1)
|
if (size == 1)
|
||||||
return (*meth)(self, PyTuple_GET_ITEM(arg, 0));
|
return (*meth)(self, PyTuple_GET_ITEM(arg, 0));
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"%.200s() takes exactly one argument (%d given)",
|
"%.200s() takes exactly one argument (%ld given)",
|
||||||
f->m_ml->ml_name, size);
|
f->m_ml->ml_name, size);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ _PyModule_Clear(PyObject *m)
|
||||||
None, rather than deleting them from the dictionary, to
|
None, rather than deleting them from the dictionary, to
|
||||||
avoid rehashing the dictionary (to some extent). */
|
avoid rehashing the dictionary (to some extent). */
|
||||||
|
|
||||||
int pos;
|
Py_ssize_t pos;
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
PyObject *d;
|
PyObject *d;
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ PyObject_Init(PyObject *op, PyTypeObject *tp)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyVarObject *
|
PyVarObject *
|
||||||
PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, int size)
|
PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
if (op == NULL)
|
if (op == NULL)
|
||||||
return (PyVarObject *) PyErr_NoMemory();
|
return (PyVarObject *) PyErr_NoMemory();
|
||||||
|
@ -192,7 +192,7 @@ _PyObject_New(PyTypeObject *tp)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyVarObject *
|
PyVarObject *
|
||||||
_PyObject_NewVar(PyTypeObject *tp, int nitems)
|
_PyObject_NewVar(PyTypeObject *tp, Py_ssize_t nitems)
|
||||||
{
|
{
|
||||||
PyVarObject *op;
|
PyVarObject *op;
|
||||||
const size_t size = _PyObject_VAR_SIZE(tp, nitems);
|
const size_t size = _PyObject_VAR_SIZE(tp, nitems);
|
||||||
|
@ -1175,7 +1175,7 @@ _PyObject_GetDictPtr(PyObject *obj)
|
||||||
if (dictoffset == 0)
|
if (dictoffset == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (dictoffset < 0) {
|
if (dictoffset < 0) {
|
||||||
int tsize;
|
Py_ssize_t tsize;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
tsize = ((PyVarObject *)obj)->ob_size;
|
tsize = ((PyVarObject *)obj)->ob_size;
|
||||||
|
@ -1237,7 +1237,7 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
|
||||||
|
|
||||||
/* Inline _PyType_Lookup */
|
/* Inline _PyType_Lookup */
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *mro, *base, *dict;
|
PyObject *mro, *base, *dict;
|
||||||
|
|
||||||
/* Look in tp_dict of types in MRO */
|
/* Look in tp_dict of types in MRO */
|
||||||
|
@ -1278,7 +1278,7 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
|
||||||
if (dictoffset != 0) {
|
if (dictoffset != 0) {
|
||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
if (dictoffset < 0) {
|
if (dictoffset < 0) {
|
||||||
int tsize;
|
Py_ssize_t tsize;
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
tsize = ((PyVarObject *)obj)->ob_size;
|
tsize = ((PyVarObject *)obj)->ob_size;
|
||||||
|
@ -1414,7 +1414,7 @@ PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
|
||||||
int
|
int
|
||||||
PyObject_IsTrue(PyObject *v)
|
PyObject_IsTrue(PyObject *v)
|
||||||
{
|
{
|
||||||
int res;
|
Py_ssize_t res;
|
||||||
if (v == Py_True)
|
if (v == Py_True)
|
||||||
return 1;
|
return 1;
|
||||||
if (v == Py_False)
|
if (v == Py_False)
|
||||||
|
@ -1432,7 +1432,8 @@ PyObject_IsTrue(PyObject *v)
|
||||||
res = (*v->ob_type->tp_as_sequence->sq_length)(v);
|
res = (*v->ob_type->tp_as_sequence->sq_length)(v);
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
return (res > 0) ? 1 : res;
|
/* if it is negative, it should be either -1 or -2 */
|
||||||
|
return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* equivalent of 'not v'
|
/* equivalent of 'not v'
|
||||||
|
@ -1556,7 +1557,7 @@ merge_class_dict(PyObject* dict, PyObject* aclass)
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
else {
|
else {
|
||||||
/* We have no guarantee that bases is a real tuple */
|
/* We have no guarantee that bases is a real tuple */
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
n = PySequence_Size(bases); /* This better be right */
|
n = PySequence_Size(bases); /* This better be right */
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
PyErr_Clear();
|
PyErr_Clear();
|
||||||
|
@ -1949,7 +1950,7 @@ PyTypeObject *_Py_cobject_hack = &PyCObject_Type;
|
||||||
|
|
||||||
|
|
||||||
/* Hack to force loading of abstract.o */
|
/* Hack to force loading of abstract.o */
|
||||||
int (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
|
Py_ssize_t (*_Py_abstract_hack)(PyObject *) = PyObject_Size;
|
||||||
|
|
||||||
|
|
||||||
/* Python's malloc wrappers (see pymem.h) */
|
/* Python's malloc wrappers (see pymem.h) */
|
||||||
|
@ -1992,7 +1993,7 @@ Py_ReprEnter(PyObject *obj)
|
||||||
{
|
{
|
||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
PyObject *list;
|
PyObject *list;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
dict = PyThreadState_GetDict();
|
dict = PyThreadState_GetDict();
|
||||||
if (dict == NULL)
|
if (dict == NULL)
|
||||||
|
@ -2020,7 +2021,7 @@ Py_ReprLeave(PyObject *obj)
|
||||||
{
|
{
|
||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
PyObject *list;
|
PyObject *list;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
dict = PyThreadState_GetDict();
|
dict = PyThreadState_GetDict();
|
||||||
if (dict == NULL)
|
if (dict == NULL)
|
||||||
|
|
|
@ -541,8 +541,8 @@ error:
|
||||||
/* This is only useful when running memory debuggers such as
|
/* This is only useful when running memory debuggers such as
|
||||||
* Purify or Valgrind. Uncomment to use.
|
* Purify or Valgrind. Uncomment to use.
|
||||||
*
|
*
|
||||||
#define Py_USING_MEMORY_DEBUGGER
|
|
||||||
*/
|
*/
|
||||||
|
#define Py_USING_MEMORY_DEBUGGER
|
||||||
|
|
||||||
#ifdef Py_USING_MEMORY_DEBUGGER
|
#ifdef Py_USING_MEMORY_DEBUGGER
|
||||||
|
|
||||||
|
@ -816,7 +816,7 @@ PyObject_Realloc(void *p, size_t nbytes)
|
||||||
{
|
{
|
||||||
void *bp;
|
void *bp;
|
||||||
poolp pool;
|
poolp pool;
|
||||||
uint size;
|
size_t size;
|
||||||
|
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return PyObject_Malloc(nbytes);
|
return PyObject_Malloc(nbytes);
|
||||||
|
@ -1005,6 +1005,8 @@ _PyObject_DebugMalloc(size_t nbytes)
|
||||||
|
|
||||||
bumpserialno();
|
bumpserialno();
|
||||||
total = nbytes + 16;
|
total = nbytes + 16;
|
||||||
|
#if SIZEOF_SIZE_T < 8
|
||||||
|
/* XXX do this check only on 32-bit machines */
|
||||||
if (total < nbytes || (total >> 31) > 1) {
|
if (total < nbytes || (total >> 31) > 1) {
|
||||||
/* overflow, or we can't represent it in 4 bytes */
|
/* overflow, or we can't represent it in 4 bytes */
|
||||||
/* Obscure: can't do (total >> 32) != 0 instead, because
|
/* Obscure: can't do (total >> 32) != 0 instead, because
|
||||||
|
@ -1013,12 +1015,13 @@ _PyObject_DebugMalloc(size_t nbytes)
|
||||||
size_t is an unsigned type. */
|
size_t is an unsigned type. */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
p = (uchar *)PyObject_Malloc(total);
|
p = (uchar *)PyObject_Malloc(total);
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
write4(p, nbytes);
|
write4(p, (ulong)nbytes);
|
||||||
p[4] = p[5] = p[6] = p[7] = FORBIDDENBYTE;
|
p[4] = p[5] = p[6] = p[7] = FORBIDDENBYTE;
|
||||||
|
|
||||||
if (nbytes > 0)
|
if (nbytes > 0)
|
||||||
|
@ -1081,7 +1084,7 @@ _PyObject_DebugRealloc(void *p, size_t nbytes)
|
||||||
if (q == NULL)
|
if (q == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
write4(q, nbytes);
|
write4(q, (ulong)nbytes);
|
||||||
assert(q[4] == FORBIDDENBYTE &&
|
assert(q[4] == FORBIDDENBYTE &&
|
||||||
q[5] == FORBIDDENBYTE &&
|
q[5] == FORBIDDENBYTE &&
|
||||||
q[6] == FORBIDDENBYTE &&
|
q[6] == FORBIDDENBYTE &&
|
||||||
|
|
|
@ -91,27 +91,27 @@ generates the numbers in the range on demand. For looping, this is \n\
|
||||||
slightly faster than range() and more memory efficient.");
|
slightly faster than range() and more memory efficient.");
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
range_item(rangeobject *r, int i)
|
range_item(rangeobject *r, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (i < 0 || i >= r->len) {
|
if (i < 0 || i >= r->len) {
|
||||||
PyErr_SetString(PyExc_IndexError,
|
PyErr_SetString(PyExc_IndexError,
|
||||||
"xrange object index out of range");
|
"xrange object index out of range");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong(r->start + (i % r->len) * r->step);
|
return PyInt_FromSsize_t(r->start + (i % r->len) * r->step);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
range_length(rangeobject *r)
|
range_length(rangeobject *r)
|
||||||
{
|
{
|
||||||
#if LONG_MAX != INT_MAX
|
#if LONG_MAX != INT_MAX /* XXX ssize_t_max */
|
||||||
if (r->len > INT_MAX) {
|
if (r->len > INT_MAX) {
|
||||||
PyErr_SetString(PyExc_ValueError,
|
PyErr_SetString(PyExc_ValueError,
|
||||||
"xrange object size cannot be reported");
|
"xrange object size cannot be reported");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return (int)(r->len);
|
return (Py_ssize_t)(r->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -137,10 +137,10 @@ range_repr(rangeobject *r)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods range_as_sequence = {
|
static PySequenceMethods range_as_sequence = {
|
||||||
(inquiry)range_length, /* sq_length */
|
(lenfunc)range_length, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
0, /* sq_repeat */
|
0, /* sq_repeat */
|
||||||
(intargfunc)range_item, /* sq_item */
|
(ssizeargfunc)range_item, /* sq_item */
|
||||||
0, /* sq_slice */
|
0, /* sq_slice */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -51,8 +51,8 @@ NULL if the rich comparison returns an error.
|
||||||
static setentry *
|
static setentry *
|
||||||
set_lookkey(PySetObject *so, PyObject *key, register long hash)
|
set_lookkey(PySetObject *so, PyObject *key, register long hash)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register unsigned int perturb;
|
register size_t perturb;
|
||||||
register setentry *freeslot;
|
register setentry *freeslot;
|
||||||
register unsigned int mask = so->mask;
|
register unsigned int mask = so->mask;
|
||||||
setentry *table = so->table;
|
setentry *table = so->table;
|
||||||
|
@ -129,8 +129,8 @@ set_lookkey(PySetObject *so, PyObject *key, register long hash)
|
||||||
static setentry *
|
static setentry *
|
||||||
set_lookkey_string(PySetObject *so, PyObject *key, register long hash)
|
set_lookkey_string(PySetObject *so, PyObject *key, register long hash)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register unsigned int perturb;
|
register size_t perturb;
|
||||||
register setentry *freeslot;
|
register setentry *freeslot;
|
||||||
register unsigned int mask = so->mask;
|
register unsigned int mask = so->mask;
|
||||||
setentry *table = so->table;
|
setentry *table = so->table;
|
||||||
|
@ -468,9 +468,10 @@ set_clear_internal(PySetObject *so)
|
||||||
* mutates the table.
|
* mutates the table.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
set_next(PySetObject *so, int *pos_ptr, setentry **entry_ptr)
|
set_next(PySetObject *so, Py_ssize_t *pos_ptr, setentry **entry_ptr)
|
||||||
{
|
{
|
||||||
register int i, mask;
|
Py_ssize_t i;
|
||||||
|
int mask;
|
||||||
register setentry *table;
|
register setentry *table;
|
||||||
|
|
||||||
assert (PyAnySet_Check(so));
|
assert (PyAnySet_Check(so));
|
||||||
|
@ -517,7 +518,7 @@ static int
|
||||||
set_tp_print(PySetObject *so, FILE *fp, int flags)
|
set_tp_print(PySetObject *so, FILE *fp, int flags)
|
||||||
{
|
{
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
int pos=0;
|
Py_ssize_t pos=0;
|
||||||
char *emit = ""; /* No separator emitted on first pass */
|
char *emit = ""; /* No separator emitted on first pass */
|
||||||
char *separator = ", ";
|
char *separator = ", ";
|
||||||
|
|
||||||
|
@ -551,7 +552,7 @@ set_repr(PySetObject *so)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
set_len(PyObject *so)
|
set_len(PyObject *so)
|
||||||
{
|
{
|
||||||
return ((PySetObject *)so)->used;
|
return ((PySetObject *)so)->used;
|
||||||
|
@ -673,7 +674,7 @@ PyDoc_STRVAR(pop_doc, "Remove and return an arbitrary set element.");
|
||||||
static int
|
static int
|
||||||
set_traverse(PySetObject *so, visitproc visit, void *arg)
|
set_traverse(PySetObject *so, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
|
|
||||||
while (set_next(so, &pos, &entry))
|
while (set_next(so, &pos, &entry))
|
||||||
|
@ -687,7 +688,7 @@ frozenset_hash(PyObject *self)
|
||||||
PySetObject *so = (PySetObject *)self;
|
PySetObject *so = (PySetObject *)self;
|
||||||
long h, hash = 1927868237L;
|
long h, hash = 1927868237L;
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
if (so->hash != -1)
|
if (so->hash != -1)
|
||||||
return so->hash;
|
return so->hash;
|
||||||
|
@ -752,7 +753,7 @@ setiter_dealloc(setiterobject *si)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
setiter_len(setiterobject *si)
|
setiter_len(setiterobject *si)
|
||||||
{
|
{
|
||||||
int len = 0;
|
long len = 0;
|
||||||
if (si->si_set != NULL && si->si_used == si->si_set->used)
|
if (si->si_set != NULL && si->si_used == si->si_set->used)
|
||||||
len = si->len;
|
len = si->len;
|
||||||
return PyInt_FromLong(len);
|
return PyInt_FromLong(len);
|
||||||
|
@ -847,7 +848,7 @@ set_update_internal(PySetObject *so, PyObject *other)
|
||||||
|
|
||||||
if (PyDict_Check(other)) {
|
if (PyDict_Check(other)) {
|
||||||
PyObject *value;
|
PyObject *value;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
while (PyDict_Next(other, &pos, &key, &value)) {
|
while (PyDict_Next(other, &pos, &key, &value)) {
|
||||||
if (set_add_key(so, key) == -1)
|
if (set_add_key(so, key) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1121,7 +1122,7 @@ set_intersection(PySetObject *so, PyObject *other)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (PyAnySet_Check(other)) {
|
if (PyAnySet_Check(other)) {
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
|
|
||||||
if (PySet_GET_SIZE(other) > PySet_GET_SIZE(so)) {
|
if (PySet_GET_SIZE(other) > PySet_GET_SIZE(so)) {
|
||||||
|
@ -1222,7 +1223,7 @@ set_difference_update_internal(PySetObject *so, PyObject *other)
|
||||||
|
|
||||||
if (PyAnySet_Check(other)) {
|
if (PyAnySet_Check(other)) {
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
while (set_next((PySetObject *)other, &pos, &entry))
|
while (set_next((PySetObject *)other, &pos, &entry))
|
||||||
set_discard_entry(so, entry);
|
set_discard_entry(so, entry);
|
||||||
|
@ -1266,7 +1267,7 @@ set_difference(PySetObject *so, PyObject *other)
|
||||||
{
|
{
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
if (!PyAnySet_Check(other) && !PyDict_Check(other)) {
|
if (!PyAnySet_Check(other) && !PyDict_Check(other)) {
|
||||||
result = set_copy(so);
|
result = set_copy(so);
|
||||||
|
@ -1340,7 +1341,7 @@ set_symmetric_difference_update(PySetObject *so, PyObject *other)
|
||||||
{
|
{
|
||||||
PySetObject *otherset;
|
PySetObject *otherset;
|
||||||
PyObject *key;
|
PyObject *key;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
|
|
||||||
if ((PyObject *)so == other)
|
if ((PyObject *)so == other)
|
||||||
|
@ -1442,7 +1443,7 @@ static PyObject *
|
||||||
set_issubset(PySetObject *so, PyObject *other)
|
set_issubset(PySetObject *so, PyObject *other)
|
||||||
{
|
{
|
||||||
setentry *entry;
|
setentry *entry;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
if (!PyAnySet_Check(other)) {
|
if (!PyAnySet_Check(other)) {
|
||||||
PyObject *tmp, *result;
|
PyObject *tmp, *result;
|
||||||
|
@ -1687,7 +1688,7 @@ set_init(PySetObject *self, PyObject *args, PyObject *kwds)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods set_as_sequence = {
|
static PySequenceMethods set_as_sequence = {
|
||||||
(inquiry)set_len, /* sq_length */
|
(lenfunc)set_len, /* sq_length */
|
||||||
0, /* sq_concat */
|
0, /* sq_concat */
|
||||||
0, /* sq_repeat */
|
0, /* sq_repeat */
|
||||||
0, /* sq_item */
|
0, /* sq_item */
|
||||||
|
|
|
@ -80,9 +80,10 @@ PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PySlice_GetIndices(PySliceObject *r, int length,
|
PySlice_GetIndices(PySliceObject *r, Py_ssize_t length,
|
||||||
int *start, int *stop, int *step)
|
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
|
||||||
{
|
{
|
||||||
|
/* XXX support long ints */
|
||||||
if (r->step == Py_None) {
|
if (r->step == Py_None) {
|
||||||
*step = 1;
|
*step = 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -110,12 +111,12 @@ PySlice_GetIndices(PySliceObject *r, int length,
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PySlice_GetIndicesEx(PySliceObject *r, int length,
|
PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
|
||||||
int *start, int *stop, int *step, int *slicelength)
|
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)
|
||||||
{
|
{
|
||||||
/* this is harder to get right than you might think */
|
/* this is harder to get right than you might think */
|
||||||
|
|
||||||
int defstart, defstop;
|
Py_ssize_t defstart, defstop;
|
||||||
|
|
||||||
if (r->step == Py_None) {
|
if (r->step == Py_None) {
|
||||||
*step = 1;
|
*step = 1;
|
||||||
|
@ -230,7 +231,7 @@ static PyMemberDef slice_members[] = {
|
||||||
static PyObject*
|
static PyObject*
|
||||||
slice_indices(PySliceObject* self, PyObject* len)
|
slice_indices(PySliceObject* self, PyObject* len)
|
||||||
{
|
{
|
||||||
int ilen, start, stop, step, slicelength;
|
Py_ssize_t ilen, start, stop, step, slicelength;
|
||||||
|
|
||||||
ilen = PyInt_AsLong(len);
|
ilen = PyInt_AsLong(len);
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ static PyObject *interned;
|
||||||
parameter (for PyString_FromString()).
|
parameter (for PyString_FromString()).
|
||||||
*/
|
*/
|
||||||
PyObject *
|
PyObject *
|
||||||
PyString_FromStringAndSize(const char *str, int size)
|
PyString_FromStringAndSize(const char *str, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
register PyStringObject *op;
|
register PyStringObject *op;
|
||||||
assert(size >= 0);
|
assert(size >= 0);
|
||||||
|
@ -154,7 +154,7 @@ PyObject *
|
||||||
PyString_FromFormatV(const char *format, va_list vargs)
|
PyString_FromFormatV(const char *format, va_list vargs)
|
||||||
{
|
{
|
||||||
va_list count;
|
va_list count;
|
||||||
int n = 0;
|
Py_ssize_t n = 0;
|
||||||
const char* f;
|
const char* f;
|
||||||
char *s;
|
char *s;
|
||||||
PyObject* string;
|
PyObject* string;
|
||||||
|
@ -235,7 +235,8 @@ PyString_FromFormatV(const char *format, va_list vargs)
|
||||||
for (f = format; *f; f++) {
|
for (f = format; *f; f++) {
|
||||||
if (*f == '%') {
|
if (*f == '%') {
|
||||||
const char* p = f++;
|
const char* p = f++;
|
||||||
int i, longflag = 0;
|
Py_ssize_t i;
|
||||||
|
int longflag = 0;
|
||||||
/* parse the width.precision part (we're only
|
/* parse the width.precision part (we're only
|
||||||
interested in the precision value, if any) */
|
interested in the precision value, if any) */
|
||||||
n = 0;
|
n = 0;
|
||||||
|
@ -330,7 +331,7 @@ PyString_FromFormat(const char *format, ...)
|
||||||
|
|
||||||
|
|
||||||
PyObject *PyString_Decode(const char *s,
|
PyObject *PyString_Decode(const char *s,
|
||||||
int size,
|
Py_ssize_t size,
|
||||||
const char *encoding,
|
const char *encoding,
|
||||||
const char *errors)
|
const char *errors)
|
||||||
{
|
{
|
||||||
|
@ -410,7 +411,7 @@ PyObject *PyString_AsDecodedString(PyObject *str,
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *PyString_Encode(const char *s,
|
PyObject *PyString_Encode(const char *s,
|
||||||
int size,
|
Py_ssize_t size,
|
||||||
const char *encoding,
|
const char *encoding,
|
||||||
const char *errors)
|
const char *errors)
|
||||||
{
|
{
|
||||||
|
@ -519,16 +520,16 @@ string_dealloc(PyObject *op)
|
||||||
specified encoding. */
|
specified encoding. */
|
||||||
|
|
||||||
PyObject *PyString_DecodeEscape(const char *s,
|
PyObject *PyString_DecodeEscape(const char *s,
|
||||||
int len,
|
Py_ssize_t len,
|
||||||
const char *errors,
|
const char *errors,
|
||||||
int unicode,
|
Py_ssize_t unicode,
|
||||||
const char *recode_encoding)
|
const char *recode_encoding)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
char *p, *buf;
|
char *p, *buf;
|
||||||
const char *end;
|
const char *end;
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
int newlen = recode_encoding ? 4*len:len;
|
Py_ssize_t newlen = recode_encoding ? 4*len:len;
|
||||||
v = PyString_FromStringAndSize((char *)NULL, newlen);
|
v = PyString_FromStringAndSize((char *)NULL, newlen);
|
||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -542,7 +543,7 @@ PyObject *PyString_DecodeEscape(const char *s,
|
||||||
PyObject *u, *w;
|
PyObject *u, *w;
|
||||||
char *r;
|
char *r;
|
||||||
const char* t;
|
const char* t;
|
||||||
int rn;
|
Py_ssize_t rn;
|
||||||
t = s;
|
t = s;
|
||||||
/* Decode non-ASCII bytes as UTF-8. */
|
/* Decode non-ASCII bytes as UTF-8. */
|
||||||
while (t < end && (*t & 0x80)) t++;
|
while (t < end && (*t & 0x80)) t++;
|
||||||
|
@ -658,18 +659,18 @@ PyObject *PyString_DecodeEscape(const char *s,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (p-buf < newlen)
|
if (p-buf < newlen)
|
||||||
_PyString_Resize(&v, (int)(p - buf));
|
_PyString_Resize(&v, p - buf);
|
||||||
return v;
|
return v;
|
||||||
failed:
|
failed:
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
string_getsize(register PyObject *op)
|
string_getsize(register PyObject *op)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
if (PyString_AsStringAndSize(op, &s, &len))
|
if (PyString_AsStringAndSize(op, &s, &len))
|
||||||
return -1;
|
return -1;
|
||||||
return len;
|
return len;
|
||||||
|
@ -679,13 +680,13 @@ static /*const*/ char *
|
||||||
string_getbuffer(register PyObject *op)
|
string_getbuffer(register PyObject *op)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
if (PyString_AsStringAndSize(op, &s, &len))
|
if (PyString_AsStringAndSize(op, &s, &len))
|
||||||
return NULL;
|
return NULL;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PyString_Size(register PyObject *op)
|
PyString_Size(register PyObject *op)
|
||||||
{
|
{
|
||||||
if (!PyString_Check(op))
|
if (!PyString_Check(op))
|
||||||
|
@ -704,7 +705,7 @@ PyString_AsString(register PyObject *op)
|
||||||
int
|
int
|
||||||
PyString_AsStringAndSize(register PyObject *obj,
|
PyString_AsStringAndSize(register PyObject *obj,
|
||||||
register char **s,
|
register char **s,
|
||||||
register int *len)
|
register Py_ssize_t *len)
|
||||||
{
|
{
|
||||||
if (s == NULL) {
|
if (s == NULL) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -731,7 +732,7 @@ PyString_AsStringAndSize(register PyObject *obj,
|
||||||
*s = PyString_AS_STRING(obj);
|
*s = PyString_AS_STRING(obj);
|
||||||
if (len != NULL)
|
if (len != NULL)
|
||||||
*len = PyString_GET_SIZE(obj);
|
*len = PyString_GET_SIZE(obj);
|
||||||
else if ((int)strlen(*s) != PyString_GET_SIZE(obj)) {
|
else if (strlen(*s) != PyString_GET_SIZE(obj)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"expected string without null bytes");
|
"expected string without null bytes");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -744,7 +745,7 @@ PyString_AsStringAndSize(register PyObject *obj,
|
||||||
static int
|
static int
|
||||||
string_print(PyStringObject *op, FILE *fp, int flags)
|
string_print(PyStringObject *op, FILE *fp, int flags)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
char c;
|
char c;
|
||||||
int quote;
|
int quote;
|
||||||
|
|
||||||
|
@ -809,7 +810,7 @@ PyString_Repr(PyObject *obj, int smartquotes)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register char c;
|
register char c;
|
||||||
register char *p;
|
register char *p;
|
||||||
int quote;
|
int quote;
|
||||||
|
@ -876,7 +877,7 @@ string_str(PyObject *s)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
string_length(PyStringObject *a)
|
string_length(PyStringObject *a)
|
||||||
{
|
{
|
||||||
return a->ob_size;
|
return a->ob_size;
|
||||||
|
@ -885,7 +886,7 @@ string_length(PyStringObject *a)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_concat(register PyStringObject *a, register PyObject *bb)
|
string_concat(register PyStringObject *a, register PyObject *bb)
|
||||||
{
|
{
|
||||||
register unsigned int size;
|
register size_t size;
|
||||||
register PyStringObject *op;
|
register PyStringObject *op;
|
||||||
if (!PyString_Check(bb)) {
|
if (!PyString_Check(bb)) {
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
|
@ -909,6 +910,7 @@ string_concat(register PyStringObject *a, register PyObject *bb)
|
||||||
return (PyObject *)a;
|
return (PyObject *)a;
|
||||||
}
|
}
|
||||||
size = a->ob_size + b->ob_size;
|
size = a->ob_size + b->ob_size;
|
||||||
|
/* XXX check overflow */
|
||||||
/* Inline PyObject_NewVar */
|
/* Inline PyObject_NewVar */
|
||||||
op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
|
op = (PyStringObject *)PyObject_MALLOC(sizeof(PyStringObject) + size);
|
||||||
if (op == NULL)
|
if (op == NULL)
|
||||||
|
@ -916,19 +918,19 @@ string_concat(register PyStringObject *a, register PyObject *bb)
|
||||||
PyObject_INIT_VAR(op, &PyString_Type, size);
|
PyObject_INIT_VAR(op, &PyString_Type, size);
|
||||||
op->ob_shash = -1;
|
op->ob_shash = -1;
|
||||||
op->ob_sstate = SSTATE_NOT_INTERNED;
|
op->ob_sstate = SSTATE_NOT_INTERNED;
|
||||||
memcpy(op->ob_sval, a->ob_sval, (int) a->ob_size);
|
memcpy(op->ob_sval, a->ob_sval, a->ob_size);
|
||||||
memcpy(op->ob_sval + a->ob_size, b->ob_sval, (int) b->ob_size);
|
memcpy(op->ob_sval + a->ob_size, b->ob_sval, b->ob_size);
|
||||||
op->ob_sval[size] = '\0';
|
op->ob_sval[size] = '\0';
|
||||||
return (PyObject *) op;
|
return (PyObject *) op;
|
||||||
#undef b
|
#undef b
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_repeat(register PyStringObject *a, register int n)
|
string_repeat(register PyStringObject *a, register Py_ssize_t n)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register int j;
|
register Py_ssize_t j;
|
||||||
register int size;
|
register Py_ssize_t size;
|
||||||
register PyStringObject *op;
|
register PyStringObject *op;
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
|
@ -966,8 +968,8 @@ string_repeat(register PyStringObject *a, register int n)
|
||||||
}
|
}
|
||||||
i = 0;
|
i = 0;
|
||||||
if (i < size) {
|
if (i < size) {
|
||||||
memcpy(op->ob_sval, a->ob_sval, (int) a->ob_size);
|
memcpy(op->ob_sval, a->ob_sval, a->ob_size);
|
||||||
i = (int) a->ob_size;
|
i = a->ob_size;
|
||||||
}
|
}
|
||||||
while (i < size) {
|
while (i < size) {
|
||||||
j = (i <= size-i) ? i : size-i;
|
j = (i <= size-i) ? i : size-i;
|
||||||
|
@ -980,7 +982,8 @@ string_repeat(register PyStringObject *a, register int n)
|
||||||
/* String slice a[i:j] consists of characters a[i] ... a[j-1] */
|
/* String slice a[i:j] consists of characters a[i] ... a[j-1] */
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_slice(register PyStringObject *a, register int i, register int j)
|
string_slice(register PyStringObject *a, register Py_ssize_t i,
|
||||||
|
register Py_ssize_t j)
|
||||||
/* j -- may be negative! */
|
/* j -- may be negative! */
|
||||||
{
|
{
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
@ -996,7 +999,7 @@ string_slice(register PyStringObject *a, register int i, register int j)
|
||||||
}
|
}
|
||||||
if (j < i)
|
if (j < i)
|
||||||
j = i;
|
j = i;
|
||||||
return PyString_FromStringAndSize(a->ob_sval + i, (int) (j-i));
|
return PyString_FromStringAndSize(a->ob_sval + i, j-i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1005,7 +1008,7 @@ string_contains(PyObject *a, PyObject *el)
|
||||||
char *s = PyString_AS_STRING(a);
|
char *s = PyString_AS_STRING(a);
|
||||||
const char *sub = PyString_AS_STRING(el);
|
const char *sub = PyString_AS_STRING(el);
|
||||||
char *last;
|
char *last;
|
||||||
int len_sub = PyString_GET_SIZE(el);
|
Py_ssize_t len_sub = PyString_GET_SIZE(el);
|
||||||
int shortsub;
|
int shortsub;
|
||||||
char firstchar, lastchar;
|
char firstchar, lastchar;
|
||||||
|
|
||||||
|
@ -1047,7 +1050,7 @@ string_contains(PyObject *a, PyObject *el)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_item(PyStringObject *a, register int i)
|
string_item(PyStringObject *a, register Py_ssize_t i)
|
||||||
{
|
{
|
||||||
PyObject *v;
|
PyObject *v;
|
||||||
char *pchar;
|
char *pchar;
|
||||||
|
@ -1072,8 +1075,8 @@ static PyObject*
|
||||||
string_richcompare(PyStringObject *a, PyStringObject *b, int op)
|
string_richcompare(PyStringObject *a, PyStringObject *b, int op)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int len_a, len_b;
|
Py_ssize_t len_a, len_b;
|
||||||
int min_len;
|
Py_ssize_t min_len;
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
|
|
||||||
/* Make sure both arguments are strings. */
|
/* Make sure both arguments are strings. */
|
||||||
|
@ -1145,7 +1148,7 @@ _PyString_Eq(PyObject *o1, PyObject *o2)
|
||||||
static long
|
static long
|
||||||
string_hash(PyStringObject *a)
|
string_hash(PyStringObject *a)
|
||||||
{
|
{
|
||||||
register int len;
|
register Py_ssize_t len;
|
||||||
register unsigned char *p;
|
register unsigned char *p;
|
||||||
register long x;
|
register long x;
|
||||||
|
|
||||||
|
@ -1166,14 +1169,8 @@ string_hash(PyStringObject *a)
|
||||||
static PyObject*
|
static PyObject*
|
||||||
string_subscript(PyStringObject* self, PyObject* item)
|
string_subscript(PyStringObject* self, PyObject* item)
|
||||||
{
|
{
|
||||||
if (PyInt_Check(item)) {
|
if (PyInt_Check(item) || PyLong_Check(item)) {
|
||||||
long i = PyInt_AS_LONG(item);
|
Py_ssize_t i = PyInt_AsSsize_t(item);
|
||||||
if (i < 0)
|
|
||||||
i += PyString_GET_SIZE(self);
|
|
||||||
return string_item(self,i);
|
|
||||||
}
|
|
||||||
else if (PyLong_Check(item)) {
|
|
||||||
long i = PyLong_AsLong(item);
|
|
||||||
if (i == -1 && PyErr_Occurred())
|
if (i == -1 && PyErr_Occurred())
|
||||||
return NULL;
|
return NULL;
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
@ -1181,7 +1178,7 @@ string_subscript(PyStringObject* self, PyObject* item)
|
||||||
return string_item(self,i);
|
return string_item(self,i);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
int start, stop, step, slicelength, cur, i;
|
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||||
char* source_buf;
|
char* source_buf;
|
||||||
char* result_buf;
|
char* result_buf;
|
||||||
PyObject* result;
|
PyObject* result;
|
||||||
|
@ -1219,8 +1216,8 @@ string_subscript(PyStringObject* self, PyObject* item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
string_buffer_getreadbuf(PyStringObject *self, int index, const void **ptr)
|
string_buffer_getreadbuf(PyStringObject *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
@ -1231,24 +1228,24 @@ string_buffer_getreadbuf(PyStringObject *self, int index, const void **ptr)
|
||||||
return self->ob_size;
|
return self->ob_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
string_buffer_getwritebuf(PyStringObject *self, int index, const void **ptr)
|
string_buffer_getwritebuf(PyStringObject *self, Py_ssize_t index, const void **ptr)
|
||||||
{
|
{
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"Cannot use string as modifiable buffer");
|
"Cannot use string as modifiable buffer");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
string_buffer_getsegcount(PyStringObject *self, int *lenp)
|
string_buffer_getsegcount(PyStringObject *self, Py_ssize_t *lenp)
|
||||||
{
|
{
|
||||||
if ( lenp )
|
if ( lenp )
|
||||||
*lenp = self->ob_size;
|
*lenp = self->ob_size;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
string_buffer_getcharbuf(PyStringObject *self, int index, const char **ptr)
|
string_buffer_getcharbuf(PyStringObject *self, Py_ssize_t index, const char **ptr)
|
||||||
{
|
{
|
||||||
if ( index != 0 ) {
|
if ( index != 0 ) {
|
||||||
PyErr_SetString(PyExc_SystemError,
|
PyErr_SetString(PyExc_SystemError,
|
||||||
|
@ -1260,27 +1257,27 @@ string_buffer_getcharbuf(PyStringObject *self, int index, const char **ptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods string_as_sequence = {
|
static PySequenceMethods string_as_sequence = {
|
||||||
(inquiry)string_length, /*sq_length*/
|
(lenfunc)string_length, /*sq_length*/
|
||||||
(binaryfunc)string_concat, /*sq_concat*/
|
(binaryfunc)string_concat, /*sq_concat*/
|
||||||
(intargfunc)string_repeat, /*sq_repeat*/
|
(ssizeargfunc)string_repeat, /*sq_repeat*/
|
||||||
(intargfunc)string_item, /*sq_item*/
|
(ssizeargfunc)string_item, /*sq_item*/
|
||||||
(intintargfunc)string_slice, /*sq_slice*/
|
(ssizessizeargfunc)string_slice, /*sq_slice*/
|
||||||
0, /*sq_ass_item*/
|
0, /*sq_ass_item*/
|
||||||
0, /*sq_ass_slice*/
|
0, /*sq_ass_slice*/
|
||||||
(objobjproc)string_contains /*sq_contains*/
|
(objobjproc)string_contains /*sq_contains*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyMappingMethods string_as_mapping = {
|
static PyMappingMethods string_as_mapping = {
|
||||||
(inquiry)string_length,
|
(lenfunc)string_length,
|
||||||
(binaryfunc)string_subscript,
|
(binaryfunc)string_subscript,
|
||||||
0,
|
0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyBufferProcs string_as_buffer = {
|
static PyBufferProcs string_as_buffer = {
|
||||||
(getreadbufferproc)string_buffer_getreadbuf,
|
(readbufferproc)string_buffer_getreadbuf,
|
||||||
(getwritebufferproc)string_buffer_getwritebuf,
|
(writebufferproc)string_buffer_getwritebuf,
|
||||||
(getsegcountproc)string_buffer_getsegcount,
|
(segcountproc)string_buffer_getsegcount,
|
||||||
(getcharbufferproc)string_buffer_getcharbuf,
|
(charbufferproc)string_buffer_getcharbuf,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1319,9 +1316,9 @@ static const char *stripformat[] = {"|O:lstrip", "|O:rstrip", "|O:strip"};
|
||||||
Py_DECREF(str);
|
Py_DECREF(str);
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
split_whitespace(const char *s, int len, int maxsplit)
|
split_whitespace(const char *s, Py_ssize_t len, int maxsplit)
|
||||||
{
|
{
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
PyObject *list = PyList_New(0);
|
PyObject *list = PyList_New(0);
|
||||||
|
|
||||||
|
@ -1353,9 +1350,9 @@ split_whitespace(const char *s, int len, int maxsplit)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
split_char(const char *s, int len, char ch, int maxcount)
|
split_char(const char *s, Py_ssize_t len, char ch, int maxcount)
|
||||||
{
|
{
|
||||||
register int i, j;
|
register Py_ssize_t i, j;
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
PyObject *list = PyList_New(0);
|
PyObject *list = PyList_New(0);
|
||||||
|
|
||||||
|
@ -1392,7 +1389,8 @@ whitespace string is a separator.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_split(PyStringObject *self, PyObject *args)
|
string_split(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int len = PyString_GET_SIZE(self), n, i, j, err;
|
Py_ssize_t len = PyString_GET_SIZE(self), n, i, j;
|
||||||
|
int err;
|
||||||
int maxsplit = -1;
|
int maxsplit = -1;
|
||||||
const char *s = PyString_AS_STRING(self), *sub;
|
const char *s = PyString_AS_STRING(self), *sub;
|
||||||
PyObject *list, *item, *subobj = Py_None;
|
PyObject *list, *item, *subobj = Py_None;
|
||||||
|
@ -1430,7 +1428,7 @@ string_split(PyStringObject *self, PyObject *args)
|
||||||
if (s[i] == sub[0] && memcmp(s+i, sub, n) == 0) {
|
if (s[i] == sub[0] && memcmp(s+i, sub, n) == 0) {
|
||||||
if (maxsplit-- <= 0)
|
if (maxsplit-- <= 0)
|
||||||
break;
|
break;
|
||||||
item = PyString_FromStringAndSize(s+j, (int)(i-j));
|
item = PyString_FromStringAndSize(s+j, i-j);
|
||||||
if (item == NULL)
|
if (item == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
err = PyList_Append(list, item);
|
err = PyList_Append(list, item);
|
||||||
|
@ -1442,7 +1440,7 @@ string_split(PyStringObject *self, PyObject *args)
|
||||||
else
|
else
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
item = PyString_FromStringAndSize(s+j, (int)(len-j));
|
item = PyString_FromStringAndSize(s+j, len-j);
|
||||||
if (item == NULL)
|
if (item == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
err = PyList_Append(list, item);
|
err = PyList_Append(list, item);
|
||||||
|
@ -1458,9 +1456,9 @@ string_split(PyStringObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
rsplit_whitespace(const char *s, int len, int maxsplit)
|
rsplit_whitespace(const char *s, Py_ssize_t len, int maxsplit)
|
||||||
{
|
{
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
PyObject *list = PyList_New(0);
|
PyObject *list = PyList_New(0);
|
||||||
|
|
||||||
|
@ -1492,9 +1490,9 @@ rsplit_whitespace(const char *s, int len, int maxsplit)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
rsplit_char(const char *s, int len, char ch, int maxcount)
|
rsplit_char(const char *s, Py_ssize_t len, char ch, int maxcount)
|
||||||
{
|
{
|
||||||
register int i, j;
|
register Py_ssize_t i, j;
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
PyObject *list = PyList_New(0);
|
PyObject *list = PyList_New(0);
|
||||||
|
|
||||||
|
@ -1532,7 +1530,8 @@ is a separator.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_rsplit(PyStringObject *self, PyObject *args)
|
string_rsplit(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int len = PyString_GET_SIZE(self), n, i, j, err;
|
Py_ssize_t len = PyString_GET_SIZE(self), n, i, j;
|
||||||
|
int err;
|
||||||
int maxsplit = -1;
|
int maxsplit = -1;
|
||||||
const char *s = PyString_AS_STRING(self), *sub;
|
const char *s = PyString_AS_STRING(self), *sub;
|
||||||
PyObject *list, *item, *subobj = Py_None;
|
PyObject *list, *item, *subobj = Py_None;
|
||||||
|
@ -1571,7 +1570,7 @@ string_rsplit(PyStringObject *self, PyObject *args)
|
||||||
if (s[i] == sub[0] && memcmp(s+i, sub, n) == 0) {
|
if (s[i] == sub[0] && memcmp(s+i, sub, n) == 0) {
|
||||||
if (maxsplit-- <= 0)
|
if (maxsplit-- <= 0)
|
||||||
break;
|
break;
|
||||||
item = PyString_FromStringAndSize(s+i+n, (int)(j-i-n));
|
item = PyString_FromStringAndSize(s+i+n, j-i-n);
|
||||||
if (item == NULL)
|
if (item == NULL)
|
||||||
goto fail;
|
goto fail;
|
||||||
err = PyList_Insert(list, 0, item);
|
err = PyList_Insert(list, 0, item);
|
||||||
|
@ -1610,12 +1609,12 @@ static PyObject *
|
||||||
string_join(PyStringObject *self, PyObject *orig)
|
string_join(PyStringObject *self, PyObject *orig)
|
||||||
{
|
{
|
||||||
char *sep = PyString_AS_STRING(self);
|
char *sep = PyString_AS_STRING(self);
|
||||||
const int seplen = PyString_GET_SIZE(self);
|
const Py_ssize_t seplen = PyString_GET_SIZE(self);
|
||||||
PyObject *res = NULL;
|
PyObject *res = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
int seqlen = 0;
|
Py_ssize_t seqlen = 0;
|
||||||
size_t sz = 0;
|
size_t sz = 0;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *seq, *item;
|
PyObject *seq, *item;
|
||||||
|
|
||||||
seq = PySequence_Fast(orig, "");
|
seq = PySequence_Fast(orig, "");
|
||||||
|
@ -1663,7 +1662,7 @@ string_join(PyStringObject *self, PyObject *orig)
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"sequence item %i: expected string,"
|
"sequence item %i: expected string,"
|
||||||
" %.80s found",
|
" %.80s found",
|
||||||
i, item->ob_type->tp_name);
|
/*XXX*/(int)i, item->ob_type->tp_name);
|
||||||
Py_DECREF(seq);
|
Py_DECREF(seq);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -1679,7 +1678,7 @@ string_join(PyStringObject *self, PyObject *orig)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate result space. */
|
/* Allocate result space. */
|
||||||
res = PyString_FromStringAndSize((char*)NULL, (int)sz);
|
res = PyString_FromStringAndSize((char*)NULL, sz);
|
||||||
if (res == NULL) {
|
if (res == NULL) {
|
||||||
Py_DECREF(seq);
|
Py_DECREF(seq);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1712,7 +1711,7 @@ _PyString_Join(PyObject *sep, PyObject *x)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
string_adjust_indices(int *start, int *end, int len)
|
string_adjust_indices(Py_ssize_t *start, Py_ssize_t *end, Py_ssize_t len)
|
||||||
{
|
{
|
||||||
if (*end > len)
|
if (*end > len)
|
||||||
*end = len;
|
*end = len;
|
||||||
|
@ -1726,14 +1725,15 @@ string_adjust_indices(int *start, int *end, int len)
|
||||||
*start = 0;
|
*start = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static long
|
static Py_ssize_t
|
||||||
string_find_internal(PyStringObject *self, PyObject *args, int dir)
|
string_find_internal(PyStringObject *self, PyObject *args, int dir)
|
||||||
{
|
{
|
||||||
const char *s = PyString_AS_STRING(self), *sub;
|
const char *s = PyString_AS_STRING(self), *sub;
|
||||||
int len = PyString_GET_SIZE(self);
|
Py_ssize_t len = PyString_GET_SIZE(self);
|
||||||
int n, i = 0, last = INT_MAX;
|
Py_ssize_t n, i = 0, last = INT_MAX;
|
||||||
PyObject *subobj;
|
PyObject *subobj;
|
||||||
|
|
||||||
|
/* XXX ssize_t i */
|
||||||
if (!PyArg_ParseTuple(args, "O|O&O&:find/rfind/index/rindex",
|
if (!PyArg_ParseTuple(args, "O|O&O&:find/rfind/index/rindex",
|
||||||
&subobj, _PyEval_SliceIndex, &i, _PyEval_SliceIndex, &last))
|
&subobj, _PyEval_SliceIndex, &i, _PyEval_SliceIndex, &last))
|
||||||
return -2;
|
return -2;
|
||||||
|
@ -1759,13 +1759,13 @@ string_find_internal(PyStringObject *self, PyObject *args, int dir)
|
||||||
return (long)i;
|
return (long)i;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int j;
|
Py_ssize_t j;
|
||||||
|
|
||||||
if (n == 0 && i <= last)
|
if (n == 0 && i <= last)
|
||||||
return (long)last;
|
return last;
|
||||||
for (j = last-n; j >= i; --j)
|
for (j = last-n; j >= i; --j)
|
||||||
if (s[j] == sub[0] && memcmp(&s[j], sub, n) == 0)
|
if (s[j] == sub[0] && memcmp(&s[j], sub, n) == 0)
|
||||||
return (long)j;
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1784,10 +1784,10 @@ Return -1 on failure.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_find(PyStringObject *self, PyObject *args)
|
string_find(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
long result = string_find_internal(self, args, +1);
|
Py_ssize_t result = string_find_internal(self, args, +1);
|
||||||
if (result == -2)
|
if (result == -2)
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyInt_FromLong(result);
|
return PyInt_FromSsize_t(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1799,7 +1799,7 @@ Like S.find() but raise ValueError when the substring is not found.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_index(PyStringObject *self, PyObject *args)
|
string_index(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
long result = string_find_internal(self, args, +1);
|
Py_ssize_t result = string_find_internal(self, args, +1);
|
||||||
if (result == -2)
|
if (result == -2)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (result == -1) {
|
if (result == -1) {
|
||||||
|
@ -1807,7 +1807,7 @@ string_index(PyStringObject *self, PyObject *args)
|
||||||
"substring not found");
|
"substring not found");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong(result);
|
return PyInt_FromSsize_t(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1823,10 +1823,10 @@ Return -1 on failure.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_rfind(PyStringObject *self, PyObject *args)
|
string_rfind(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
long result = string_find_internal(self, args, -1);
|
Py_ssize_t result = string_find_internal(self, args, -1);
|
||||||
if (result == -2)
|
if (result == -2)
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyInt_FromLong(result);
|
return PyInt_FromSsize_t(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1838,7 +1838,7 @@ Like S.rfind() but raise ValueError when the substring is not found.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_rindex(PyStringObject *self, PyObject *args)
|
string_rindex(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
long result = string_find_internal(self, args, -1);
|
Py_ssize_t result = string_find_internal(self, args, -1);
|
||||||
if (result == -2)
|
if (result == -2)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (result == -1) {
|
if (result == -1) {
|
||||||
|
@ -1846,7 +1846,7 @@ string_rindex(PyStringObject *self, PyObject *args)
|
||||||
"substring not found");
|
"substring not found");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong(result);
|
return PyInt_FromSsize_t(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1854,10 +1854,10 @@ static PyObject *
|
||||||
do_xstrip(PyStringObject *self, int striptype, PyObject *sepobj)
|
do_xstrip(PyStringObject *self, int striptype, PyObject *sepobj)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self);
|
char *s = PyString_AS_STRING(self);
|
||||||
int len = PyString_GET_SIZE(self);
|
Py_ssize_t len = PyString_GET_SIZE(self);
|
||||||
char *sep = PyString_AS_STRING(sepobj);
|
char *sep = PyString_AS_STRING(sepobj);
|
||||||
int seplen = PyString_GET_SIZE(sepobj);
|
Py_ssize_t seplen = PyString_GET_SIZE(sepobj);
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
if (striptype != RIGHTSTRIP) {
|
if (striptype != RIGHTSTRIP) {
|
||||||
|
@ -1887,7 +1887,7 @@ static PyObject *
|
||||||
do_strip(PyStringObject *self, int striptype)
|
do_strip(PyStringObject *self, int striptype)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self);
|
char *s = PyString_AS_STRING(self);
|
||||||
int len = PyString_GET_SIZE(self), i, j;
|
Py_ssize_t len = PyString_GET_SIZE(self), i, j;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
if (striptype != RIGHTSTRIP) {
|
if (striptype != RIGHTSTRIP) {
|
||||||
|
@ -2014,7 +2014,7 @@ static PyObject *
|
||||||
string_lower(PyStringObject *self)
|
string_lower(PyStringObject *self)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self), *s_new;
|
char *s = PyString_AS_STRING(self), *s_new;
|
||||||
int i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
|
|
||||||
new = PyString_FromStringAndSize(NULL, n);
|
new = PyString_FromStringAndSize(NULL, n);
|
||||||
|
@ -2042,7 +2042,7 @@ static PyObject *
|
||||||
string_upper(PyStringObject *self)
|
string_upper(PyStringObject *self)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self), *s_new;
|
char *s = PyString_AS_STRING(self), *s_new;
|
||||||
int i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
|
|
||||||
new = PyString_FromStringAndSize(NULL, n);
|
new = PyString_FromStringAndSize(NULL, n);
|
||||||
|
@ -2071,7 +2071,7 @@ static PyObject*
|
||||||
string_title(PyStringObject *self)
|
string_title(PyStringObject *self)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self), *s_new;
|
char *s = PyString_AS_STRING(self), *s_new;
|
||||||
int i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
int previous_is_cased = 0;
|
int previous_is_cased = 0;
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
|
|
||||||
|
@ -2106,7 +2106,7 @@ static PyObject *
|
||||||
string_capitalize(PyStringObject *self)
|
string_capitalize(PyStringObject *self)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self), *s_new;
|
char *s = PyString_AS_STRING(self), *s_new;
|
||||||
int i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
|
|
||||||
new = PyString_FromStringAndSize(NULL, n);
|
new = PyString_FromStringAndSize(NULL, n);
|
||||||
|
@ -2144,9 +2144,9 @@ static PyObject *
|
||||||
string_count(PyStringObject *self, PyObject *args)
|
string_count(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char *s = PyString_AS_STRING(self), *sub, *t;
|
const char *s = PyString_AS_STRING(self), *sub, *t;
|
||||||
int len = PyString_GET_SIZE(self), n;
|
Py_ssize_t len = PyString_GET_SIZE(self), n;
|
||||||
int i = 0, last = INT_MAX;
|
Py_ssize_t i = 0, last = INT_MAX;
|
||||||
int m, r;
|
Py_ssize_t m, r;
|
||||||
PyObject *subobj;
|
PyObject *subobj;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|O&O&:count", &subobj,
|
if (!PyArg_ParseTuple(args, "O|O&O&:count", &subobj,
|
||||||
|
@ -2159,7 +2159,7 @@ string_count(PyStringObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
else if (PyUnicode_Check(subobj)) {
|
else if (PyUnicode_Check(subobj)) {
|
||||||
int count;
|
Py_ssize_t count;
|
||||||
count = PyUnicode_Count((PyObject *)self, subobj, i, last);
|
count = PyUnicode_Count((PyObject *)self, subobj, i, last);
|
||||||
if (count == -1)
|
if (count == -1)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2174,7 +2174,7 @@ string_count(PyStringObject *self, PyObject *args)
|
||||||
|
|
||||||
m = last + 1 - n;
|
m = last + 1 - n;
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
return PyInt_FromLong((long) (m-i));
|
return PyInt_FromSsize_t(m-i);
|
||||||
|
|
||||||
r = 0;
|
r = 0;
|
||||||
while (i < m) {
|
while (i < m) {
|
||||||
|
@ -2191,7 +2191,7 @@ string_count(PyStringObject *self, PyObject *args)
|
||||||
break;
|
break;
|
||||||
i = t - s;
|
i = t - s;
|
||||||
}
|
}
|
||||||
return PyInt_FromLong((long) r);
|
return PyInt_FromSsize_t(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(swapcase__doc__,
|
PyDoc_STRVAR(swapcase__doc__,
|
||||||
|
@ -2204,7 +2204,7 @@ static PyObject *
|
||||||
string_swapcase(PyStringObject *self)
|
string_swapcase(PyStringObject *self)
|
||||||
{
|
{
|
||||||
char *s = PyString_AS_STRING(self), *s_new;
|
char *s = PyString_AS_STRING(self), *s_new;
|
||||||
int i, n = PyString_GET_SIZE(self);
|
Py_ssize_t i, n = PyString_GET_SIZE(self);
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
|
|
||||||
new = PyString_FromStringAndSize(NULL, n);
|
new = PyString_FromStringAndSize(NULL, n);
|
||||||
|
@ -2240,10 +2240,10 @@ string_translate(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
register char *input, *output;
|
register char *input, *output;
|
||||||
register const char *table;
|
register const char *table;
|
||||||
register int i, c, changed = 0;
|
register Py_ssize_t i, c, changed = 0;
|
||||||
PyObject *input_obj = (PyObject*)self;
|
PyObject *input_obj = (PyObject*)self;
|
||||||
const char *table1, *output_start, *del_table=NULL;
|
const char *table1, *output_start, *del_table=NULL;
|
||||||
int inlen, tablen, dellen = 0;
|
Py_ssize_t inlen, tablen, dellen = 0;
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
int trans_table[256];
|
int trans_table[256];
|
||||||
PyObject *tableobj, *delobj = NULL;
|
PyObject *tableobj, *delobj = NULL;
|
||||||
|
@ -2357,10 +2357,10 @@ string_translate(PyStringObject *self, PyObject *args)
|
||||||
found, or -1 if not found. If len of PAT is greater than length of
|
found, or -1 if not found. If len of PAT is greater than length of
|
||||||
MEM, the function returns -1.
|
MEM, the function returns -1.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
mymemfind(const char *mem, int len, const char *pat, int pat_len)
|
mymemfind(const char *mem, Py_ssize_t len, const char *pat, Py_ssize_t pat_len)
|
||||||
{
|
{
|
||||||
register int ii;
|
register Py_ssize_t ii;
|
||||||
|
|
||||||
/* pattern can not occur in the last pat_len-1 chars */
|
/* pattern can not occur in the last pat_len-1 chars */
|
||||||
len -= pat_len;
|
len -= pat_len;
|
||||||
|
@ -2380,11 +2380,11 @@ mymemfind(const char *mem, int len, const char *pat, int pat_len)
|
||||||
meaning mem=1111 and pat==11 returns 2.
|
meaning mem=1111 and pat==11 returns 2.
|
||||||
mem=11111 and pat==11 also return 2.
|
mem=11111 and pat==11 also return 2.
|
||||||
*/
|
*/
|
||||||
static int
|
static Py_ssize_t
|
||||||
mymemcnt(const char *mem, int len, const char *pat, int pat_len)
|
mymemcnt(const char *mem, Py_ssize_t len, const char *pat, Py_ssize_t pat_len)
|
||||||
{
|
{
|
||||||
register int offset = 0;
|
register Py_ssize_t offset = 0;
|
||||||
int nfound = 0;
|
Py_ssize_t nfound = 0;
|
||||||
|
|
||||||
while (len >= 0) {
|
while (len >= 0) {
|
||||||
offset = mymemfind(mem, len, pat, pat_len);
|
offset = mymemfind(mem, len, pat, pat_len);
|
||||||
|
@ -2417,15 +2417,15 @@ mymemcnt(const char *mem, int len, const char *pat, int pat_len)
|
||||||
NULL if an error occurred.
|
NULL if an error occurred.
|
||||||
*/
|
*/
|
||||||
static char *
|
static char *
|
||||||
mymemreplace(const char *str, int len, /* input string */
|
mymemreplace(const char *str, Py_ssize_t len, /* input string */
|
||||||
const char *pat, int pat_len, /* pattern string to find */
|
const char *pat, Py_ssize_t pat_len, /* pattern string to find */
|
||||||
const char *sub, int sub_len, /* substitution string */
|
const char *sub, Py_ssize_t sub_len, /* substitution string */
|
||||||
int count, /* number of replacements */
|
Py_ssize_t count, /* number of replacements */
|
||||||
int *out_len)
|
Py_ssize_t *out_len)
|
||||||
{
|
{
|
||||||
char *out_s;
|
char *out_s;
|
||||||
char *new_s;
|
char *new_s;
|
||||||
int nfound, offset, new_len;
|
Py_ssize_t nfound, offset, new_len;
|
||||||
|
|
||||||
if (len == 0 || (pat_len == 0 && sub_len == 0) || pat_len > len)
|
if (len == 0 || (pat_len == 0 && sub_len == 0) || pat_len > len)
|
||||||
goto return_same;
|
goto return_same;
|
||||||
|
@ -2508,8 +2508,8 @@ string_replace(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char *str = PyString_AS_STRING(self), *sub, *repl;
|
const char *str = PyString_AS_STRING(self), *sub, *repl;
|
||||||
char *new_s;
|
char *new_s;
|
||||||
const int len = PyString_GET_SIZE(self);
|
const Py_ssize_t len = PyString_GET_SIZE(self);
|
||||||
int sub_len, repl_len, out_len;
|
Py_ssize_t sub_len, repl_len, out_len;
|
||||||
int count = -1;
|
int count = -1;
|
||||||
PyObject *new;
|
PyObject *new;
|
||||||
PyObject *subobj, *replobj;
|
PyObject *subobj, *replobj;
|
||||||
|
@ -2578,11 +2578,11 @@ static PyObject *
|
||||||
string_startswith(PyStringObject *self, PyObject *args)
|
string_startswith(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char* str = PyString_AS_STRING(self);
|
const char* str = PyString_AS_STRING(self);
|
||||||
int len = PyString_GET_SIZE(self);
|
Py_ssize_t len = PyString_GET_SIZE(self);
|
||||||
const char* prefix;
|
const char* prefix;
|
||||||
int plen;
|
Py_ssize_t plen;
|
||||||
int start = 0;
|
Py_ssize_t start = 0;
|
||||||
int end = INT_MAX;
|
Py_ssize_t end = INT_MAX;
|
||||||
PyObject *subobj;
|
PyObject *subobj;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|O&O&:startswith", &subobj,
|
if (!PyArg_ParseTuple(args, "O|O&O&:startswith", &subobj,
|
||||||
|
@ -2594,7 +2594,7 @@ string_startswith(PyStringObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
else if (PyUnicode_Check(subobj)) {
|
else if (PyUnicode_Check(subobj)) {
|
||||||
int rc;
|
Py_ssize_t rc;
|
||||||
rc = PyUnicode_Tailmatch((PyObject *)self,
|
rc = PyUnicode_Tailmatch((PyObject *)self,
|
||||||
subobj, start, end, -1);
|
subobj, start, end, -1);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
|
@ -2629,11 +2629,11 @@ static PyObject *
|
||||||
string_endswith(PyStringObject *self, PyObject *args)
|
string_endswith(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char* str = PyString_AS_STRING(self);
|
const char* str = PyString_AS_STRING(self);
|
||||||
int len = PyString_GET_SIZE(self);
|
Py_ssize_t len = PyString_GET_SIZE(self);
|
||||||
const char* suffix;
|
const char* suffix;
|
||||||
int slen;
|
Py_ssize_t slen;
|
||||||
int start = 0;
|
Py_ssize_t start = 0;
|
||||||
int end = INT_MAX;
|
Py_ssize_t end = INT_MAX;
|
||||||
PyObject *subobj;
|
PyObject *subobj;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "O|O&O&:endswith", &subobj,
|
if (!PyArg_ParseTuple(args, "O|O&O&:endswith", &subobj,
|
||||||
|
@ -2645,7 +2645,7 @@ string_endswith(PyStringObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
else if (PyUnicode_Check(subobj)) {
|
else if (PyUnicode_Check(subobj)) {
|
||||||
int rc;
|
Py_ssize_t rc;
|
||||||
rc = PyUnicode_Tailmatch((PyObject *)self,
|
rc = PyUnicode_Tailmatch((PyObject *)self,
|
||||||
subobj, start, end, +1);
|
subobj, start, end, +1);
|
||||||
if (rc == -1)
|
if (rc == -1)
|
||||||
|
@ -2756,7 +2756,7 @@ string_expandtabs(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
const char *e, *p;
|
const char *e, *p;
|
||||||
char *q;
|
char *q;
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
PyObject *u;
|
PyObject *u;
|
||||||
int tabsize = 8;
|
int tabsize = 8;
|
||||||
|
|
||||||
|
@ -2807,7 +2807,7 @@ string_expandtabs(PyStringObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
pad(PyStringObject *self, int left, int right, char fill)
|
pad(PyStringObject *self, Py_ssize_t left, Py_ssize_t right, char fill)
|
||||||
{
|
{
|
||||||
PyObject *u;
|
PyObject *u;
|
||||||
|
|
||||||
|
@ -2894,11 +2894,11 @@ PyDoc_STRVAR(center__doc__,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_center(PyStringObject *self, PyObject *args)
|
string_center(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int marg, left;
|
Py_ssize_t marg, left;
|
||||||
int width;
|
long width;
|
||||||
char fillchar = ' ';
|
char fillchar = ' ';
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "i|c:center", &width, &fillchar))
|
if (!PyArg_ParseTuple(args, "l|c:center", &width, &fillchar))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (PyString_GET_SIZE(self) >= width && PyString_CheckExact(self)) {
|
if (PyString_GET_SIZE(self) >= width && PyString_CheckExact(self)) {
|
||||||
|
@ -2921,12 +2921,12 @@ PyDoc_STRVAR(zfill__doc__,
|
||||||
static PyObject *
|
static PyObject *
|
||||||
string_zfill(PyStringObject *self, PyObject *args)
|
string_zfill(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
int fill;
|
long fill;
|
||||||
PyObject *s;
|
PyObject *s;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
int width;
|
int width;
|
||||||
if (!PyArg_ParseTuple(args, "i:zfill", &width))
|
if (!PyArg_ParseTuple(args, "l:zfill", &width))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (PyString_GET_SIZE(self) >= width) {
|
if (PyString_GET_SIZE(self) >= width) {
|
||||||
|
@ -3209,9 +3209,9 @@ is given and true.");
|
||||||
static PyObject*
|
static PyObject*
|
||||||
string_splitlines(PyStringObject *self, PyObject *args)
|
string_splitlines(PyStringObject *self, PyObject *args)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register int j;
|
register Py_ssize_t j;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
int keepends = 0;
|
int keepends = 0;
|
||||||
PyObject *list;
|
PyObject *list;
|
||||||
PyObject *str;
|
PyObject *str;
|
||||||
|
@ -3228,7 +3228,7 @@ string_splitlines(PyStringObject *self, PyObject *args)
|
||||||
goto onError;
|
goto onError;
|
||||||
|
|
||||||
for (i = j = 0; i < len; ) {
|
for (i = j = 0; i < len; ) {
|
||||||
int eol;
|
Py_ssize_t eol;
|
||||||
|
|
||||||
/* Find a line and append it */
|
/* Find a line and append it */
|
||||||
while (i < len && data[i] != '\n' && data[i] != '\r')
|
while (i < len && data[i] != '\n' && data[i] != '\r')
|
||||||
|
@ -3340,7 +3340,7 @@ static PyObject *
|
||||||
str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
PyObject *tmp, *pnew;
|
PyObject *tmp, *pnew;
|
||||||
int n;
|
Py_ssize_t n;
|
||||||
|
|
||||||
assert(PyType_IsSubtype(type, &PyString_Type));
|
assert(PyType_IsSubtype(type, &PyString_Type));
|
||||||
tmp = string_new(&PyString_Type, args, kwds);
|
tmp = string_new(&PyString_Type, args, kwds);
|
||||||
|
@ -3521,7 +3521,7 @@ PyString_ConcatAndDel(register PyObject **pv, register PyObject *w)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
_PyString_Resize(PyObject **pv, int newsize)
|
_PyString_Resize(PyObject **pv, Py_ssize_t newsize)
|
||||||
{
|
{
|
||||||
register PyObject *v;
|
register PyObject *v;
|
||||||
register PyStringObject *sv;
|
register PyStringObject *sv;
|
||||||
|
@ -3625,7 +3625,7 @@ formatfloat(char *buf, size_t buflen, int flags,
|
||||||
(flags&F_ALT) ? "#" : "",
|
(flags&F_ALT) ? "#" : "",
|
||||||
prec, type);
|
prec, type);
|
||||||
PyOS_ascii_formatd(buf, buflen, fmt, x);
|
PyOS_ascii_formatd(buf, buflen, fmt, x);
|
||||||
return strlen(buf);
|
return (int)strlen(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* _PyString_FormatLong emulates the format codes d, u, o, x and X, and
|
/* _PyString_FormatLong emulates the format codes d, u, o, x and X, and
|
||||||
|
@ -3655,7 +3655,7 @@ _PyString_FormatLong(PyObject *val, int flags, int prec, int type,
|
||||||
{
|
{
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
char *buf;
|
char *buf;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int sign; /* 1 if '-', else 0 */
|
int sign; /* 1 if '-', else 0 */
|
||||||
int len; /* number of characters */
|
int len; /* number of characters */
|
||||||
int numdigits; /* len == numnondigits + numdigits */
|
int numdigits; /* len == numnondigits + numdigits */
|
||||||
|
@ -3832,7 +3832,7 @@ formatint(char *buf, size_t buflen, int flags,
|
||||||
PyOS_snprintf(buf, buflen, fmt, -x);
|
PyOS_snprintf(buf, buflen, fmt, -x);
|
||||||
else
|
else
|
||||||
PyOS_snprintf(buf, buflen, fmt, x);
|
PyOS_snprintf(buf, buflen, fmt, x);
|
||||||
return strlen(buf);
|
return (int)strlen(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -3865,7 +3865,8 @@ PyObject *
|
||||||
PyString_Format(PyObject *format, PyObject *args)
|
PyString_Format(PyObject *format, PyObject *args)
|
||||||
{
|
{
|
||||||
char *fmt, *res;
|
char *fmt, *res;
|
||||||
int fmtcnt, rescnt, reslen, arglen, argidx;
|
int arglen, argidx;
|
||||||
|
Py_ssize_t reslen, rescnt, fmtcnt;
|
||||||
int args_owned = 0;
|
int args_owned = 0;
|
||||||
PyObject *result, *orig_args;
|
PyObject *result, *orig_args;
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
|
@ -3911,7 +3912,7 @@ PyString_Format(PyObject *format, PyObject *args)
|
||||||
else {
|
else {
|
||||||
/* Got a format specifier */
|
/* Got a format specifier */
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
int width = -1;
|
Py_ssize_t width = -1;
|
||||||
int prec = -1;
|
int prec = -1;
|
||||||
int c = '\0';
|
int c = '\0';
|
||||||
int fill;
|
int fill;
|
||||||
|
@ -3930,7 +3931,7 @@ PyString_Format(PyObject *format, PyObject *args)
|
||||||
fmt++;
|
fmt++;
|
||||||
if (*fmt == '(') {
|
if (*fmt == '(') {
|
||||||
char *keystart;
|
char *keystart;
|
||||||
int keylen;
|
Py_ssize_t keylen;
|
||||||
PyObject *key;
|
PyObject *key;
|
||||||
int pcount = 1;
|
int pcount = 1;
|
||||||
|
|
||||||
|
@ -4393,7 +4394,7 @@ void _Py_ReleaseInternedStrings(void)
|
||||||
{
|
{
|
||||||
PyObject *keys;
|
PyObject *keys;
|
||||||
PyStringObject *s;
|
PyStringObject *s;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
if (interned == NULL || !PyDict_Check(interned))
|
if (interned == NULL || !PyDict_Check(interned))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -40,7 +40,7 @@ PyStructSequence_New(PyTypeObject *type)
|
||||||
static void
|
static void
|
||||||
structseq_dealloc(PyStructSequence *obj)
|
structseq_dealloc(PyStructSequence *obj)
|
||||||
{
|
{
|
||||||
int i, size;
|
Py_ssize_t i, size;
|
||||||
|
|
||||||
size = REAL_SIZE(obj);
|
size = REAL_SIZE(obj);
|
||||||
for (i = 0; i < size; ++i) {
|
for (i = 0; i < size; ++i) {
|
||||||
|
@ -49,14 +49,14 @@ structseq_dealloc(PyStructSequence *obj)
|
||||||
PyObject_Del(obj);
|
PyObject_Del(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
structseq_length(PyStructSequence *obj)
|
structseq_length(PyStructSequence *obj)
|
||||||
{
|
{
|
||||||
return VISIBLE_SIZE(obj);
|
return VISIBLE_SIZE(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
structseq_item(PyStructSequence *obj, int i)
|
structseq_item(PyStructSequence *obj, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (i < 0 || i >= VISIBLE_SIZE(obj)) {
|
if (i < 0 || i >= VISIBLE_SIZE(obj)) {
|
||||||
PyErr_SetString(PyExc_IndexError, "tuple index out of range");
|
PyErr_SetString(PyExc_IndexError, "tuple index out of range");
|
||||||
|
@ -67,10 +67,10 @@ structseq_item(PyStructSequence *obj, int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject*
|
static PyObject*
|
||||||
structseq_slice(PyStructSequence *obj, int low, int high)
|
structseq_slice(PyStructSequence *obj, Py_ssize_t low, Py_ssize_t high)
|
||||||
{
|
{
|
||||||
PyTupleObject *np;
|
PyTupleObject *np;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (low < 0)
|
if (low < 0)
|
||||||
low = 0;
|
low = 0;
|
||||||
|
@ -96,7 +96,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
PyObject *dict = NULL;
|
PyObject *dict = NULL;
|
||||||
PyObject *ob;
|
PyObject *ob;
|
||||||
PyStructSequence *res = NULL;
|
PyStructSequence *res = NULL;
|
||||||
int len, min_len, max_len, i, n_unnamed_fields;
|
Py_ssize_t len, min_len, max_len, i, n_unnamed_fields;
|
||||||
static const char *kwlist[] = {"sequence", "dict", 0};
|
static const char *kwlist[] = {"sequence", "dict", 0};
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:structseq",
|
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:structseq",
|
||||||
|
@ -125,7 +125,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
if (min_len != max_len) {
|
if (min_len != max_len) {
|
||||||
if (len < min_len) {
|
if (len < min_len) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"%.500s() takes an at least %d-sequence (%d-sequence given)",
|
"%.500s() takes an at least %ld-sequence (%ld-sequence given)",
|
||||||
type->tp_name, min_len, len);
|
type->tp_name, min_len, len);
|
||||||
Py_DECREF(arg);
|
Py_DECREF(arg);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -133,7 +133,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
|
|
||||||
if (len > max_len) {
|
if (len > max_len) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"%.500s() takes an at most %d-sequence (%d-sequence given)",
|
"%.500s() takes an at most %ld-sequence (%ld-sequence given)",
|
||||||
type->tp_name, max_len, len);
|
type->tp_name, max_len, len);
|
||||||
Py_DECREF(arg);
|
Py_DECREF(arg);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -142,7 +142,7 @@ structseq_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
else {
|
else {
|
||||||
if (len != min_len) {
|
if (len != min_len) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"%.500s() takes a %d-sequence (%d-sequence given)",
|
"%.500s() takes a %ld-sequence (%ld-sequence given)",
|
||||||
type->tp_name, min_len, len);
|
type->tp_name, min_len, len);
|
||||||
Py_DECREF(arg);
|
Py_DECREF(arg);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -200,7 +200,7 @@ structseq_concat(PyStructSequence *obj, PyObject *b)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
structseq_repeat(PyStructSequence *obj, int n)
|
structseq_repeat(PyStructSequence *obj, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
PyObject *tup, *result;
|
PyObject *tup, *result;
|
||||||
tup = make_tuple(obj);
|
tup = make_tuple(obj);
|
||||||
|
@ -284,11 +284,11 @@ structseq_reduce(PyStructSequence* self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PySequenceMethods structseq_as_sequence = {
|
static PySequenceMethods structseq_as_sequence = {
|
||||||
(inquiry)structseq_length,
|
(lenfunc)structseq_length,
|
||||||
(binaryfunc)structseq_concat, /* sq_concat */
|
(binaryfunc)structseq_concat, /* sq_concat */
|
||||||
(intargfunc)structseq_repeat, /* sq_repeat */
|
(ssizeargfunc)structseq_repeat, /* sq_repeat */
|
||||||
(intargfunc)structseq_item, /* sq_item */
|
(ssizeargfunc)structseq_item, /* sq_item */
|
||||||
(intintargfunc)structseq_slice, /* sq_slice */
|
(ssizessizeargfunc)structseq_slice, /* sq_slice */
|
||||||
0, /* sq_ass_item */
|
0, /* sq_ass_item */
|
||||||
0, /* sq_ass_slice */
|
0, /* sq_ass_slice */
|
||||||
(objobjproc)structseq_contains, /* sq_contains */
|
(objobjproc)structseq_contains, /* sq_contains */
|
||||||
|
|
|
@ -24,10 +24,10 @@ int tuple_zero_allocs;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyTuple_New(register int size)
|
PyTuple_New(register Py_ssize_t size)
|
||||||
{
|
{
|
||||||
register PyTupleObject *op;
|
register PyTupleObject *op;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
if (size < 0) {
|
if (size < 0) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -57,7 +57,7 @@ PyTuple_New(register int size)
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
int nbytes = size * sizeof(PyObject *);
|
Py_ssize_t nbytes = size * sizeof(PyObject *);
|
||||||
/* Check for overflow */
|
/* Check for overflow */
|
||||||
if (nbytes / sizeof(PyObject *) != (size_t)size ||
|
if (nbytes / sizeof(PyObject *) != (size_t)size ||
|
||||||
(nbytes += sizeof(PyTupleObject) - sizeof(PyObject *))
|
(nbytes += sizeof(PyTupleObject) - sizeof(PyObject *))
|
||||||
|
@ -82,7 +82,7 @@ PyTuple_New(register int size)
|
||||||
return (PyObject *) op;
|
return (PyObject *) op;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
Py_ssize_t
|
||||||
PyTuple_Size(register PyObject *op)
|
PyTuple_Size(register PyObject *op)
|
||||||
{
|
{
|
||||||
if (!PyTuple_Check(op)) {
|
if (!PyTuple_Check(op)) {
|
||||||
|
@ -94,7 +94,7 @@ PyTuple_Size(register PyObject *op)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyTuple_GetItem(register PyObject *op, register int i)
|
PyTuple_GetItem(register PyObject *op, register Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (!PyTuple_Check(op)) {
|
if (!PyTuple_Check(op)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -108,7 +108,7 @@ PyTuple_GetItem(register PyObject *op, register int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
PyTuple_SetItem(register PyObject *op, register int i, PyObject *newitem)
|
PyTuple_SetItem(register PyObject *op, register Py_ssize_t i, PyObject *newitem)
|
||||||
{
|
{
|
||||||
register PyObject *olditem;
|
register PyObject *olditem;
|
||||||
register PyObject **p;
|
register PyObject **p;
|
||||||
|
@ -131,9 +131,9 @@ PyTuple_SetItem(register PyObject *op, register int i, PyObject *newitem)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyTuple_Pack(int n, ...)
|
PyTuple_Pack(Py_ssize_t n, ...)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *o;
|
PyObject *o;
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
PyObject **items;
|
PyObject **items;
|
||||||
|
@ -159,8 +159,8 @@ PyTuple_Pack(int n, ...)
|
||||||
static void
|
static void
|
||||||
tupledealloc(register PyTupleObject *op)
|
tupledealloc(register PyTupleObject *op)
|
||||||
{
|
{
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
register int len = op->ob_size;
|
register Py_ssize_t len = op->ob_size;
|
||||||
PyObject_GC_UnTrack(op);
|
PyObject_GC_UnTrack(op);
|
||||||
Py_TRASHCAN_SAFE_BEGIN(op)
|
Py_TRASHCAN_SAFE_BEGIN(op)
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
|
@ -187,7 +187,7 @@ done:
|
||||||
static int
|
static int
|
||||||
tupleprint(PyTupleObject *op, FILE *fp, int flags)
|
tupleprint(PyTupleObject *op, FILE *fp, int flags)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
fprintf(fp, "(");
|
fprintf(fp, "(");
|
||||||
for (i = 0; i < op->ob_size; i++) {
|
for (i = 0; i < op->ob_size; i++) {
|
||||||
if (i > 0)
|
if (i > 0)
|
||||||
|
@ -204,7 +204,7 @@ tupleprint(PyTupleObject *op, FILE *fp, int flags)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tuplerepr(PyTupleObject *v)
|
tuplerepr(PyTupleObject *v)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *s, *temp;
|
PyObject *s, *temp;
|
||||||
PyObject *pieces, *result = NULL;
|
PyObject *pieces, *result = NULL;
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ static long
|
||||||
tuplehash(PyTupleObject *v)
|
tuplehash(PyTupleObject *v)
|
||||||
{
|
{
|
||||||
register long x, y;
|
register long x, y;
|
||||||
register int len = v->ob_size;
|
register Py_ssize_t len = v->ob_size;
|
||||||
register PyObject **p;
|
register PyObject **p;
|
||||||
long mult = 1000003L;
|
long mult = 1000003L;
|
||||||
x = 0x345678L;
|
x = 0x345678L;
|
||||||
|
@ -286,7 +286,7 @@ tuplehash(PyTupleObject *v)
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
tuplelength(PyTupleObject *a)
|
tuplelength(PyTupleObject *a)
|
||||||
{
|
{
|
||||||
return a->ob_size;
|
return a->ob_size;
|
||||||
|
@ -295,7 +295,8 @@ tuplelength(PyTupleObject *a)
|
||||||
static int
|
static int
|
||||||
tuplecontains(PyTupleObject *a, PyObject *el)
|
tuplecontains(PyTupleObject *a, PyObject *el)
|
||||||
{
|
{
|
||||||
int i, cmp;
|
Py_ssize_t i;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
for (i = 0, cmp = 0 ; cmp == 0 && i < a->ob_size; ++i)
|
for (i = 0, cmp = 0 ; cmp == 0 && i < a->ob_size; ++i)
|
||||||
cmp = PyObject_RichCompareBool(el, PyTuple_GET_ITEM(a, i),
|
cmp = PyObject_RichCompareBool(el, PyTuple_GET_ITEM(a, i),
|
||||||
|
@ -304,7 +305,7 @@ tuplecontains(PyTupleObject *a, PyObject *el)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tupleitem(register PyTupleObject *a, register int i)
|
tupleitem(register PyTupleObject *a, register Py_ssize_t i)
|
||||||
{
|
{
|
||||||
if (i < 0 || i >= a->ob_size) {
|
if (i < 0 || i >= a->ob_size) {
|
||||||
PyErr_SetString(PyExc_IndexError, "tuple index out of range");
|
PyErr_SetString(PyExc_IndexError, "tuple index out of range");
|
||||||
|
@ -315,12 +316,13 @@ tupleitem(register PyTupleObject *a, register int i)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tupleslice(register PyTupleObject *a, register int ilow, register int ihigh)
|
tupleslice(register PyTupleObject *a, register Py_ssize_t ilow,
|
||||||
|
register Py_ssize_t ihigh)
|
||||||
{
|
{
|
||||||
register PyTupleObject *np;
|
register PyTupleObject *np;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
if (ilow < 0)
|
if (ilow < 0)
|
||||||
ilow = 0;
|
ilow = 0;
|
||||||
if (ihigh > a->ob_size)
|
if (ihigh > a->ob_size)
|
||||||
|
@ -346,7 +348,7 @@ tupleslice(register PyTupleObject *a, register int ilow, register int ihigh)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyTuple_GetSlice(PyObject *op, int i, int j)
|
PyTuple_GetSlice(PyObject *op, Py_ssize_t i, Py_ssize_t j)
|
||||||
{
|
{
|
||||||
if (op == NULL || !PyTuple_Check(op)) {
|
if (op == NULL || !PyTuple_Check(op)) {
|
||||||
PyErr_BadInternalCall();
|
PyErr_BadInternalCall();
|
||||||
|
@ -358,8 +360,8 @@ PyTuple_GetSlice(PyObject *op, int i, int j)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tupleconcat(register PyTupleObject *a, register PyObject *bb)
|
tupleconcat(register PyTupleObject *a, register PyObject *bb)
|
||||||
{
|
{
|
||||||
register int size;
|
register Py_ssize_t size;
|
||||||
register int i;
|
register Py_ssize_t i;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
PyTupleObject *np;
|
PyTupleObject *np;
|
||||||
if (!PyTuple_Check(bb)) {
|
if (!PyTuple_Check(bb)) {
|
||||||
|
@ -395,10 +397,10 @@ tupleconcat(register PyTupleObject *a, register PyObject *bb)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tuplerepeat(PyTupleObject *a, int n)
|
tuplerepeat(PyTupleObject *a, Py_ssize_t n)
|
||||||
{
|
{
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
PyTupleObject *np;
|
PyTupleObject *np;
|
||||||
PyObject **p, **items;
|
PyObject **p, **items;
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
|
@ -434,13 +436,13 @@ tuplerepeat(PyTupleObject *a, int n)
|
||||||
static int
|
static int
|
||||||
tupletraverse(PyTupleObject *o, visitproc visit, void *arg)
|
tupletraverse(PyTupleObject *o, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
int i, err;
|
Py_ssize_t i;
|
||||||
PyObject *x;
|
PyObject *x;
|
||||||
|
|
||||||
for (i = o->ob_size; --i >= 0; ) {
|
for (i = o->ob_size; --i >= 0; ) {
|
||||||
x = o->ob_item[i];
|
x = o->ob_item[i];
|
||||||
if (x != NULL) {
|
if (x != NULL) {
|
||||||
err = visit(x, arg);
|
int err = visit(x, arg);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -452,8 +454,8 @@ static PyObject *
|
||||||
tuplerichcompare(PyObject *v, PyObject *w, int op)
|
tuplerichcompare(PyObject *v, PyObject *w, int op)
|
||||||
{
|
{
|
||||||
PyTupleObject *vt, *wt;
|
PyTupleObject *vt, *wt;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int vlen, wlen;
|
Py_ssize_t vlen, wlen;
|
||||||
|
|
||||||
if (!PyTuple_Check(v) || !PyTuple_Check(w)) {
|
if (!PyTuple_Check(v) || !PyTuple_Check(w)) {
|
||||||
Py_INCREF(Py_NotImplemented);
|
Py_INCREF(Py_NotImplemented);
|
||||||
|
@ -545,7 +547,7 @@ static PyObject *
|
||||||
tuple_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
tuple_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
PyObject *tmp, *new, *item;
|
PyObject *tmp, *new, *item;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
assert(PyType_IsSubtype(type, &PyTuple_Type));
|
assert(PyType_IsSubtype(type, &PyTuple_Type));
|
||||||
tmp = tuple_new(&PyTuple_Type, args, kwds);
|
tmp = tuple_new(&PyTuple_Type, args, kwds);
|
||||||
|
@ -571,11 +573,11 @@ PyDoc_STRVAR(tuple_doc,
|
||||||
"If the argument is a tuple, the return value is the same object.");
|
"If the argument is a tuple, the return value is the same object.");
|
||||||
|
|
||||||
static PySequenceMethods tuple_as_sequence = {
|
static PySequenceMethods tuple_as_sequence = {
|
||||||
(inquiry)tuplelength, /* sq_length */
|
(lenfunc)tuplelength, /* sq_length */
|
||||||
(binaryfunc)tupleconcat, /* sq_concat */
|
(binaryfunc)tupleconcat, /* sq_concat */
|
||||||
(intargfunc)tuplerepeat, /* sq_repeat */
|
(ssizeargfunc)tuplerepeat, /* sq_repeat */
|
||||||
(intargfunc)tupleitem, /* sq_item */
|
(ssizeargfunc)tupleitem, /* sq_item */
|
||||||
(intintargfunc)tupleslice, /* sq_slice */
|
(ssizessizeargfunc)tupleslice, /* sq_slice */
|
||||||
0, /* sq_ass_item */
|
0, /* sq_ass_item */
|
||||||
0, /* sq_ass_slice */
|
0, /* sq_ass_slice */
|
||||||
(objobjproc)tuplecontains, /* sq_contains */
|
(objobjproc)tuplecontains, /* sq_contains */
|
||||||
|
@ -584,14 +586,8 @@ static PySequenceMethods tuple_as_sequence = {
|
||||||
static PyObject*
|
static PyObject*
|
||||||
tuplesubscript(PyTupleObject* self, PyObject* item)
|
tuplesubscript(PyTupleObject* self, PyObject* item)
|
||||||
{
|
{
|
||||||
if (PyInt_Check(item)) {
|
if (PyInt_Check(item) || PyLong_Check(item)) {
|
||||||
long i = PyInt_AS_LONG(item);
|
Py_ssize_t i = PyInt_AsSsize_t(item);
|
||||||
if (i < 0)
|
|
||||||
i += PyTuple_GET_SIZE(self);
|
|
||||||
return tupleitem(self, i);
|
|
||||||
}
|
|
||||||
else if (PyLong_Check(item)) {
|
|
||||||
long i = PyLong_AsLong(item);
|
|
||||||
if (i == -1 && PyErr_Occurred())
|
if (i == -1 && PyErr_Occurred())
|
||||||
return NULL;
|
return NULL;
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
|
@ -599,7 +595,7 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
|
||||||
return tupleitem(self, i);
|
return tupleitem(self, i);
|
||||||
}
|
}
|
||||||
else if (PySlice_Check(item)) {
|
else if (PySlice_Check(item)) {
|
||||||
int start, stop, step, slicelength, cur, i;
|
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||||
PyObject* result;
|
PyObject* result;
|
||||||
PyObject* it;
|
PyObject* it;
|
||||||
PyObject **src, **dest;
|
PyObject **src, **dest;
|
||||||
|
@ -648,7 +644,7 @@ static PyMethodDef tuple_methods[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyMappingMethods tuple_as_mapping = {
|
static PyMappingMethods tuple_as_mapping = {
|
||||||
(inquiry)tuplelength,
|
(lenfunc)tuplelength,
|
||||||
(binaryfunc)tuplesubscript,
|
(binaryfunc)tuplesubscript,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
@ -707,12 +703,12 @@ PyTypeObject PyTuple_Type = {
|
||||||
known to some other part of the code. */
|
known to some other part of the code. */
|
||||||
|
|
||||||
int
|
int
|
||||||
_PyTuple_Resize(PyObject **pv, int newsize)
|
_PyTuple_Resize(PyObject **pv, Py_ssize_t newsize)
|
||||||
{
|
{
|
||||||
register PyTupleObject *v;
|
register PyTupleObject *v;
|
||||||
register PyTupleObject *sv;
|
register PyTupleObject *sv;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
int oldsize;
|
Py_ssize_t oldsize;
|
||||||
|
|
||||||
v = (PyTupleObject *) *pv;
|
v = (PyTupleObject *) *pv;
|
||||||
if (v == NULL || v->ob_type != &PyTuple_Type ||
|
if (v == NULL || v->ob_type != &PyTuple_Type ||
|
||||||
|
@ -854,7 +850,7 @@ tupleiter_next(tupleiterobject *it)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
tupleiter_len(tupleiterobject *it)
|
tupleiter_len(tupleiterobject *it)
|
||||||
{
|
{
|
||||||
int len = 0;
|
long len = 0;
|
||||||
if (it->it_seq)
|
if (it->it_seq)
|
||||||
len = PyTuple_GET_SIZE(it->it_seq) - it->it_index;
|
len = PyTuple_GET_SIZE(it->it_seq) - it->it_index;
|
||||||
return PyInt_FromLong(len);
|
return PyInt_FromLong(len);
|
||||||
|
|
|
@ -145,7 +145,7 @@ mro_subclasses(PyTypeObject *type, PyObject* temp)
|
||||||
{
|
{
|
||||||
PyTypeObject *subclass;
|
PyTypeObject *subclass;
|
||||||
PyObject *ref, *subclasses, *old_mro;
|
PyObject *ref, *subclasses, *old_mro;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
subclasses = type->tp_subclasses;
|
subclasses = type->tp_subclasses;
|
||||||
if (subclasses == NULL)
|
if (subclasses == NULL)
|
||||||
|
@ -184,7 +184,8 @@ mro_subclasses(PyTypeObject *type, PyObject* temp)
|
||||||
static int
|
static int
|
||||||
type_set_bases(PyTypeObject *type, PyObject *value, void *context)
|
type_set_bases(PyTypeObject *type, PyObject *value, void *context)
|
||||||
{
|
{
|
||||||
int i, r = 0;
|
Py_ssize_t i;
|
||||||
|
int r = 0;
|
||||||
PyObject *ob, *temp;
|
PyObject *ob, *temp;
|
||||||
PyTypeObject *new_base, *old_base;
|
PyTypeObject *new_base, *old_base;
|
||||||
PyObject *old_bases, *old_mro;
|
PyObject *old_bases, *old_mro;
|
||||||
|
@ -443,7 +444,7 @@ type_call(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyType_GenericAlloc(PyTypeObject *type, int nitems)
|
PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
|
||||||
{
|
{
|
||||||
PyObject *obj;
|
PyObject *obj;
|
||||||
const size_t size = _PyObject_VAR_SIZE(type, nitems+1);
|
const size_t size = _PyObject_VAR_SIZE(type, nitems+1);
|
||||||
|
@ -483,7 +484,7 @@ PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
static int
|
static int
|
||||||
traverse_slots(PyTypeObject *type, PyObject *self, visitproc visit, void *arg)
|
traverse_slots(PyTypeObject *type, PyObject *self, visitproc visit, void *arg)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyMemberDef *mp;
|
PyMemberDef *mp;
|
||||||
|
|
||||||
n = type->ob_size;
|
n = type->ob_size;
|
||||||
|
@ -548,7 +549,7 @@ subtype_traverse(PyObject *self, visitproc visit, void *arg)
|
||||||
static void
|
static void
|
||||||
clear_slots(PyTypeObject *type, PyObject *self)
|
clear_slots(PyTypeObject *type, PyObject *self)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyMemberDef *mp;
|
PyMemberDef *mp;
|
||||||
|
|
||||||
n = type->ob_size;
|
n = type->ob_size;
|
||||||
|
@ -825,7 +826,7 @@ PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
|
||||||
if (mro != NULL) {
|
if (mro != NULL) {
|
||||||
/* Deal with multiple inheritance without recursion
|
/* Deal with multiple inheritance without recursion
|
||||||
by walking the MRO tuple */
|
by walking the MRO tuple */
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
assert(PyTuple_Check(mro));
|
assert(PyTuple_Check(mro));
|
||||||
n = PyTuple_GET_SIZE(mro);
|
n = PyTuple_GET_SIZE(mro);
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
|
@ -970,7 +971,7 @@ static int
|
||||||
fill_classic_mro(PyObject *mro, PyObject *cls)
|
fill_classic_mro(PyObject *mro, PyObject *cls)
|
||||||
{
|
{
|
||||||
PyObject *bases, *base;
|
PyObject *bases, *base;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
assert(PyList_Check(mro));
|
assert(PyList_Check(mro));
|
||||||
assert(PyClass_Check(cls));
|
assert(PyClass_Check(cls));
|
||||||
|
@ -1037,7 +1038,7 @@ classic_mro(PyObject *cls)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
tail_contains(PyObject *list, int whence, PyObject *o) {
|
tail_contains(PyObject *list, int whence, PyObject *o) {
|
||||||
int j, size;
|
Py_ssize_t j, size;
|
||||||
size = PyList_GET_SIZE(list);
|
size = PyList_GET_SIZE(list);
|
||||||
|
|
||||||
for (j = whence+1; j < size; j++) {
|
for (j = whence+1; j < size; j++) {
|
||||||
|
@ -1068,7 +1069,7 @@ class_name(PyObject *cls)
|
||||||
static int
|
static int
|
||||||
check_duplicates(PyObject *list)
|
check_duplicates(PyObject *list)
|
||||||
{
|
{
|
||||||
int i, j, n;
|
Py_ssize_t i, j, n;
|
||||||
/* Let's use a quadratic time algorithm,
|
/* Let's use a quadratic time algorithm,
|
||||||
assuming that the bases lists is short.
|
assuming that the bases lists is short.
|
||||||
*/
|
*/
|
||||||
|
@ -1101,7 +1102,7 @@ check_duplicates(PyObject *list)
|
||||||
static void
|
static void
|
||||||
set_mro_error(PyObject *to_merge, int *remain)
|
set_mro_error(PyObject *to_merge, int *remain)
|
||||||
{
|
{
|
||||||
int i, n, off, to_merge_size;
|
Py_ssize_t i, n, off, to_merge_size;
|
||||||
char buf[1000];
|
char buf[1000];
|
||||||
PyObject *k, *v;
|
PyObject *k, *v;
|
||||||
PyObject *set = PyDict_New();
|
PyObject *set = PyDict_New();
|
||||||
|
@ -1136,9 +1137,9 @@ consistent method resolution\norder (MRO) for bases");
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pmerge(PyObject *acc, PyObject* to_merge) {
|
pmerge(PyObject *acc, PyObject* to_merge) {
|
||||||
int i, j, to_merge_size;
|
Py_ssize_t i, j, to_merge_size, empty_cnt;
|
||||||
int *remain;
|
int *remain;
|
||||||
int ok, empty_cnt;
|
int ok;
|
||||||
|
|
||||||
to_merge_size = PyList_GET_SIZE(to_merge);
|
to_merge_size = PyList_GET_SIZE(to_merge);
|
||||||
|
|
||||||
|
@ -1206,7 +1207,8 @@ pmerge(PyObject *acc, PyObject* to_merge) {
|
||||||
static PyObject *
|
static PyObject *
|
||||||
mro_implementation(PyTypeObject *type)
|
mro_implementation(PyTypeObject *type)
|
||||||
{
|
{
|
||||||
int i, n, ok;
|
Py_ssize_t i, n;
|
||||||
|
int ok;
|
||||||
PyObject *bases, *result;
|
PyObject *bases, *result;
|
||||||
PyObject *to_merge, *bases_aslist;
|
PyObject *to_merge, *bases_aslist;
|
||||||
|
|
||||||
|
@ -1309,7 +1311,7 @@ mro_internal(PyTypeObject *type)
|
||||||
if (tuple == NULL)
|
if (tuple == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
if (checkit) {
|
if (checkit) {
|
||||||
int i, len;
|
Py_ssize_t i, len;
|
||||||
PyObject *cls;
|
PyObject *cls;
|
||||||
PyTypeObject *solid;
|
PyTypeObject *solid;
|
||||||
|
|
||||||
|
@ -1350,7 +1352,7 @@ mro_internal(PyTypeObject *type)
|
||||||
static PyTypeObject *
|
static PyTypeObject *
|
||||||
best_base(PyObject *bases)
|
best_base(PyObject *bases)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyTypeObject *base, *winner, *candidate, *base_i;
|
PyTypeObject *base, *winner, *candidate, *base_i;
|
||||||
PyObject *base_proto;
|
PyObject *base_proto;
|
||||||
|
|
||||||
|
@ -1532,7 +1534,7 @@ static int
|
||||||
valid_identifier(PyObject *s)
|
valid_identifier(PyObject *s)
|
||||||
{
|
{
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
if (!PyString_Check(s)) {
|
if (!PyString_Check(s)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
@ -1564,7 +1566,7 @@ _unicode_to_string(PyObject *slots, int nslots)
|
||||||
PyObject *tmp = slots;
|
PyObject *tmp = slots;
|
||||||
PyObject *o, *o1;
|
PyObject *o, *o1;
|
||||||
int i;
|
int i;
|
||||||
intintargfunc copy = slots->ob_type->tp_as_sequence->sq_slice;
|
ssizessizeargfunc copy = slots->ob_type->tp_as_sequence->sq_slice;
|
||||||
for (i = 0; i < nslots; i++) {
|
for (i = 0; i < nslots; i++) {
|
||||||
if (PyUnicode_Check(o = PyTuple_GET_ITEM(tmp, i))) {
|
if (PyUnicode_Check(o = PyTuple_GET_ITEM(tmp, i))) {
|
||||||
if (tmp == slots) {
|
if (tmp == slots) {
|
||||||
|
@ -1596,7 +1598,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
||||||
PyTypeObject *type, *base, *tmptype, *winner;
|
PyTypeObject *type, *base, *tmptype, *winner;
|
||||||
PyHeapTypeObject *et;
|
PyHeapTypeObject *et;
|
||||||
PyMemberDef *mp;
|
PyMemberDef *mp;
|
||||||
int i, nbases, nslots, slotoffset, add_dict, add_weak;
|
Py_ssize_t i, nbases, nslots, slotoffset, add_dict, add_weak;
|
||||||
int j, may_add_dict, may_add_weak;
|
int j, may_add_dict, may_add_weak;
|
||||||
|
|
||||||
assert(args != NULL && PyTuple_Check(args));
|
assert(args != NULL && PyTuple_Check(args));
|
||||||
|
@ -1604,8 +1606,8 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
||||||
|
|
||||||
/* Special case: type(x) should return x->ob_type */
|
/* Special case: type(x) should return x->ob_type */
|
||||||
{
|
{
|
||||||
const int nargs = PyTuple_GET_SIZE(args);
|
const Py_ssize_t nargs = PyTuple_GET_SIZE(args);
|
||||||
const int nkwds = kwds == NULL ? 0 : PyDict_Size(kwds);
|
const Py_ssize_t nkwds = kwds == NULL ? 0 : PyDict_Size(kwds);
|
||||||
|
|
||||||
if (PyType_CheckExact(metatype) && nargs == 1 && nkwds == 0) {
|
if (PyType_CheckExact(metatype) && nargs == 1 && nkwds == 0) {
|
||||||
PyObject *x = PyTuple_GET_ITEM(args, 0);
|
PyObject *x = PyTuple_GET_ITEM(args, 0);
|
||||||
|
@ -1999,7 +2001,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
||||||
PyObject *
|
PyObject *
|
||||||
_PyType_Lookup(PyTypeObject *type, PyObject *name)
|
_PyType_Lookup(PyTypeObject *type, PyObject *name)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *mro, *res, *base, *dict;
|
PyObject *mro, *res, *base, *dict;
|
||||||
|
|
||||||
/* Look in tp_dict of types in MRO */
|
/* Look in tp_dict of types in MRO */
|
||||||
|
@ -2154,7 +2156,7 @@ static PyObject *
|
||||||
type_subclasses(PyTypeObject *type, PyObject *args_ignored)
|
type_subclasses(PyTypeObject *type, PyObject *args_ignored)
|
||||||
{
|
{
|
||||||
PyObject *list, *raw, *ref;
|
PyObject *list, *raw, *ref;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
list = PyList_New(0);
|
list = PyList_New(0);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
|
@ -2587,7 +2589,7 @@ reduce_2(PyObject *obj)
|
||||||
PyObject *getstate = NULL, *state = NULL, *names = NULL;
|
PyObject *getstate = NULL, *state = NULL, *names = NULL;
|
||||||
PyObject *slots = NULL, *listitems = NULL, *dictitems = NULL;
|
PyObject *slots = NULL, *listitems = NULL, *dictitems = NULL;
|
||||||
PyObject *copy_reg = NULL, *newobj = NULL, *res = NULL;
|
PyObject *copy_reg = NULL, *newobj = NULL, *res = NULL;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
cls = PyObject_GetAttrString(obj, "__class__");
|
cls = PyObject_GetAttrString(obj, "__class__");
|
||||||
if (cls == NULL)
|
if (cls == NULL)
|
||||||
|
@ -3155,7 +3157,7 @@ PyType_Ready(PyTypeObject *type)
|
||||||
{
|
{
|
||||||
PyObject *dict, *bases;
|
PyObject *dict, *bases;
|
||||||
PyTypeObject *base;
|
PyTypeObject *base;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
if (type->tp_flags & Py_TPFLAGS_READY) {
|
if (type->tp_flags & Py_TPFLAGS_READY) {
|
||||||
assert(type->tp_dict != NULL);
|
assert(type->tp_dict != NULL);
|
||||||
|
@ -3340,7 +3342,7 @@ add_subclass(PyTypeObject *base, PyTypeObject *type)
|
||||||
static void
|
static void
|
||||||
remove_subclass(PyTypeObject *base, PyTypeObject *type)
|
remove_subclass(PyTypeObject *base, PyTypeObject *type)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
PyObject *list, *ref;
|
PyObject *list, *ref;
|
||||||
|
|
||||||
list = base->tp_subclasses;
|
list = base->tp_subclasses;
|
||||||
|
@ -3370,9 +3372,10 @@ check_num_args(PyObject *ob, int n)
|
||||||
}
|
}
|
||||||
if (n == PyTuple_GET_SIZE(ob))
|
if (n == PyTuple_GET_SIZE(ob))
|
||||||
return 1;
|
return 1;
|
||||||
|
/* XXX %zd? */
|
||||||
PyErr_Format(
|
PyErr_Format(
|
||||||
PyExc_TypeError,
|
PyExc_TypeError,
|
||||||
"expected %d arguments, got %d", n, PyTuple_GET_SIZE(ob));
|
"expected %d arguments, got %d", n, (int)PyTuple_GET_SIZE(ob));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3385,10 +3388,10 @@ check_num_args(PyObject *ob, int n)
|
||||||
entries, one regular and one with reversed arguments. */
|
entries, one regular and one with reversed arguments. */
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_inquiry(PyObject *self, PyObject *args, void *wrapped)
|
wrap_lenfunc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
inquiry func = (inquiry)wrapped;
|
lenfunc func = (lenfunc)wrapped;
|
||||||
int res;
|
Py_ssize_t res;
|
||||||
|
|
||||||
if (!check_num_args(args, 0))
|
if (!check_num_args(args, 0))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3525,28 +3528,28 @@ wrap_unaryfunc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_intargfunc(PyObject *self, PyObject *args, void *wrapped)
|
wrap_ssizeargfunc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intargfunc func = (intargfunc)wrapped;
|
ssizeargfunc func = (ssizeargfunc)wrapped;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "i", &i))
|
if (!PyArg_ParseTuple(args, "n", &i))
|
||||||
return NULL;
|
return NULL;
|
||||||
return (*func)(self, i);
|
return (*func)(self, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
getindex(PyObject *self, PyObject *arg)
|
getindex(PyObject *self, PyObject *arg)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
i = PyInt_AsLong(arg);
|
i = PyInt_AsSsize_t(arg);
|
||||||
if (i == -1 && PyErr_Occurred())
|
if (i == -1 && PyErr_Occurred())
|
||||||
return -1;
|
return -1;
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
PySequenceMethods *sq = self->ob_type->tp_as_sequence;
|
PySequenceMethods *sq = self->ob_type->tp_as_sequence;
|
||||||
if (sq && sq->sq_length) {
|
if (sq && sq->sq_length) {
|
||||||
int n = (*sq->sq_length)(self);
|
Py_ssize_t n = (*sq->sq_length)(self);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
return -1;
|
return -1;
|
||||||
i += n;
|
i += n;
|
||||||
|
@ -3558,9 +3561,9 @@ getindex(PyObject *self, PyObject *arg)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_sq_item(PyObject *self, PyObject *args, void *wrapped)
|
wrap_sq_item(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intargfunc func = (intargfunc)wrapped;
|
ssizeargfunc func = (ssizeargfunc)wrapped;
|
||||||
PyObject *arg;
|
PyObject *arg;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (PyTuple_GET_SIZE(args) == 1) {
|
if (PyTuple_GET_SIZE(args) == 1) {
|
||||||
arg = PyTuple_GET_ITEM(args, 0);
|
arg = PyTuple_GET_ITEM(args, 0);
|
||||||
|
@ -3575,12 +3578,12 @@ wrap_sq_item(PyObject *self, PyObject *args, void *wrapped)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_intintargfunc(PyObject *self, PyObject *args, void *wrapped)
|
wrap_ssizessizeargfunc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intintargfunc func = (intintargfunc)wrapped;
|
ssizessizeargfunc func = (ssizessizeargfunc)wrapped;
|
||||||
int i, j;
|
Py_ssize_t i, j;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "ii", &i, &j))
|
if (!PyArg_ParseTuple(args, "nn", &i, &j))
|
||||||
return NULL;
|
return NULL;
|
||||||
return (*func)(self, i, j);
|
return (*func)(self, i, j);
|
||||||
}
|
}
|
||||||
|
@ -3588,8 +3591,9 @@ wrap_intintargfunc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_sq_setitem(PyObject *self, PyObject *args, void *wrapped)
|
wrap_sq_setitem(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intobjargproc func = (intobjargproc)wrapped;
|
ssizeobjargproc func = (ssizeobjargproc)wrapped;
|
||||||
int i, res;
|
Py_ssize_t i;
|
||||||
|
int res;
|
||||||
PyObject *arg, *value;
|
PyObject *arg, *value;
|
||||||
|
|
||||||
if (!PyArg_UnpackTuple(args, "", 2, 2, &arg, &value))
|
if (!PyArg_UnpackTuple(args, "", 2, 2, &arg, &value))
|
||||||
|
@ -3607,8 +3611,9 @@ wrap_sq_setitem(PyObject *self, PyObject *args, void *wrapped)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_sq_delitem(PyObject *self, PyObject *args, void *wrapped)
|
wrap_sq_delitem(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intobjargproc func = (intobjargproc)wrapped;
|
ssizeobjargproc func = (ssizeobjargproc)wrapped;
|
||||||
int i, res;
|
Py_ssize_t i;
|
||||||
|
int res;
|
||||||
PyObject *arg;
|
PyObject *arg;
|
||||||
|
|
||||||
if (!check_num_args(args, 1))
|
if (!check_num_args(args, 1))
|
||||||
|
@ -3625,13 +3630,14 @@ wrap_sq_delitem(PyObject *self, PyObject *args, void *wrapped)
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_intintobjargproc(PyObject *self, PyObject *args, void *wrapped)
|
wrap_ssizessizeobjargproc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intintobjargproc func = (intintobjargproc)wrapped;
|
ssizessizeobjargproc func = (ssizessizeobjargproc)wrapped;
|
||||||
int i, j, res;
|
Py_ssize_t i, j;
|
||||||
|
int res;
|
||||||
PyObject *value;
|
PyObject *value;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "iiO", &i, &j, &value))
|
if (!PyArg_ParseTuple(args, "nnO", &i, &j, &value))
|
||||||
return NULL;
|
return NULL;
|
||||||
res = (*func)(self, i, j, value);
|
res = (*func)(self, i, j, value);
|
||||||
if (res == -1 && PyErr_Occurred())
|
if (res == -1 && PyErr_Occurred())
|
||||||
|
@ -3643,10 +3649,11 @@ wrap_intintobjargproc(PyObject *self, PyObject *args, void *wrapped)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
wrap_delslice(PyObject *self, PyObject *args, void *wrapped)
|
wrap_delslice(PyObject *self, PyObject *args, void *wrapped)
|
||||||
{
|
{
|
||||||
intintobjargproc func = (intintobjargproc)wrapped;
|
ssizessizeobjargproc func = (ssizessizeobjargproc)wrapped;
|
||||||
int i, j, res;
|
Py_ssize_t i, j;
|
||||||
|
int res;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "ii", &i, &j))
|
if (!PyArg_ParseTuple(args, "nn", &i, &j))
|
||||||
return NULL;
|
return NULL;
|
||||||
res = (*func)(self, i, j, NULL);
|
res = (*func)(self, i, j, NULL);
|
||||||
if (res == -1 && PyErr_Occurred())
|
if (res == -1 && PyErr_Occurred())
|
||||||
|
@ -4099,23 +4106,23 @@ FUNCNAME(PyObject *self, ARG1TYPE arg1, ARG2TYPE arg2) \
|
||||||
"(" ARGCODES ")", arg1, arg2); \
|
"(" ARGCODES ")", arg1, arg2); \
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
slot_sq_length(PyObject *self)
|
slot_sq_length(PyObject *self)
|
||||||
{
|
{
|
||||||
static PyObject *len_str;
|
static PyObject *len_str;
|
||||||
PyObject *res = call_method(self, "__len__", &len_str, "()");
|
PyObject *res = call_method(self, "__len__", &len_str, "()");
|
||||||
long temp;
|
Py_ssize_t temp;
|
||||||
int len;
|
Py_ssize_t len;
|
||||||
|
|
||||||
if (res == NULL)
|
if (res == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
temp = PyInt_AsLong(res);
|
temp = PyInt_AsSsize_t(res);
|
||||||
len = (int)temp;
|
len = (int)temp;
|
||||||
Py_DECREF(res);
|
Py_DECREF(res);
|
||||||
if (len == -1 && PyErr_Occurred())
|
if (len == -1 && PyErr_Occurred())
|
||||||
return -1;
|
return -1;
|
||||||
#if SIZEOF_INT < SIZEOF_LONG
|
#if SIZEOF_SIZE_T < SIZEOF_LONG
|
||||||
/* Overflow check -- range of PyInt is more than C int */
|
/* Overflow check -- range of PyInt is more than C ssize_t */
|
||||||
if (len != temp) {
|
if (len != temp) {
|
||||||
PyErr_SetString(PyExc_OverflowError,
|
PyErr_SetString(PyExc_OverflowError,
|
||||||
"__len__() should return 0 <= outcome < 2**31");
|
"__len__() should return 0 <= outcome < 2**31");
|
||||||
|
@ -4133,7 +4140,7 @@ slot_sq_length(PyObject *self)
|
||||||
/* Super-optimized version of slot_sq_item.
|
/* Super-optimized version of slot_sq_item.
|
||||||
Other slots could do the same... */
|
Other slots could do the same... */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
slot_sq_item(PyObject *self, int i)
|
slot_sq_item(PyObject *self, Py_ssize_t i)
|
||||||
{
|
{
|
||||||
static PyObject *getitem_str;
|
static PyObject *getitem_str;
|
||||||
PyObject *func, *args = NULL, *ival = NULL, *retval = NULL;
|
PyObject *func, *args = NULL, *ival = NULL, *retval = NULL;
|
||||||
|
@ -4175,10 +4182,10 @@ slot_sq_item(PyObject *self, int i)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SLOT2(slot_sq_slice, "__getslice__", int, int, "ii")
|
SLOT2(slot_sq_slice, "__getslice__", Py_ssize_t, Py_ssize_t, "nn")
|
||||||
|
|
||||||
static int
|
static int
|
||||||
slot_sq_ass_item(PyObject *self, int index, PyObject *value)
|
slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
|
||||||
{
|
{
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
static PyObject *delitem_str, *setitem_str;
|
static PyObject *delitem_str, *setitem_str;
|
||||||
|
@ -4196,7 +4203,7 @@ slot_sq_ass_item(PyObject *self, int index, PyObject *value)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
slot_sq_ass_slice(PyObject *self, int i, int j, PyObject *value)
|
slot_sq_ass_slice(PyObject *self, Py_ssize_t i, Py_ssize_t j, PyObject *value)
|
||||||
{
|
{
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
static PyObject *delslice_str, *setslice_str;
|
static PyObject *delslice_str, *setslice_str;
|
||||||
|
@ -4428,7 +4435,7 @@ half_compare(PyObject *self, PyObject *other)
|
||||||
{
|
{
|
||||||
PyObject *func, *args, *res;
|
PyObject *func, *args, *res;
|
||||||
static PyObject *cmp_str;
|
static PyObject *cmp_str;
|
||||||
int c;
|
Py_ssize_t c;
|
||||||
|
|
||||||
func = lookup_method(self, "__cmp__", &cmp_str);
|
func = lookup_method(self, "__cmp__", &cmp_str);
|
||||||
if (func == NULL) {
|
if (func == NULL) {
|
||||||
|
@ -4806,7 +4813,7 @@ slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
static PyObject *new_str;
|
static PyObject *new_str;
|
||||||
PyObject *func;
|
PyObject *func;
|
||||||
PyObject *newargs, *x;
|
PyObject *newargs, *x;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
if (new_str == NULL) {
|
if (new_str == NULL) {
|
||||||
new_str = PyString_InternFromString("__new__");
|
new_str = PyString_InternFromString("__new__");
|
||||||
|
@ -4953,7 +4960,7 @@ typedef struct wrapperbase slotdef;
|
||||||
"x." NAME "(y) <==> " DOC)
|
"x." NAME "(y) <==> " DOC)
|
||||||
|
|
||||||
static slotdef slotdefs[] = {
|
static slotdef slotdefs[] = {
|
||||||
SQSLOT("__len__", sq_length, slot_sq_length, wrap_inquiry,
|
SQSLOT("__len__", sq_length, slot_sq_length, wrap_lenfunc,
|
||||||
"x.__len__() <==> len(x)"),
|
"x.__len__() <==> len(x)"),
|
||||||
/* Heap types defining __add__/__mul__ have sq_concat/sq_repeat == NULL.
|
/* Heap types defining __add__/__mul__ have sq_concat/sq_repeat == NULL.
|
||||||
The logic in abstract.c always falls back to nb_add/nb_multiply in
|
The logic in abstract.c always falls back to nb_add/nb_multiply in
|
||||||
|
@ -4962,13 +4969,13 @@ static slotdef slotdefs[] = {
|
||||||
test_descr.notimplemented() */
|
test_descr.notimplemented() */
|
||||||
SQSLOT("__add__", sq_concat, NULL, wrap_binaryfunc,
|
SQSLOT("__add__", sq_concat, NULL, wrap_binaryfunc,
|
||||||
"x.__add__(y) <==> x+y"),
|
"x.__add__(y) <==> x+y"),
|
||||||
SQSLOT("__mul__", sq_repeat, NULL, wrap_intargfunc,
|
SQSLOT("__mul__", sq_repeat, NULL, wrap_ssizeargfunc,
|
||||||
"x.__mul__(n) <==> x*n"),
|
"x.__mul__(n) <==> x*n"),
|
||||||
SQSLOT("__rmul__", sq_repeat, NULL, wrap_intargfunc,
|
SQSLOT("__rmul__", sq_repeat, NULL, wrap_ssizeargfunc,
|
||||||
"x.__rmul__(n) <==> n*x"),
|
"x.__rmul__(n) <==> n*x"),
|
||||||
SQSLOT("__getitem__", sq_item, slot_sq_item, wrap_sq_item,
|
SQSLOT("__getitem__", sq_item, slot_sq_item, wrap_sq_item,
|
||||||
"x.__getitem__(y) <==> x[y]"),
|
"x.__getitem__(y) <==> x[y]"),
|
||||||
SQSLOT("__getslice__", sq_slice, slot_sq_slice, wrap_intintargfunc,
|
SQSLOT("__getslice__", sq_slice, slot_sq_slice, wrap_ssizessizeargfunc,
|
||||||
"x.__getslice__(i, j) <==> x[i:j]\n\
|
"x.__getslice__(i, j) <==> x[i:j]\n\
|
||||||
\n\
|
\n\
|
||||||
Use of negative indices is not supported."),
|
Use of negative indices is not supported."),
|
||||||
|
@ -4977,7 +4984,7 @@ static slotdef slotdefs[] = {
|
||||||
SQSLOT("__delitem__", sq_ass_item, slot_sq_ass_item, wrap_sq_delitem,
|
SQSLOT("__delitem__", sq_ass_item, slot_sq_ass_item, wrap_sq_delitem,
|
||||||
"x.__delitem__(y) <==> del x[y]"),
|
"x.__delitem__(y) <==> del x[y]"),
|
||||||
SQSLOT("__setslice__", sq_ass_slice, slot_sq_ass_slice,
|
SQSLOT("__setslice__", sq_ass_slice, slot_sq_ass_slice,
|
||||||
wrap_intintobjargproc,
|
wrap_ssizessizeobjargproc,
|
||||||
"x.__setslice__(i, j, y) <==> x[i:j]=y\n\
|
"x.__setslice__(i, j, y) <==> x[i:j]=y\n\
|
||||||
\n\
|
\n\
|
||||||
Use of negative indices is not supported."),
|
Use of negative indices is not supported."),
|
||||||
|
@ -4990,9 +4997,9 @@ static slotdef slotdefs[] = {
|
||||||
SQSLOT("__iadd__", sq_inplace_concat, NULL,
|
SQSLOT("__iadd__", sq_inplace_concat, NULL,
|
||||||
wrap_binaryfunc, "x.__iadd__(y) <==> x+=y"),
|
wrap_binaryfunc, "x.__iadd__(y) <==> x+=y"),
|
||||||
SQSLOT("__imul__", sq_inplace_repeat, NULL,
|
SQSLOT("__imul__", sq_inplace_repeat, NULL,
|
||||||
wrap_intargfunc, "x.__imul__(y) <==> x*=y"),
|
wrap_ssizeargfunc, "x.__imul__(y) <==> x*=y"),
|
||||||
|
|
||||||
MPSLOT("__len__", mp_length, slot_mp_length, wrap_inquiry,
|
MPSLOT("__len__", mp_length, slot_mp_length, wrap_lenfunc,
|
||||||
"x.__len__() <==> len(x)"),
|
"x.__len__() <==> len(x)"),
|
||||||
MPSLOT("__getitem__", mp_subscript, slot_mp_subscript,
|
MPSLOT("__getitem__", mp_subscript, slot_mp_subscript,
|
||||||
wrap_binaryfunc,
|
wrap_binaryfunc,
|
||||||
|
@ -5152,9 +5159,10 @@ static slotdef slotdefs[] = {
|
||||||
proper indirection pointer (as_buffer, etc.); it returns NULL if the
|
proper indirection pointer (as_buffer, etc.); it returns NULL if the
|
||||||
indirection pointer is NULL. */
|
indirection pointer is NULL. */
|
||||||
static void **
|
static void **
|
||||||
slotptr(PyTypeObject *type, int offset)
|
slotptr(PyTypeObject *type, int ioffset)
|
||||||
{
|
{
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
long offset = ioffset;
|
||||||
|
|
||||||
/* Note: this depends on the order of the members of PyHeapTypeObject! */
|
/* Note: this depends on the order of the members of PyHeapTypeObject! */
|
||||||
assert(offset >= 0);
|
assert(offset >= 0);
|
||||||
|
@ -5320,7 +5328,9 @@ slotdef_cmp(const void *aa, const void *bb)
|
||||||
if (c != 0)
|
if (c != 0)
|
||||||
return c;
|
return c;
|
||||||
else
|
else
|
||||||
return a - b;
|
/* Cannot use a-b, as this gives off_t,
|
||||||
|
which may lose precision when converted to int. */
|
||||||
|
return (a > b) ? 1 : (a < b) ? -1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the slotdefs table by adding interned string objects for the
|
/* Initialize the slotdefs table by adding interned string objects for the
|
||||||
|
@ -5417,7 +5427,7 @@ recurse_down_subclasses(PyTypeObject *type, PyObject *name,
|
||||||
{
|
{
|
||||||
PyTypeObject *subclass;
|
PyTypeObject *subclass;
|
||||||
PyObject *ref, *subclasses, *dict;
|
PyObject *ref, *subclasses, *dict;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
subclasses = type->tp_subclasses;
|
subclasses = type->tp_subclasses;
|
||||||
if (subclasses == NULL)
|
if (subclasses == NULL)
|
||||||
|
@ -5570,7 +5580,7 @@ super_getattro(PyObject *self, PyObject *name)
|
||||||
PyObject *mro, *res, *tmp, *dict;
|
PyObject *mro, *res, *tmp, *dict;
|
||||||
PyTypeObject *starttype;
|
PyTypeObject *starttype;
|
||||||
descrgetfunc f;
|
descrgetfunc f;
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
starttype = su->obj_type;
|
starttype = su->obj_type;
|
||||||
mro = starttype->tp_mro;
|
mro = starttype->tp_mro;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -520,7 +520,7 @@ proxy_dealloc(PyWeakReference *self)
|
||||||
/* sequence slots */
|
/* sequence slots */
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
proxy_slice(PyWeakReference *proxy, int i, int j)
|
proxy_slice(PyWeakReference *proxy, Py_ssize_t i, Py_ssize_t j)
|
||||||
{
|
{
|
||||||
if (!proxy_checkref(proxy))
|
if (!proxy_checkref(proxy))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -528,7 +528,7 @@ proxy_slice(PyWeakReference *proxy, int i, int j)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
proxy_ass_slice(PyWeakReference *proxy, int i, int j, PyObject *value)
|
proxy_ass_slice(PyWeakReference *proxy, Py_ssize_t i, Py_ssize_t j, PyObject *value)
|
||||||
{
|
{
|
||||||
if (!proxy_checkref(proxy))
|
if (!proxy_checkref(proxy))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -546,7 +546,7 @@ proxy_contains(PyWeakReference *proxy, PyObject *value)
|
||||||
|
|
||||||
/* mapping slots */
|
/* mapping slots */
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
proxy_length(PyWeakReference *proxy)
|
proxy_length(PyWeakReference *proxy)
|
||||||
{
|
{
|
||||||
if (!proxy_checkref(proxy))
|
if (!proxy_checkref(proxy))
|
||||||
|
@ -625,18 +625,18 @@ static PyNumberMethods proxy_as_number = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static PySequenceMethods proxy_as_sequence = {
|
static PySequenceMethods proxy_as_sequence = {
|
||||||
(inquiry)proxy_length, /*sq_length*/
|
(lenfunc)proxy_length, /*sq_length*/
|
||||||
0, /*sq_concat*/
|
0, /*sq_concat*/
|
||||||
0, /*sq_repeat*/
|
0, /*sq_repeat*/
|
||||||
0, /*sq_item*/
|
0, /*sq_item*/
|
||||||
(intintargfunc)proxy_slice, /*sq_slice*/
|
(ssizessizeargfunc)proxy_slice, /*sq_slice*/
|
||||||
0, /*sq_ass_item*/
|
0, /*sq_ass_item*/
|
||||||
(intintobjargproc)proxy_ass_slice, /*sq_ass_slice*/
|
(ssizessizeobjargproc)proxy_ass_slice, /*sq_ass_slice*/
|
||||||
(objobjproc)proxy_contains, /* sq_contains */
|
(objobjproc)proxy_contains, /* sq_contains */
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyMappingMethods proxy_as_mapping = {
|
static PyMappingMethods proxy_as_mapping = {
|
||||||
(inquiry)proxy_length, /*mp_length*/
|
(lenfunc)proxy_length, /*mp_length*/
|
||||||
(binaryfunc)proxy_getitem, /*mp_subscript*/
|
(binaryfunc)proxy_getitem, /*mp_subscript*/
|
||||||
(objobjargproc)proxy_setitem, /*mp_ass_subscript*/
|
(objobjargproc)proxy_setitem, /*mp_ass_subscript*/
|
||||||
};
|
};
|
||||||
|
@ -886,7 +886,7 @@ PyObject_ClearWeakRefs(PyObject *object)
|
||||||
}
|
}
|
||||||
if (*list != NULL) {
|
if (*list != NULL) {
|
||||||
PyWeakReference *current = *list;
|
PyWeakReference *current = *list;
|
||||||
int count = _PyWeakref_GetWeakrefCount(current);
|
Py_ssize_t count = _PyWeakref_GetWeakrefCount(current);
|
||||||
int restore_error = PyErr_Occurred() ? 1 : 0;
|
int restore_error = PyErr_Occurred() ? 1 : 0;
|
||||||
PyObject *err_type, *err_value, *err_tb;
|
PyObject *err_type, *err_value, *err_tb;
|
||||||
|
|
||||||
|
@ -904,7 +904,7 @@ PyObject_ClearWeakRefs(PyObject *object)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PyObject *tuple = PyTuple_New(count * 2);
|
PyObject *tuple = PyTuple_New(count * 2);
|
||||||
int i = 0;
|
Py_ssize_t i = 0;
|
||||||
|
|
||||||
for (i = 0; i < count; ++i) {
|
for (i = 0; i < count; ++i) {
|
||||||
PyWeakReference *next = current->wr_next;
|
PyWeakReference *next = current->wr_next;
|
||||||
|
|
|
@ -169,7 +169,8 @@ join(char *buffer, char *stuff)
|
||||||
static int
|
static int
|
||||||
gotlandmark(char *landmark)
|
gotlandmark(char *landmark)
|
||||||
{
|
{
|
||||||
int n, ok;
|
int ok;
|
||||||
|
Py_ssize_t n;
|
||||||
|
|
||||||
n = strlen(prefix);
|
n = strlen(prefix);
|
||||||
join(prefix, landmark);
|
join(prefix, landmark);
|
||||||
|
@ -302,10 +303,11 @@ getpythonregpath(HKEY keyBase, int skipcore)
|
||||||
dataSize--;
|
dataSize--;
|
||||||
}
|
}
|
||||||
if (ppPaths[index]) {
|
if (ppPaths[index]) {
|
||||||
int len = _tcslen(ppPaths[index]);
|
Py_ssize_t len = _tcslen(ppPaths[index]);
|
||||||
_tcsncpy(szCur, ppPaths[index], len);
|
_tcsncpy(szCur, ppPaths[index], len);
|
||||||
szCur += len;
|
szCur += len;
|
||||||
dataSize -= len;
|
assert(dataSize > len);
|
||||||
|
dataSize -= (int)len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (skipcore)
|
if (skipcore)
|
||||||
|
@ -632,7 +634,7 @@ calculate_path(void)
|
||||||
char lookBuf[MAXPATHLEN+1];
|
char lookBuf[MAXPATHLEN+1];
|
||||||
char *look = buf - 1; /* 'buf' is at the end of the buffer */
|
char *look = buf - 1; /* 'buf' is at the end of the buffer */
|
||||||
while (1) {
|
while (1) {
|
||||||
int nchars;
|
Py_ssize_t nchars;
|
||||||
char *lookEnd = look;
|
char *lookEnd = look;
|
||||||
/* 'look' will end up one character before the
|
/* 'look' will end up one character before the
|
||||||
start of the path in question - even if this
|
start of the path in question - even if this
|
||||||
|
|
|
@ -18,7 +18,7 @@ extern const char *PyWin_DLLVersionString;
|
||||||
FILE *PyWin_FindRegisteredModule(const char *moduleName,
|
FILE *PyWin_FindRegisteredModule(const char *moduleName,
|
||||||
struct filedescr **ppFileDesc,
|
struct filedescr **ppFileDesc,
|
||||||
char *pathBuf,
|
char *pathBuf,
|
||||||
int pathLen)
|
Py_ssize_t pathLen)
|
||||||
{
|
{
|
||||||
char *moduleKey;
|
char *moduleKey;
|
||||||
const char keyPrefix[] = "Software\\Python\\PythonCore\\";
|
const char keyPrefix[] = "Software\\Python\\PythonCore\\";
|
||||||
|
@ -53,13 +53,14 @@ FILE *PyWin_FindRegisteredModule(const char *moduleName,
|
||||||
"Software\\Python\\PythonCore\\%s\\Modules\\%s%s",
|
"Software\\Python\\PythonCore\\%s\\Modules\\%s%s",
|
||||||
PyWin_DLLVersionString, moduleName, debugString);
|
PyWin_DLLVersionString, moduleName, debugString);
|
||||||
|
|
||||||
modNameSize = pathLen;
|
assert(pathLen < INT_MAX);
|
||||||
|
modNameSize = (int)pathLen;
|
||||||
regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize);
|
regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize);
|
||||||
if (regStat != ERROR_SUCCESS) {
|
if (regStat != ERROR_SUCCESS) {
|
||||||
/* No user setting - lookup in machine settings */
|
/* No user setting - lookup in machine settings */
|
||||||
keyBase = HKEY_LOCAL_MACHINE;
|
keyBase = HKEY_LOCAL_MACHINE;
|
||||||
/* be anal - failure may have reset size param */
|
/* be anal - failure may have reset size param */
|
||||||
modNameSize = pathLen;
|
modNameSize = (int)pathLen;
|
||||||
regStat = RegQueryValue(keyBase, moduleKey,
|
regStat = RegQueryValue(keyBase, moduleKey,
|
||||||
pathBuf, &modNameSize);
|
pathBuf, &modNameSize);
|
||||||
|
|
||||||
|
|
|
@ -117,6 +117,14 @@ MS_CORE_DLL.
|
||||||
#endif
|
#endif
|
||||||
#endif /* MS_WIN64 */
|
#endif /* MS_WIN64 */
|
||||||
|
|
||||||
|
/* Define like size_t, omitting the "unsigned" */
|
||||||
|
#ifdef MS_WIN64
|
||||||
|
typedef __int64 ssize_t;
|
||||||
|
#else
|
||||||
|
typedef _W64 int ssize_t;
|
||||||
|
#endif
|
||||||
|
#define HAVE_SSIZE_T 1
|
||||||
|
|
||||||
#if defined(MS_WIN32) && !defined(MS_WIN64)
|
#if defined(MS_WIN32) && !defined(MS_WIN64)
|
||||||
#ifdef _M_IX86
|
#ifdef _M_IX86
|
||||||
#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)")
|
#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)")
|
||||||
|
@ -253,6 +261,7 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
|
||||||
# define SIZEOF_OFF_T 4
|
# define SIZEOF_OFF_T 4
|
||||||
# define SIZEOF_FPOS_T 8
|
# define SIZEOF_FPOS_T 8
|
||||||
# define SIZEOF_HKEY 8
|
# define SIZEOF_HKEY 8
|
||||||
|
# define SIZEOF_SIZE_T 8
|
||||||
/* configure.in defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG,
|
/* configure.in defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG,
|
||||||
sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t).
|
sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t).
|
||||||
On Win64 the second condition is not true, but if fpos_t replaces off_t
|
On Win64 the second condition is not true, but if fpos_t replaces off_t
|
||||||
|
@ -267,6 +276,7 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
|
||||||
# define SIZEOF_OFF_T 4
|
# define SIZEOF_OFF_T 4
|
||||||
# define SIZEOF_FPOS_T 8
|
# define SIZEOF_FPOS_T 8
|
||||||
# define SIZEOF_HKEY 4
|
# define SIZEOF_HKEY 4
|
||||||
|
# define SIZEOF_SIZE_T 4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
|
@ -185,8 +185,9 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
|
||||||
if (tok->lineno <= 1 && tok->done == E_EOF)
|
if (tok->lineno <= 1 && tok->done == E_EOF)
|
||||||
err_ret->error = E_EOF;
|
err_ret->error = E_EOF;
|
||||||
err_ret->lineno = tok->lineno;
|
err_ret->lineno = tok->lineno;
|
||||||
err_ret->offset = tok->cur - tok->buf;
|
|
||||||
if (tok->buf != NULL) {
|
if (tok->buf != NULL) {
|
||||||
|
assert(tok->cur - tok->buf < INT_MAX);
|
||||||
|
err_ret->offset = (int)(tok->cur - tok->buf);
|
||||||
size_t len = tok->inp - tok->buf;
|
size_t len = tok->inp - tok->buf;
|
||||||
err_ret->text = (char *) PyObject_MALLOC(len + 1);
|
err_ret->text = (char *) PyObject_MALLOC(len + 1);
|
||||||
if (err_ret->text != NULL) {
|
if (err_ret->text != NULL) {
|
||||||
|
|
|
@ -170,7 +170,7 @@ error_ret(struct tok_state *tok) /* XXX */
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
new_string(const char *s, int len)
|
new_string(const char *s, Py_ssize_t len)
|
||||||
{
|
{
|
||||||
char* result = PyMem_NEW(char, len + 1);
|
char* result = PyMem_NEW(char, len + 1);
|
||||||
if (result != NULL) {
|
if (result != NULL) {
|
||||||
|
@ -206,9 +206,9 @@ get_normal_name(char *s) /* for utf-8 and latin-1 */
|
||||||
/* Return the coding spec in S, or NULL if none is found. */
|
/* Return the coding spec in S, or NULL if none is found. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
get_coding_spec(const char *s, int size)
|
get_coding_spec(const char *s, Py_ssize_t size)
|
||||||
{
|
{
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
/* Coding spec must be in a comment, and that comment must be
|
/* Coding spec must be in a comment, and that comment must be
|
||||||
* the only statement on the source code line. */
|
* the only statement on the source code line. */
|
||||||
for (i = 0; i < size - 6; i++) {
|
for (i = 0; i < size - 6; i++) {
|
||||||
|
@ -253,7 +253,7 @@ get_coding_spec(const char *s, int size)
|
||||||
Return 1 on success, 0 on failure. */
|
Return 1 on success, 0 on failure. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
check_coding_spec(const char* line, int size, struct tok_state *tok,
|
check_coding_spec(const char* line, Py_ssize_t size, struct tok_state *tok,
|
||||||
int set_readline(struct tok_state *, const char *))
|
int set_readline(struct tok_state *, const char *))
|
||||||
{
|
{
|
||||||
char * cs;
|
char * cs;
|
||||||
|
@ -820,7 +820,7 @@ tok_nextc(register struct tok_state *tok)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int done = 0;
|
int done = 0;
|
||||||
int cur = 0;
|
Py_ssize_t cur = 0;
|
||||||
char *pt;
|
char *pt;
|
||||||
if (tok->start == NULL) {
|
if (tok->start == NULL) {
|
||||||
if (tok->buf == NULL) {
|
if (tok->buf == NULL) {
|
||||||
|
@ -854,10 +854,10 @@ tok_nextc(register struct tok_state *tok)
|
||||||
tok->lineno++;
|
tok->lineno++;
|
||||||
/* Read until '\n' or EOF */
|
/* Read until '\n' or EOF */
|
||||||
while (!done) {
|
while (!done) {
|
||||||
int curstart = tok->start == NULL ? -1 :
|
Py_ssize_t curstart = tok->start == NULL ? -1 :
|
||||||
tok->start - tok->buf;
|
tok->start - tok->buf;
|
||||||
int curvalid = tok->inp - tok->buf;
|
Py_ssize_t curvalid = tok->inp - tok->buf;
|
||||||
int newsize = curvalid + BUFSIZ;
|
Py_ssize_t newsize = curvalid + BUFSIZ;
|
||||||
char *newbuf = tok->buf;
|
char *newbuf = tok->buf;
|
||||||
PyMem_RESIZE(newbuf, char, newsize);
|
PyMem_RESIZE(newbuf, char, newsize);
|
||||||
if (newbuf == NULL) {
|
if (newbuf == NULL) {
|
||||||
|
@ -1390,7 +1390,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end)
|
||||||
letter_quote:
|
letter_quote:
|
||||||
/* String */
|
/* String */
|
||||||
if (c == '\'' || c == '"') {
|
if (c == '\'' || c == '"') {
|
||||||
int quote2 = tok->cur - tok->start + 1;
|
Py_ssize_t quote2 = tok->cur - tok->start + 1;
|
||||||
int quote = c;
|
int quote = c;
|
||||||
int triple = 0;
|
int triple = 0;
|
||||||
int tripcount = 0;
|
int tripcount = 0;
|
||||||
|
|
|
@ -405,7 +405,7 @@ builtin_compile(PyObject *self, PyObject *args)
|
||||||
int supplied_flags = 0;
|
int supplied_flags = 0;
|
||||||
PyCompilerFlags cf;
|
PyCompilerFlags cf;
|
||||||
PyObject *result = NULL, *cmd, *tmp = NULL;
|
PyObject *result = NULL, *cmd, *tmp = NULL;
|
||||||
int length;
|
Py_ssize_t length;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
|
if (!PyArg_ParseTuple(args, "Oss|ii:compile", &cmd, &filename,
|
||||||
&startstr, &supplied_flags, &dont_inherit))
|
&startstr, &supplied_flags, &dont_inherit))
|
||||||
|
@ -824,7 +824,7 @@ builtin_map(PyObject *self, PyObject *args)
|
||||||
|
|
||||||
PyObject *func, *result;
|
PyObject *func, *result;
|
||||||
sequence *seqs = NULL, *sqp;
|
sequence *seqs = NULL, *sqp;
|
||||||
int n, len;
|
Py_ssize_t n, len;
|
||||||
register int i, j;
|
register int i, j;
|
||||||
|
|
||||||
n = PyTuple_Size(args);
|
n = PyTuple_Size(args);
|
||||||
|
@ -1163,12 +1163,12 @@ In the second form, the callable is called until it returns the sentinel.");
|
||||||
static PyObject *
|
static PyObject *
|
||||||
builtin_len(PyObject *self, PyObject *v)
|
builtin_len(PyObject *self, PyObject *v)
|
||||||
{
|
{
|
||||||
long res;
|
Py_ssize_t res;
|
||||||
|
|
||||||
res = PyObject_Size(v);
|
res = PyObject_Size(v);
|
||||||
if (res < 0 && PyErr_Occurred())
|
if (res < 0 && PyErr_Occurred())
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyInt_FromLong(res);
|
return PyInt_FromSsize_t(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(len_doc,
|
PyDoc_STRVAR(len_doc,
|
||||||
|
@ -2346,8 +2346,8 @@ static PyObject *
|
||||||
filtertuple(PyObject *func, PyObject *tuple)
|
filtertuple(PyObject *func, PyObject *tuple)
|
||||||
{
|
{
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
register int i, j;
|
Py_ssize_t i, j;
|
||||||
int len = PyTuple_Size(tuple);
|
Py_ssize_t len = PyTuple_Size(tuple);
|
||||||
|
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
if (PyTuple_CheckExact(tuple))
|
if (PyTuple_CheckExact(tuple))
|
||||||
|
@ -2417,9 +2417,9 @@ static PyObject *
|
||||||
filterstring(PyObject *func, PyObject *strobj)
|
filterstring(PyObject *func, PyObject *strobj)
|
||||||
{
|
{
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
register int i, j;
|
Py_ssize_t i, j;
|
||||||
int len = PyString_Size(strobj);
|
Py_ssize_t len = PyString_Size(strobj);
|
||||||
int outlen = len;
|
Py_ssize_t outlen = len;
|
||||||
|
|
||||||
if (func == Py_None) {
|
if (func == Py_None) {
|
||||||
/* If it's a real string we can return the original,
|
/* If it's a real string we can return the original,
|
||||||
|
|
|
@ -599,7 +599,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throw)
|
||||||
|
|
||||||
/* Code access macros */
|
/* Code access macros */
|
||||||
|
|
||||||
#define INSTR_OFFSET() (next_instr - first_instr)
|
#define INSTR_OFFSET() ((int)(next_instr - first_instr))
|
||||||
#define NEXTOP() (*next_instr++)
|
#define NEXTOP() (*next_instr++)
|
||||||
#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
|
#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
|
||||||
#define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
|
#define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
|
||||||
|
@ -637,7 +637,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throw)
|
||||||
|
|
||||||
/* Stack manipulation macros */
|
/* Stack manipulation macros */
|
||||||
|
|
||||||
#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
|
/* The stack can grow at most MAXINT deep, as co_nlocals and
|
||||||
|
co_stacksize are ints. */
|
||||||
|
#define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack))
|
||||||
#define EMPTY() (STACK_LEVEL() == 0)
|
#define EMPTY() (STACK_LEVEL() == 0)
|
||||||
#define TOP() (stack_pointer[-1])
|
#define TOP() (stack_pointer[-1])
|
||||||
#define SECOND() (stack_pointer[-2])
|
#define SECOND() (stack_pointer[-2])
|
||||||
|
@ -3857,7 +3859,7 @@ ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
|
||||||
called by the SLICE opcode with v and/or w equal to NULL.
|
called by the SLICE opcode with v and/or w equal to NULL.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
_PyEval_SliceIndex(PyObject *v, int *pi)
|
_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
|
||||||
{
|
{
|
||||||
if (v != NULL) {
|
if (v != NULL) {
|
||||||
long x;
|
long x;
|
||||||
|
@ -3906,6 +3908,7 @@ _PyEval_SliceIndex(PyObject *v, int *pi)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Truncate -- very long indices are truncated anyway */
|
/* Truncate -- very long indices are truncated anyway */
|
||||||
|
/* XXX truncate by ssize maximum */
|
||||||
if (x > INT_MAX)
|
if (x > INT_MAX)
|
||||||
x = INT_MAX;
|
x = INT_MAX;
|
||||||
else if (x < -INT_MAX)
|
else if (x < -INT_MAX)
|
||||||
|
@ -3925,7 +3928,7 @@ apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
|
||||||
PySequenceMethods *sq = tp->tp_as_sequence;
|
PySequenceMethods *sq = tp->tp_as_sequence;
|
||||||
|
|
||||||
if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) {
|
if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) {
|
||||||
int ilow = 0, ihigh = INT_MAX;
|
Py_ssize_t ilow = 0, ihigh = INT_MAX;
|
||||||
if (!_PyEval_SliceIndex(v, &ilow))
|
if (!_PyEval_SliceIndex(v, &ilow))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!_PyEval_SliceIndex(w, &ihigh))
|
if (!_PyEval_SliceIndex(w, &ihigh))
|
||||||
|
@ -3952,7 +3955,7 @@ assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
|
||||||
PySequenceMethods *sq = tp->tp_as_sequence;
|
PySequenceMethods *sq = tp->tp_as_sequence;
|
||||||
|
|
||||||
if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) {
|
if (sq && sq->sq_slice && ISINT(v) && ISINT(w)) {
|
||||||
int ilow = 0, ihigh = INT_MAX;
|
Py_ssize_t ilow = 0, ihigh = INT_MAX;
|
||||||
if (!_PyEval_SliceIndex(v, &ilow))
|
if (!_PyEval_SliceIndex(v, &ilow))
|
||||||
return -1;
|
return -1;
|
||||||
if (!_PyEval_SliceIndex(w, &ihigh))
|
if (!_PyEval_SliceIndex(w, &ihigh))
|
||||||
|
|
|
@ -460,7 +460,7 @@ PyObject *PyCodec_StrictErrors(PyObject *exc)
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
PyObject *PyCodec_IgnoreErrors(PyObject *exc)
|
PyObject *PyCodec_IgnoreErrors(PyObject *exc)
|
||||||
{
|
{
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
||||||
if (PyUnicodeEncodeError_GetEnd(exc, &end))
|
if (PyUnicodeEncodeError_GetEnd(exc, &end))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -478,16 +478,16 @@ PyObject *PyCodec_IgnoreErrors(PyObject *exc)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
/* ouch: passing NULL, 0, pos gives None instead of u'' */
|
/* ouch: passing NULL, 0, pos gives None instead of u'' */
|
||||||
return Py_BuildValue("(u#i)", &end, 0, end);
|
return Py_BuildValue("(u#n)", &end, 0, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PyObject *PyCodec_ReplaceErrors(PyObject *exc)
|
PyObject *PyCodec_ReplaceErrors(PyObject *exc)
|
||||||
{
|
{
|
||||||
PyObject *restuple;
|
PyObject *restuple;
|
||||||
int start;
|
Py_ssize_t start;
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
int i;
|
Py_ssize_t i;
|
||||||
|
|
||||||
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
|
@ -502,7 +502,7 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc)
|
||||||
for (p = PyUnicode_AS_UNICODE(res), i = start;
|
for (p = PyUnicode_AS_UNICODE(res), i = start;
|
||||||
i<end; ++p, ++i)
|
i<end; ++p, ++i)
|
||||||
*p = '?';
|
*p = '?';
|
||||||
restuple = Py_BuildValue("(Oi)", res, end);
|
restuple = Py_BuildValue("(On)", res, end);
|
||||||
Py_DECREF(res);
|
Py_DECREF(res);
|
||||||
return restuple;
|
return restuple;
|
||||||
}
|
}
|
||||||
|
@ -510,7 +510,7 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc)
|
||||||
Py_UNICODE res = Py_UNICODE_REPLACEMENT_CHARACTER;
|
Py_UNICODE res = Py_UNICODE_REPLACEMENT_CHARACTER;
|
||||||
if (PyUnicodeDecodeError_GetEnd(exc, &end))
|
if (PyUnicodeDecodeError_GetEnd(exc, &end))
|
||||||
return NULL;
|
return NULL;
|
||||||
return Py_BuildValue("(u#i)", &res, 1, end);
|
return Py_BuildValue("(u#n)", &res, 1, end);
|
||||||
}
|
}
|
||||||
else if (PyObject_IsInstance(exc, PyExc_UnicodeTranslateError)) {
|
else if (PyObject_IsInstance(exc, PyExc_UnicodeTranslateError)) {
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
|
@ -525,7 +525,7 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc)
|
||||||
for (p = PyUnicode_AS_UNICODE(res), i = start;
|
for (p = PyUnicode_AS_UNICODE(res), i = start;
|
||||||
i<end; ++p, ++i)
|
i<end; ++p, ++i)
|
||||||
*p = Py_UNICODE_REPLACEMENT_CHARACTER;
|
*p = Py_UNICODE_REPLACEMENT_CHARACTER;
|
||||||
restuple = Py_BuildValue("(Oi)", res, end);
|
restuple = Py_BuildValue("(On)", res, end);
|
||||||
Py_DECREF(res);
|
Py_DECREF(res);
|
||||||
return restuple;
|
return restuple;
|
||||||
}
|
}
|
||||||
|
@ -540,8 +540,8 @@ PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc)
|
||||||
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
||||||
PyObject *restuple;
|
PyObject *restuple;
|
||||||
PyObject *object;
|
PyObject *object;
|
||||||
int start;
|
Py_ssize_t start;
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
Py_UNICODE *p;
|
Py_UNICODE *p;
|
||||||
Py_UNICODE *startp;
|
Py_UNICODE *startp;
|
||||||
|
@ -631,7 +631,7 @@ PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc)
|
||||||
}
|
}
|
||||||
*outp++ = ';';
|
*outp++ = ';';
|
||||||
}
|
}
|
||||||
restuple = Py_BuildValue("(Oi)", res, end);
|
restuple = Py_BuildValue("(On)", res, end);
|
||||||
Py_DECREF(res);
|
Py_DECREF(res);
|
||||||
Py_DECREF(object);
|
Py_DECREF(object);
|
||||||
return restuple;
|
return restuple;
|
||||||
|
@ -652,8 +652,8 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc)
|
||||||
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
if (PyObject_IsInstance(exc, PyExc_UnicodeEncodeError)) {
|
||||||
PyObject *restuple;
|
PyObject *restuple;
|
||||||
PyObject *object;
|
PyObject *object;
|
||||||
int start;
|
Py_ssize_t start;
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
PyObject *res;
|
PyObject *res;
|
||||||
Py_UNICODE *p;
|
Py_UNICODE *p;
|
||||||
Py_UNICODE *startp;
|
Py_UNICODE *startp;
|
||||||
|
@ -708,7 +708,7 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc)
|
||||||
*outp++ = hexdigits[c&0xf];
|
*outp++ = hexdigits[c&0xf];
|
||||||
}
|
}
|
||||||
|
|
||||||
restuple = Py_BuildValue("(Oi)", res, end);
|
restuple = Py_BuildValue("(On)", res, end);
|
||||||
Py_DECREF(res);
|
Py_DECREF(res);
|
||||||
Py_DECREF(object);
|
Py_DECREF(object);
|
||||||
return restuple;
|
return restuple;
|
||||||
|
|
|
@ -317,7 +317,7 @@ compiler_free(struct compiler *c)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
list2dict(PyObject *list)
|
list2dict(PyObject *list)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
PyObject *v, *k, *dict = PyDict_New();
|
PyObject *v, *k, *dict = PyDict_New();
|
||||||
|
|
||||||
n = PyList_Size(list);
|
n = PyList_Size(list);
|
||||||
|
@ -352,7 +352,7 @@ list2dict(PyObject *list)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
dictbytype(PyObject *src, int scope_type, int flag, int offset)
|
dictbytype(PyObject *src, int scope_type, int flag, int offset)
|
||||||
{
|
{
|
||||||
int pos = 0, i = offset, scope;
|
Py_ssize_t pos = 0, i = offset, scope;
|
||||||
PyObject *k, *v, *dest = PyDict_New();
|
PyObject *k, *v, *dest = PyDict_New();
|
||||||
|
|
||||||
assert(offset >= 0);
|
assert(offset >= 0);
|
||||||
|
@ -407,7 +407,7 @@ static int
|
||||||
tuple_of_constants(unsigned char *codestr, int n, PyObject *consts)
|
tuple_of_constants(unsigned char *codestr, int n, PyObject *consts)
|
||||||
{
|
{
|
||||||
PyObject *newconst, *constant;
|
PyObject *newconst, *constant;
|
||||||
int i, arg, len_consts;
|
Py_ssize_t i, arg, len_consts;
|
||||||
|
|
||||||
/* Pre-conditions */
|
/* Pre-conditions */
|
||||||
assert(PyList_CheckExact(consts));
|
assert(PyList_CheckExact(consts));
|
||||||
|
@ -458,7 +458,8 @@ static int
|
||||||
fold_binops_on_constants(unsigned char *codestr, PyObject *consts)
|
fold_binops_on_constants(unsigned char *codestr, PyObject *consts)
|
||||||
{
|
{
|
||||||
PyObject *newconst, *v, *w;
|
PyObject *newconst, *v, *w;
|
||||||
int len_consts, opcode, size;
|
Py_ssize_t len_consts, size;
|
||||||
|
int opcode;
|
||||||
|
|
||||||
/* Pre-conditions */
|
/* Pre-conditions */
|
||||||
assert(PyList_CheckExact(consts));
|
assert(PyList_CheckExact(consts));
|
||||||
|
@ -551,7 +552,8 @@ static int
|
||||||
fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts)
|
fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts)
|
||||||
{
|
{
|
||||||
PyObject *newconst=NULL, *v;
|
PyObject *newconst=NULL, *v;
|
||||||
int len_consts, opcode;
|
Py_ssize_t len_consts;
|
||||||
|
int opcode;
|
||||||
|
|
||||||
/* Pre-conditions */
|
/* Pre-conditions */
|
||||||
assert(PyList_CheckExact(consts));
|
assert(PyList_CheckExact(consts));
|
||||||
|
@ -653,7 +655,8 @@ markblocks(unsigned char *code, int len)
|
||||||
static PyObject *
|
static PyObject *
|
||||||
optimize_code(PyObject *code, PyObject* consts, PyObject *names, PyObject *lineno_obj)
|
optimize_code(PyObject *code, PyObject* consts, PyObject *names, PyObject *lineno_obj)
|
||||||
{
|
{
|
||||||
int i, j, codelen, nops, h, adj;
|
Py_ssize_t i, j, codelen;
|
||||||
|
int nops, h, adj;
|
||||||
int tgt, tgttgt, opcode;
|
int tgt, tgttgt, opcode;
|
||||||
unsigned char *codestr = NULL;
|
unsigned char *codestr = NULL;
|
||||||
unsigned char *lineno;
|
unsigned char *lineno;
|
||||||
|
@ -989,7 +992,8 @@ static void
|
||||||
compiler_display_symbols(PyObject *name, PyObject *symbols)
|
compiler_display_symbols(PyObject *name, PyObject *symbols)
|
||||||
{
|
{
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
int flags, pos = 0;
|
int flags;
|
||||||
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
fprintf(stderr, "block %s\n", PyString_AS_STRING(name));
|
fprintf(stderr, "block %s\n", PyString_AS_STRING(name));
|
||||||
while (PyDict_Next(symbols, &pos, &key, &value)) {
|
while (PyDict_Next(symbols, &pos, &key, &value)) {
|
||||||
|
@ -1498,7 +1502,7 @@ static int
|
||||||
compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o)
|
compiler_add_o(struct compiler *c, PyObject *dict, PyObject *o)
|
||||||
{
|
{
|
||||||
PyObject *t, *v;
|
PyObject *t, *v;
|
||||||
int arg;
|
Py_ssize_t arg;
|
||||||
|
|
||||||
/* necessary to make sure types aren't coerced (e.g., int and long) */
|
/* necessary to make sure types aren't coerced (e.g., int and long) */
|
||||||
t = PyTuple_Pack(2, o, o->ob_type);
|
t = PyTuple_Pack(2, o, o->ob_type);
|
||||||
|
@ -4032,7 +4036,7 @@ static PyObject *
|
||||||
dict_keys_inorder(PyObject *dict, int offset)
|
dict_keys_inorder(PyObject *dict, int offset)
|
||||||
{
|
{
|
||||||
PyObject *tuple, *k, *v;
|
PyObject *tuple, *k, *v;
|
||||||
int i, pos = 0, size = PyDict_Size(dict);
|
Py_ssize_t i, pos = 0, size = PyDict_Size(dict);
|
||||||
|
|
||||||
tuple = PyTuple_New(size);
|
tuple = PyTuple_New(size);
|
||||||
if (tuple == NULL)
|
if (tuple == NULL)
|
||||||
|
|
|
@ -910,27 +910,34 @@ static PyMethodDef KeyError_methods[] = {
|
||||||
|
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
static
|
static
|
||||||
int get_int(PyObject *exc, const char *name, int *value)
|
int get_int(PyObject *exc, const char *name, Py_ssize_t *value)
|
||||||
{
|
{
|
||||||
PyObject *attr = PyObject_GetAttrString(exc, (char *)name);
|
PyObject *attr = PyObject_GetAttrString(exc, (char *)name);
|
||||||
|
|
||||||
if (!attr)
|
if (!attr)
|
||||||
return -1;
|
return -1;
|
||||||
if (!PyInt_Check(attr)) {
|
if (PyInt_Check(attr)) {
|
||||||
|
*value = PyInt_AS_LONG(attr);
|
||||||
|
} else if (PyLong_Check(attr)) {
|
||||||
|
*value = (size_t)PyLong_AsLongLong(attr);
|
||||||
|
if (*value == -1) {
|
||||||
|
Py_DECREF(attr);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
PyErr_Format(PyExc_TypeError, "%.200s attribute must be int", name);
|
PyErr_Format(PyExc_TypeError, "%.200s attribute must be int", name);
|
||||||
Py_DECREF(attr);
|
Py_DECREF(attr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*value = PyInt_AS_LONG(attr);
|
|
||||||
Py_DECREF(attr);
|
Py_DECREF(attr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int set_int(PyObject *exc, const char *name, int value)
|
int set_ssize_t(PyObject *exc, const char *name, Py_ssize_t value)
|
||||||
{
|
{
|
||||||
PyObject *obj = PyInt_FromLong(value);
|
PyObject *obj = PyInt_FromSsize_t(value);
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
if (!obj)
|
if (!obj)
|
||||||
|
@ -940,7 +947,6 @@ int set_int(PyObject *exc, const char *name, int value)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static
|
static
|
||||||
PyObject *get_string(PyObject *exc, const char *name)
|
PyObject *get_string(PyObject *exc, const char *name)
|
||||||
{
|
{
|
||||||
|
@ -1011,16 +1017,16 @@ PyObject *PyUnicodeTranslateError_GetObject(PyObject *exc)
|
||||||
return get_unicode(exc, "object");
|
return get_unicode(exc, "object");
|
||||||
}
|
}
|
||||||
|
|
||||||
int PyUnicodeEncodeError_GetStart(PyObject *exc, int *start)
|
int PyUnicodeEncodeError_GetStart(PyObject *exc, Py_ssize_t *start)
|
||||||
{
|
{
|
||||||
if (!get_int(exc, "start", start)) {
|
if (!get_int(exc, "start", start)) {
|
||||||
PyObject *object = PyUnicodeEncodeError_GetObject(exc);
|
PyObject *object = PyUnicodeEncodeError_GetObject(exc);
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!object)
|
if (!object)
|
||||||
return -1;
|
return -1;
|
||||||
size = PyUnicode_GET_SIZE(object);
|
size = PyUnicode_GET_SIZE(object);
|
||||||
if (*start<0)
|
if (*start<0)
|
||||||
*start = 0;
|
*start = 0; /*XXX check for values <0*/
|
||||||
if (*start>=size)
|
if (*start>=size)
|
||||||
*start = size-1;
|
*start = size-1;
|
||||||
Py_DECREF(object);
|
Py_DECREF(object);
|
||||||
|
@ -1030,11 +1036,11 @@ int PyUnicodeEncodeError_GetStart(PyObject *exc, int *start)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeDecodeError_GetStart(PyObject *exc, int *start)
|
int PyUnicodeDecodeError_GetStart(PyObject *exc, Py_ssize_t *start)
|
||||||
{
|
{
|
||||||
if (!get_int(exc, "start", start)) {
|
if (!get_int(exc, "start", start)) {
|
||||||
PyObject *object = PyUnicodeDecodeError_GetObject(exc);
|
PyObject *object = PyUnicodeDecodeError_GetObject(exc);
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!object)
|
if (!object)
|
||||||
return -1;
|
return -1;
|
||||||
size = PyString_GET_SIZE(object);
|
size = PyString_GET_SIZE(object);
|
||||||
|
@ -1049,35 +1055,35 @@ int PyUnicodeDecodeError_GetStart(PyObject *exc, int *start)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeTranslateError_GetStart(PyObject *exc, int *start)
|
int PyUnicodeTranslateError_GetStart(PyObject *exc, Py_ssize_t *start)
|
||||||
{
|
{
|
||||||
return PyUnicodeEncodeError_GetStart(exc, start);
|
return PyUnicodeEncodeError_GetStart(exc, start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeEncodeError_SetStart(PyObject *exc, int start)
|
int PyUnicodeEncodeError_SetStart(PyObject *exc, Py_ssize_t start)
|
||||||
{
|
{
|
||||||
return set_int(exc, "start", start);
|
return set_ssize_t(exc, "start", start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeDecodeError_SetStart(PyObject *exc, int start)
|
int PyUnicodeDecodeError_SetStart(PyObject *exc, Py_ssize_t start)
|
||||||
{
|
{
|
||||||
return set_int(exc, "start", start);
|
return set_ssize_t(exc, "start", start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeTranslateError_SetStart(PyObject *exc, int start)
|
int PyUnicodeTranslateError_SetStart(PyObject *exc, Py_ssize_t start)
|
||||||
{
|
{
|
||||||
return set_int(exc, "start", start);
|
return set_ssize_t(exc, "start", start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeEncodeError_GetEnd(PyObject *exc, int *end)
|
int PyUnicodeEncodeError_GetEnd(PyObject *exc, Py_ssize_t *end)
|
||||||
{
|
{
|
||||||
if (!get_int(exc, "end", end)) {
|
if (!get_int(exc, "end", end)) {
|
||||||
PyObject *object = PyUnicodeEncodeError_GetObject(exc);
|
PyObject *object = PyUnicodeEncodeError_GetObject(exc);
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!object)
|
if (!object)
|
||||||
return -1;
|
return -1;
|
||||||
size = PyUnicode_GET_SIZE(object);
|
size = PyUnicode_GET_SIZE(object);
|
||||||
|
@ -1092,11 +1098,11 @@ int PyUnicodeEncodeError_GetEnd(PyObject *exc, int *end)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeDecodeError_GetEnd(PyObject *exc, int *end)
|
int PyUnicodeDecodeError_GetEnd(PyObject *exc, Py_ssize_t *end)
|
||||||
{
|
{
|
||||||
if (!get_int(exc, "end", end)) {
|
if (!get_int(exc, "end", end)) {
|
||||||
PyObject *object = PyUnicodeDecodeError_GetObject(exc);
|
PyObject *object = PyUnicodeDecodeError_GetObject(exc);
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
if (!object)
|
if (!object)
|
||||||
return -1;
|
return -1;
|
||||||
size = PyString_GET_SIZE(object);
|
size = PyString_GET_SIZE(object);
|
||||||
|
@ -1111,27 +1117,27 @@ int PyUnicodeDecodeError_GetEnd(PyObject *exc, int *end)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeTranslateError_GetEnd(PyObject *exc, int *start)
|
int PyUnicodeTranslateError_GetEnd(PyObject *exc, Py_ssize_t *start)
|
||||||
{
|
{
|
||||||
return PyUnicodeEncodeError_GetEnd(exc, start);
|
return PyUnicodeEncodeError_GetEnd(exc, start);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeEncodeError_SetEnd(PyObject *exc, int end)
|
int PyUnicodeEncodeError_SetEnd(PyObject *exc, Py_ssize_t end)
|
||||||
{
|
{
|
||||||
return set_int(exc, "end", end);
|
return set_ssize_t(exc, "end", end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeDecodeError_SetEnd(PyObject *exc, int end)
|
int PyUnicodeDecodeError_SetEnd(PyObject *exc, Py_ssize_t end)
|
||||||
{
|
{
|
||||||
return set_int(exc, "end", end);
|
return set_ssize_t(exc, "end", end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int PyUnicodeTranslateError_SetEnd(PyObject *exc, int end)
|
int PyUnicodeTranslateError_SetEnd(PyObject *exc, Py_ssize_t end)
|
||||||
{
|
{
|
||||||
return set_int(exc, "end", end);
|
return set_ssize_t(exc, "end", end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1229,8 +1235,8 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg)
|
||||||
{
|
{
|
||||||
PyObject *encodingObj = NULL;
|
PyObject *encodingObj = NULL;
|
||||||
PyObject *objectObj = NULL;
|
PyObject *objectObj = NULL;
|
||||||
int start;
|
Py_ssize_t start;
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
PyObject *reasonObj = NULL;
|
PyObject *reasonObj = NULL;
|
||||||
char buffer[1000];
|
char buffer[1000];
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
|
@ -1270,11 +1276,12 @@ UnicodeEncodeError__str__(PyObject *self, PyObject *arg)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
/* XXX %zd? */
|
||||||
PyOS_snprintf(buffer, sizeof(buffer),
|
PyOS_snprintf(buffer, sizeof(buffer),
|
||||||
"'%.400s' codec can't encode characters in position %d-%d: %.400s",
|
"'%.400s' codec can't encode characters in position %d-%d: %.400s",
|
||||||
PyString_AS_STRING(encodingObj),
|
PyString_AS_STRING(encodingObj),
|
||||||
start,
|
(int)start,
|
||||||
end-1,
|
(int)(end-1),
|
||||||
PyString_AS_STRING(reasonObj)
|
PyString_AS_STRING(reasonObj)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1295,10 +1302,10 @@ static PyMethodDef UnicodeEncodeError_methods[] = {
|
||||||
|
|
||||||
|
|
||||||
PyObject * PyUnicodeEncodeError_Create(
|
PyObject * PyUnicodeEncodeError_Create(
|
||||||
const char *encoding, const Py_UNICODE *object, int length,
|
const char *encoding, const Py_UNICODE *object, Py_ssize_t length,
|
||||||
int start, int end, const char *reason)
|
Py_ssize_t start, Py_ssize_t end, const char *reason)
|
||||||
{
|
{
|
||||||
return PyObject_CallFunction(PyExc_UnicodeEncodeError, "su#iis",
|
return PyObject_CallFunction(PyExc_UnicodeEncodeError, "su#nns",
|
||||||
encoding, object, length, start, end, reason);
|
encoding, object, length, start, end, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1314,8 +1321,8 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg)
|
||||||
{
|
{
|
||||||
PyObject *encodingObj = NULL;
|
PyObject *encodingObj = NULL;
|
||||||
PyObject *objectObj = NULL;
|
PyObject *objectObj = NULL;
|
||||||
int start;
|
Py_ssize_t start;
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
PyObject *reasonObj = NULL;
|
PyObject *reasonObj = NULL;
|
||||||
char buffer[1000];
|
char buffer[1000];
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
|
@ -1338,20 +1345,22 @@ UnicodeDecodeError__str__(PyObject *self, PyObject *arg)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (end==start+1) {
|
if (end==start+1) {
|
||||||
|
/* XXX %zd? */
|
||||||
PyOS_snprintf(buffer, sizeof(buffer),
|
PyOS_snprintf(buffer, sizeof(buffer),
|
||||||
"'%.400s' codec can't decode byte 0x%02x in position %d: %.400s",
|
"'%.400s' codec can't decode byte 0x%02x in position %d: %.400s",
|
||||||
PyString_AS_STRING(encodingObj),
|
PyString_AS_STRING(encodingObj),
|
||||||
((int)PyString_AS_STRING(objectObj)[start])&0xff,
|
((int)PyString_AS_STRING(objectObj)[start])&0xff,
|
||||||
start,
|
(int)start,
|
||||||
PyString_AS_STRING(reasonObj)
|
PyString_AS_STRING(reasonObj)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
/* XXX %zd? */
|
||||||
PyOS_snprintf(buffer, sizeof(buffer),
|
PyOS_snprintf(buffer, sizeof(buffer),
|
||||||
"'%.400s' codec can't decode bytes in position %d-%d: %.400s",
|
"'%.400s' codec can't decode bytes in position %d-%d: %.400s",
|
||||||
PyString_AS_STRING(encodingObj),
|
PyString_AS_STRING(encodingObj),
|
||||||
start,
|
(int)start,
|
||||||
end-1,
|
(int)(end-1),
|
||||||
PyString_AS_STRING(reasonObj)
|
PyString_AS_STRING(reasonObj)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1372,11 +1381,14 @@ static PyMethodDef UnicodeDecodeError_methods[] = {
|
||||||
|
|
||||||
|
|
||||||
PyObject * PyUnicodeDecodeError_Create(
|
PyObject * PyUnicodeDecodeError_Create(
|
||||||
const char *encoding, const char *object, int length,
|
const char *encoding, const char *object, Py_ssize_t length,
|
||||||
int start, int end, const char *reason)
|
Py_ssize_t start, Py_ssize_t end, const char *reason)
|
||||||
{
|
{
|
||||||
|
assert(length < INT_MAX);
|
||||||
|
assert(start < INT_MAX);
|
||||||
|
assert(end < INT_MAX);
|
||||||
return PyObject_CallFunction(PyExc_UnicodeDecodeError, "ss#iis",
|
return PyObject_CallFunction(PyExc_UnicodeDecodeError, "ss#iis",
|
||||||
encoding, object, length, start, end, reason);
|
encoding, object, (int)length, (int)start, (int)end, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1427,8 +1439,8 @@ static PyObject *
|
||||||
UnicodeTranslateError__str__(PyObject *self, PyObject *arg)
|
UnicodeTranslateError__str__(PyObject *self, PyObject *arg)
|
||||||
{
|
{
|
||||||
PyObject *objectObj = NULL;
|
PyObject *objectObj = NULL;
|
||||||
int start;
|
Py_ssize_t start;
|
||||||
int end;
|
Py_ssize_t end;
|
||||||
PyObject *reasonObj = NULL;
|
PyObject *reasonObj = NULL;
|
||||||
char buffer[1000];
|
char buffer[1000];
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
|
@ -1450,6 +1462,7 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg)
|
||||||
if (end==start+1) {
|
if (end==start+1) {
|
||||||
int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start];
|
int badchar = (int)PyUnicode_AS_UNICODE(objectObj)[start];
|
||||||
char *format;
|
char *format;
|
||||||
|
/* XXX %zd? */
|
||||||
if (badchar <= 0xff)
|
if (badchar <= 0xff)
|
||||||
format = "can't translate character u'\\x%02x' in position %d: %.400s";
|
format = "can't translate character u'\\x%02x' in position %d: %.400s";
|
||||||
else if (badchar <= 0xffff)
|
else if (badchar <= 0xffff)
|
||||||
|
@ -1459,15 +1472,16 @@ UnicodeTranslateError__str__(PyObject *self, PyObject *arg)
|
||||||
PyOS_snprintf(buffer, sizeof(buffer),
|
PyOS_snprintf(buffer, sizeof(buffer),
|
||||||
format,
|
format,
|
||||||
badchar,
|
badchar,
|
||||||
start,
|
(int)start,
|
||||||
PyString_AS_STRING(reasonObj)
|
PyString_AS_STRING(reasonObj)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
/* XXX %zd? */
|
||||||
PyOS_snprintf(buffer, sizeof(buffer),
|
PyOS_snprintf(buffer, sizeof(buffer),
|
||||||
"can't translate characters in position %d-%d: %.400s",
|
"can't translate characters in position %d-%d: %.400s",
|
||||||
start,
|
(int)start,
|
||||||
end-1,
|
(int)(end-1),
|
||||||
PyString_AS_STRING(reasonObj)
|
PyString_AS_STRING(reasonObj)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1487,8 +1501,8 @@ static PyMethodDef UnicodeTranslateError_methods[] = {
|
||||||
|
|
||||||
|
|
||||||
PyObject * PyUnicodeTranslateError_Create(
|
PyObject * PyUnicodeTranslateError_Create(
|
||||||
const Py_UNICODE *object, int length,
|
const Py_UNICODE *object, Py_ssize_t length,
|
||||||
int start, int end, const char *reason)
|
Py_ssize_t start, Py_ssize_t end, const char *reason)
|
||||||
{
|
{
|
||||||
return PyObject_CallFunction(PyExc_UnicodeTranslateError, "u#iis",
|
return PyObject_CallFunction(PyExc_UnicodeTranslateError, "u#iis",
|
||||||
object, length, start, end, reason);
|
object, length, start, end, reason);
|
||||||
|
@ -1749,7 +1763,7 @@ void
|
||||||
_PyExc_Init(void)
|
_PyExc_Init(void)
|
||||||
{
|
{
|
||||||
char *modulename = "exceptions";
|
char *modulename = "exceptions";
|
||||||
int modnamesz = strlen(modulename);
|
Py_ssize_t modnamesz = strlen(modulename);
|
||||||
int i;
|
int i;
|
||||||
PyObject *me, *mydict, *bltinmod, *bdict, *doc, *args;
|
PyObject *me, *mydict, *bltinmod, *bdict, *doc, *args;
|
||||||
|
|
||||||
|
|
262
Python/getargs.c
262
Python/getargs.c
|
@ -15,21 +15,24 @@ int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
|
||||||
int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
|
int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
|
||||||
const char *, const char **, va_list);
|
const char *, const char **, va_list);
|
||||||
|
|
||||||
|
#define FLAG_COMPAT 1
|
||||||
|
#define FLAG_SIZE_T 2
|
||||||
|
|
||||||
|
|
||||||
/* Forward */
|
/* Forward */
|
||||||
static int vgetargs1(PyObject *, const char *, va_list *, int);
|
static int vgetargs1(PyObject *, const char *, va_list *, int);
|
||||||
static void seterror(int, const char *, int *, const char *, const char *);
|
static void seterror(int, const char *, int *, const char *, const char *);
|
||||||
static char *convertitem(PyObject *, const char **, va_list *, int *, char *,
|
static char *convertitem(PyObject *, const char **, va_list *, int, int *,
|
||||||
size_t, PyObject **);
|
char *, size_t, PyObject **);
|
||||||
static char *converttuple(PyObject *, const char **, va_list *,
|
static char *converttuple(PyObject *, const char **, va_list *, int,
|
||||||
int *, char *, size_t, int, PyObject **);
|
int *, char *, size_t, int, PyObject **);
|
||||||
static char *convertsimple(PyObject *, const char **, va_list *, char *,
|
static char *convertsimple(PyObject *, const char **, va_list *, int, char *,
|
||||||
size_t, PyObject **);
|
size_t, PyObject **);
|
||||||
static int convertbuffer(PyObject *, void **p, char **);
|
static Py_ssize_t convertbuffer(PyObject *, void **p, char **);
|
||||||
|
|
||||||
static int vgetargskeywords(PyObject *, PyObject *,
|
static int vgetargskeywords(PyObject *, PyObject *,
|
||||||
const char *, const char **, va_list *);
|
const char *, const char **, va_list *, int);
|
||||||
static char *skipitem(const char **, va_list *);
|
static char *skipitem(const char **, va_list *, int);
|
||||||
|
|
||||||
int
|
int
|
||||||
PyArg_Parse(PyObject *args, const char *format, ...)
|
PyArg_Parse(PyObject *args, const char *format, ...)
|
||||||
|
@ -38,7 +41,19 @@ PyArg_Parse(PyObject *args, const char *format, ...)
|
||||||
va_list va;
|
va_list va;
|
||||||
|
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
retval = vgetargs1(args, format, &va, 1);
|
retval = vgetargs1(args, format, &va, FLAG_COMPAT);
|
||||||
|
va_end(va);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_PyArg_Parse_SizeT(PyObject *args, char *format, ...)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
va_start(va, format);
|
||||||
|
retval = vgetargs1(args, format, &va, FLAG_COMPAT|FLAG_SIZE_T);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +71,18 @@ PyArg_ParseTuple(PyObject *args, const char *format, ...)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_PyArg_ParseTuple_SizeT(PyObject *args, char *format, ...)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
va_start(va, format);
|
||||||
|
retval = vgetargs1(args, format, &va, FLAG_SIZE_T);
|
||||||
|
va_end(va);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
PyArg_VaParse(PyObject *args, const char *format, va_list va)
|
PyArg_VaParse(PyObject *args, const char *format, va_list va)
|
||||||
|
@ -75,6 +102,24 @@ PyArg_VaParse(PyObject *args, const char *format, va_list va)
|
||||||
return vgetargs1(args, format, &lva, 0);
|
return vgetargs1(args, format, &lva, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_PyArg_VaParse_SizeT(PyObject *args, char *format, va_list va)
|
||||||
|
{
|
||||||
|
va_list lva;
|
||||||
|
|
||||||
|
#ifdef VA_LIST_IS_ARRAY
|
||||||
|
memcpy(lva, va, sizeof(va_list));
|
||||||
|
#else
|
||||||
|
#ifdef __va_copy
|
||||||
|
__va_copy(lva, va);
|
||||||
|
#else
|
||||||
|
lva = va;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return vgetargs1(args, format, &lva, FLAG_SIZE_T);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Handle cleanup of allocated memory in case of exception */
|
/* Handle cleanup of allocated memory in case of exception */
|
||||||
|
|
||||||
|
@ -120,7 +165,7 @@ cleanreturn(int retval, PyObject *freelist)
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
vgetargs1(PyObject *args, const char *format, va_list *p_va, int compat)
|
vgetargs1(PyObject *args, const char *format, va_list *p_va, int flags)
|
||||||
{
|
{
|
||||||
char msgbuf[256];
|
char msgbuf[256];
|
||||||
int levels[32];
|
int levels[32];
|
||||||
|
@ -134,8 +179,10 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int compat)
|
||||||
int i, len;
|
int i, len;
|
||||||
char *msg;
|
char *msg;
|
||||||
PyObject *freelist = NULL;
|
PyObject *freelist = NULL;
|
||||||
|
int compat = flags & FLAG_COMPAT;
|
||||||
|
|
||||||
assert(compat || (args != (PyObject*)NULL));
|
assert(compat || (args != (PyObject*)NULL));
|
||||||
|
flags = flags & ~FLAG_COMPAT;
|
||||||
|
|
||||||
while (endfmt == 0) {
|
while (endfmt == 0) {
|
||||||
int c = *format++;
|
int c = *format++;
|
||||||
|
@ -204,8 +251,8 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int compat)
|
||||||
PyErr_SetString(PyExc_TypeError, msgbuf);
|
PyErr_SetString(PyExc_TypeError, msgbuf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
msg = convertitem(args, &format, p_va, levels, msgbuf,
|
msg = convertitem(args, &format, p_va, flags, levels,
|
||||||
sizeof(msgbuf), &freelist);
|
msgbuf, sizeof(msgbuf), &freelist);
|
||||||
if (msg == NULL)
|
if (msg == NULL)
|
||||||
return cleanreturn(1, freelist);
|
return cleanreturn(1, freelist);
|
||||||
seterror(levels[0], msg, levels+1, fname, message);
|
seterror(levels[0], msg, levels+1, fname, message);
|
||||||
|
@ -248,7 +295,8 @@ vgetargs1(PyObject *args, const char *format, va_list *p_va, int compat)
|
||||||
if (*format == '|')
|
if (*format == '|')
|
||||||
format++;
|
format++;
|
||||||
msg = convertitem(PyTuple_GET_ITEM(args, i), &format, p_va,
|
msg = convertitem(PyTuple_GET_ITEM(args, i), &format, p_va,
|
||||||
levels, msgbuf, sizeof(msgbuf), &freelist);
|
flags, levels, msgbuf,
|
||||||
|
sizeof(msgbuf), &freelist);
|
||||||
if (msg) {
|
if (msg) {
|
||||||
seterror(i+1, msg, levels, fname, message);
|
seterror(i+1, msg, levels, fname, message);
|
||||||
return cleanreturn(0, freelist);
|
return cleanreturn(0, freelist);
|
||||||
|
@ -325,8 +373,9 @@ seterror(int iarg, const char *msg, int *levels, const char *fname,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
converttuple(PyObject *arg, const char **p_format, va_list *p_va, int *levels,
|
converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
||||||
char *msgbuf, size_t bufsize, int toplevel, PyObject **freelist)
|
int *levels, char *msgbuf, size_t bufsize, int toplevel,
|
||||||
|
PyObject **freelist)
|
||||||
{
|
{
|
||||||
int level = 0;
|
int level = 0;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
@ -375,8 +424,8 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int *levels,
|
||||||
char *msg;
|
char *msg;
|
||||||
PyObject *item;
|
PyObject *item;
|
||||||
item = PySequence_GetItem(arg, i);
|
item = PySequence_GetItem(arg, i);
|
||||||
msg = convertitem(item, &format, p_va, levels+1, msgbuf,
|
msg = convertitem(item, &format, p_va, flags, levels+1,
|
||||||
bufsize, freelist);
|
msgbuf, bufsize, freelist);
|
||||||
/* PySequence_GetItem calls tp->sq_item, which INCREFs */
|
/* PySequence_GetItem calls tp->sq_item, which INCREFs */
|
||||||
Py_XDECREF(item);
|
Py_XDECREF(item);
|
||||||
if (msg != NULL) {
|
if (msg != NULL) {
|
||||||
|
@ -393,22 +442,22 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int *levels,
|
||||||
/* Convert a single item. */
|
/* Convert a single item. */
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
convertitem(PyObject *arg, const char **p_format, va_list *p_va, int *levels,
|
convertitem(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
||||||
char *msgbuf, size_t bufsize, PyObject **freelist)
|
int *levels, char *msgbuf, size_t bufsize, PyObject **freelist)
|
||||||
{
|
{
|
||||||
char *msg;
|
char *msg;
|
||||||
const char *format = *p_format;
|
const char *format = *p_format;
|
||||||
|
|
||||||
if (*format == '(' /* ')' */) {
|
if (*format == '(' /* ')' */) {
|
||||||
format++;
|
format++;
|
||||||
msg = converttuple(arg, &format, p_va, levels, msgbuf,
|
msg = converttuple(arg, &format, p_va, flags, levels, msgbuf,
|
||||||
bufsize, 0, freelist);
|
bufsize, 0, freelist);
|
||||||
if (msg == NULL)
|
if (msg == NULL)
|
||||||
format++;
|
format++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
msg = convertsimple(arg, &format, p_va, msgbuf, bufsize,
|
msg = convertsimple(arg, &format, p_va, flags,
|
||||||
freelist);
|
msgbuf, bufsize, freelist);
|
||||||
if (msg != NULL)
|
if (msg != NULL)
|
||||||
levels[0] = 0;
|
levels[0] = 0;
|
||||||
}
|
}
|
||||||
|
@ -460,9 +509,16 @@ float_argument_error(PyObject *arg)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
||||||
char *msgbuf, size_t bufsize, PyObject **freelist)
|
char *msgbuf, size_t bufsize, PyObject **freelist)
|
||||||
{
|
{
|
||||||
|
/* For # codes */
|
||||||
|
#define FETCH_SIZE int *q=NULL;Py_ssize_t *q2=NULL;\
|
||||||
|
if (flags & FLAG_SIZE_T) q2=va_arg(*p_va, Py_ssize_t*); \
|
||||||
|
else q=va_arg(*p_va, int*);
|
||||||
|
#define STORE_SIZE(s) if (flags & FLAG_SIZE_T) *q2=s; else *q=s;
|
||||||
|
#define BUFFER_LEN ((flags & FLAG_SIZE_T) ? *q2:*q)
|
||||||
|
|
||||||
const char *format = *p_format;
|
const char *format = *p_format;
|
||||||
char c = *format++;
|
char c = *format++;
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
|
@ -544,7 +600,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
*p = (unsigned short) ival;
|
*p = (unsigned short) ival;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'i': {/* signed int */
|
case 'i': {/* signed int */
|
||||||
int *p = va_arg(*p_va, int *);
|
int *p = va_arg(*p_va, int *);
|
||||||
long ival;
|
long ival;
|
||||||
|
@ -582,6 +638,21 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'n': /* Py_ssize_t */
|
||||||
|
#if SIZEOF_SIZE_T != SIZEOF_LONG
|
||||||
|
{
|
||||||
|
Py_ssize_t *p = va_arg(*p_va, Py_ssize_t *);
|
||||||
|
Py_ssize_t ival;
|
||||||
|
if (float_argument_error(arg))
|
||||||
|
return converterr("integer<i>", arg, msgbuf, bufsize);
|
||||||
|
ival = PyInt_AsSsize_t(arg);
|
||||||
|
if (ival == -1 && PyErr_Occurred())
|
||||||
|
return converterr("integer<i>", arg, msgbuf, bufsize);
|
||||||
|
*p = ival;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* Fall through from 'n' to 'l' if Py_ssize_t is int */
|
||||||
case 'l': {/* long int */
|
case 'l': {/* long int */
|
||||||
long *p = va_arg(*p_va, long *);
|
long *p = va_arg(*p_va, long *);
|
||||||
long ival;
|
long ival;
|
||||||
|
@ -679,11 +750,11 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
case 's': {/* string */
|
case 's': {/* string */
|
||||||
if (*format == '#') {
|
if (*format == '#') {
|
||||||
void **p = (void **)va_arg(*p_va, char **);
|
void **p = (void **)va_arg(*p_va, char **);
|
||||||
int *q = va_arg(*p_va, int *);
|
FETCH_SIZE;
|
||||||
|
|
||||||
if (PyString_Check(arg)) {
|
if (PyString_Check(arg)) {
|
||||||
*p = PyString_AS_STRING(arg);
|
*p = PyString_AS_STRING(arg);
|
||||||
*q = PyString_GET_SIZE(arg);
|
STORE_SIZE(PyString_GET_SIZE(arg));
|
||||||
}
|
}
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
else if (PyUnicode_Check(arg)) {
|
else if (PyUnicode_Check(arg)) {
|
||||||
|
@ -692,15 +763,15 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
return converterr(CONV_UNICODE,
|
return converterr(CONV_UNICODE,
|
||||||
arg, msgbuf, bufsize);
|
arg, msgbuf, bufsize);
|
||||||
*p = PyString_AS_STRING(uarg);
|
*p = PyString_AS_STRING(uarg);
|
||||||
*q = PyString_GET_SIZE(uarg);
|
STORE_SIZE(PyString_GET_SIZE(uarg));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else { /* any buffer-like object */
|
else { /* any buffer-like object */
|
||||||
char *buf;
|
char *buf;
|
||||||
int count = convertbuffer(arg, p, &buf);
|
Py_ssize_t count = convertbuffer(arg, p, &buf);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return converterr(buf, arg, msgbuf, bufsize);
|
return converterr(buf, arg, msgbuf, bufsize);
|
||||||
*q = count;
|
STORE_SIZE(count);
|
||||||
}
|
}
|
||||||
format++;
|
format++;
|
||||||
} else {
|
} else {
|
||||||
|
@ -729,15 +800,15 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
case 'z': {/* string, may be NULL (None) */
|
case 'z': {/* string, may be NULL (None) */
|
||||||
if (*format == '#') { /* any buffer-like object */
|
if (*format == '#') { /* any buffer-like object */
|
||||||
void **p = (void **)va_arg(*p_va, char **);
|
void **p = (void **)va_arg(*p_va, char **);
|
||||||
int *q = va_arg(*p_va, int *);
|
FETCH_SIZE;
|
||||||
|
|
||||||
if (arg == Py_None) {
|
if (arg == Py_None) {
|
||||||
*p = 0;
|
*p = 0;
|
||||||
*q = 0;
|
STORE_SIZE(0);
|
||||||
}
|
}
|
||||||
else if (PyString_Check(arg)) {
|
else if (PyString_Check(arg)) {
|
||||||
*p = PyString_AS_STRING(arg);
|
*p = PyString_AS_STRING(arg);
|
||||||
*q = PyString_GET_SIZE(arg);
|
STORE_SIZE(PyString_GET_SIZE(arg));
|
||||||
}
|
}
|
||||||
#ifdef Py_USING_UNICODE
|
#ifdef Py_USING_UNICODE
|
||||||
else if (PyUnicode_Check(arg)) {
|
else if (PyUnicode_Check(arg)) {
|
||||||
|
@ -746,15 +817,15 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
return converterr(CONV_UNICODE,
|
return converterr(CONV_UNICODE,
|
||||||
arg, msgbuf, bufsize);
|
arg, msgbuf, bufsize);
|
||||||
*p = PyString_AS_STRING(uarg);
|
*p = PyString_AS_STRING(uarg);
|
||||||
*q = PyString_GET_SIZE(uarg);
|
STORE_SIZE(PyString_GET_SIZE(uarg));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else { /* any buffer-like object */
|
else { /* any buffer-like object */
|
||||||
char *buf;
|
char *buf;
|
||||||
int count = convertbuffer(arg, p, &buf);
|
Py_ssize_t count = convertbuffer(arg, p, &buf);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return converterr(buf, arg, msgbuf, bufsize);
|
return converterr(buf, arg, msgbuf, bufsize);
|
||||||
*q = count;
|
STORE_SIZE(count);
|
||||||
}
|
}
|
||||||
format++;
|
format++;
|
||||||
} else {
|
} else {
|
||||||
|
@ -777,7 +848,8 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
return converterr("string or None",
|
return converterr("string or None",
|
||||||
arg, msgbuf, bufsize);
|
arg, msgbuf, bufsize);
|
||||||
if (*format == '#') {
|
if (*format == '#') {
|
||||||
int *q = va_arg(*p_va, int *);
|
FETCH_SIZE;
|
||||||
|
assert(0); // redundant with if-case
|
||||||
if (arg == Py_None)
|
if (arg == Py_None)
|
||||||
*q = 0;
|
*q = 0;
|
||||||
else
|
else
|
||||||
|
@ -883,10 +955,10 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
trailing 0-byte
|
trailing 0-byte
|
||||||
|
|
||||||
*/
|
*/
|
||||||
int *buffer_len = va_arg(*p_va, int *);
|
FETCH_SIZE;
|
||||||
|
|
||||||
format++;
|
format++;
|
||||||
if (buffer_len == NULL) {
|
if (q == NULL && q2 == NULL) {
|
||||||
Py_DECREF(s);
|
Py_DECREF(s);
|
||||||
return converterr(
|
return converterr(
|
||||||
"(buffer_len is NULL)",
|
"(buffer_len is NULL)",
|
||||||
|
@ -907,7 +979,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
arg, msgbuf, bufsize);
|
arg, msgbuf, bufsize);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (size + 1 > *buffer_len) {
|
if (size + 1 > BUFFER_LEN) {
|
||||||
Py_DECREF(s);
|
Py_DECREF(s);
|
||||||
return converterr(
|
return converterr(
|
||||||
"(buffer overflow)",
|
"(buffer overflow)",
|
||||||
|
@ -917,7 +989,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
memcpy(*buffer,
|
memcpy(*buffer,
|
||||||
PyString_AS_STRING(s),
|
PyString_AS_STRING(s),
|
||||||
size + 1);
|
size + 1);
|
||||||
*buffer_len = size;
|
STORE_SIZE(size);
|
||||||
} else {
|
} else {
|
||||||
/* Using a 0-terminated buffer:
|
/* Using a 0-terminated buffer:
|
||||||
|
|
||||||
|
@ -961,17 +1033,17 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
case 'u': {/* raw unicode buffer (Py_UNICODE *) */
|
case 'u': {/* raw unicode buffer (Py_UNICODE *) */
|
||||||
if (*format == '#') { /* any buffer-like object */
|
if (*format == '#') { /* any buffer-like object */
|
||||||
void **p = (void **)va_arg(*p_va, char **);
|
void **p = (void **)va_arg(*p_va, char **);
|
||||||
int *q = va_arg(*p_va, int *);
|
FETCH_SIZE;
|
||||||
if (PyUnicode_Check(arg)) {
|
if (PyUnicode_Check(arg)) {
|
||||||
*p = PyUnicode_AS_UNICODE(arg);
|
*p = PyUnicode_AS_UNICODE(arg);
|
||||||
*q = PyUnicode_GET_SIZE(arg);
|
STORE_SIZE(PyUnicode_GET_SIZE(arg));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char *buf;
|
char *buf;
|
||||||
int count = convertbuffer(arg, p, &buf);
|
Py_ssize_t count = convertbuffer(arg, p, &buf);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return converterr(buf, arg, msgbuf, bufsize);
|
return converterr(buf, arg, msgbuf, bufsize);
|
||||||
*q = count/(sizeof(Py_UNICODE));
|
STORE_SIZE(count/(sizeof(Py_UNICODE)));
|
||||||
}
|
}
|
||||||
format++;
|
format++;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1061,9 +1133,8 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
if ((count = pb->bf_getwritebuffer(arg, 0, p)) < 0)
|
if ((count = pb->bf_getwritebuffer(arg, 0, p)) < 0)
|
||||||
return converterr("(unspecified)", arg, msgbuf, bufsize);
|
return converterr("(unspecified)", arg, msgbuf, bufsize);
|
||||||
if (*format == '#') {
|
if (*format == '#') {
|
||||||
int *q = va_arg(*p_va, int *);
|
FETCH_SIZE;
|
||||||
|
STORE_SIZE(count);
|
||||||
*q = count;
|
|
||||||
format++;
|
format++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1094,7 +1165,10 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
count = pb->bf_getcharbuffer(arg, 0, p);
|
count = pb->bf_getcharbuffer(arg, 0, p);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
return converterr("(unspecified)", arg, msgbuf, bufsize);
|
return converterr("(unspecified)", arg, msgbuf, bufsize);
|
||||||
*va_arg(*p_va, int *) = count;
|
{
|
||||||
|
FETCH_SIZE;
|
||||||
|
STORE_SIZE(count);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1107,11 +1181,11 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static Py_ssize_t
|
||||||
convertbuffer(PyObject *arg, void **p, char **errmsg)
|
convertbuffer(PyObject *arg, void **p, char **errmsg)
|
||||||
{
|
{
|
||||||
PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
|
PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
|
||||||
int count;
|
Py_ssize_t count;
|
||||||
if (pb == NULL ||
|
if (pb == NULL ||
|
||||||
pb->bf_getreadbuffer == NULL ||
|
pb->bf_getreadbuffer == NULL ||
|
||||||
pb->bf_getsegcount == NULL) {
|
pb->bf_getsegcount == NULL) {
|
||||||
|
@ -1151,7 +1225,32 @@ PyArg_ParseTupleAndKeywords(PyObject *args,
|
||||||
}
|
}
|
||||||
|
|
||||||
va_start(va, kwlist);
|
va_start(va, kwlist);
|
||||||
retval = vgetargskeywords(args, keywords, format, kwlist, &va);
|
retval = vgetargskeywords(args, keywords, format, kwlist, &va, 0);
|
||||||
|
va_end(va);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_PyArg_ParseTupleAndKeywords_SizeT(PyObject *args,
|
||||||
|
PyObject *keywords,
|
||||||
|
const char *format,
|
||||||
|
const char **kwlist, ...)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
va_list va;
|
||||||
|
|
||||||
|
if ((args == NULL || !PyTuple_Check(args)) ||
|
||||||
|
(keywords != NULL && !PyDict_Check(keywords)) ||
|
||||||
|
format == NULL ||
|
||||||
|
kwlist == NULL)
|
||||||
|
{
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
va_start(va, kwlist);
|
||||||
|
retval = vgetargskeywords(args, keywords, format,
|
||||||
|
kwlist, &va, FLAG_SIZE_T);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
@ -1185,14 +1284,47 @@ PyArg_VaParseTupleAndKeywords(PyObject *args,
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
retval = vgetargskeywords(args, keywords, format, kwlist, &lva);
|
retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0);
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
_PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
|
||||||
|
PyObject *keywords,
|
||||||
|
const char *format,
|
||||||
|
const char **kwlist, va_list va)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
va_list lva;
|
||||||
|
|
||||||
|
if ((args == NULL || !PyTuple_Check(args)) ||
|
||||||
|
(keywords != NULL && !PyDict_Check(keywords)) ||
|
||||||
|
format == NULL ||
|
||||||
|
kwlist == NULL)
|
||||||
|
{
|
||||||
|
PyErr_BadInternalCall();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef VA_LIST_IS_ARRAY
|
||||||
|
memcpy(lva, va, sizeof(va_list));
|
||||||
|
#else
|
||||||
|
#ifdef __va_copy
|
||||||
|
__va_copy(lva, va);
|
||||||
|
#else
|
||||||
|
lva = va;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
retval = vgetargskeywords(args, keywords, format,
|
||||||
|
kwlist, &lva, FLAG_SIZE_T);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
||||||
const char **kwlist, va_list *p_va)
|
const char **kwlist, va_list *p_va, int flags)
|
||||||
{
|
{
|
||||||
char msgbuf[512];
|
char msgbuf[512];
|
||||||
int levels[32];
|
int levels[32];
|
||||||
|
@ -1327,7 +1459,8 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
||||||
if (*format == '|')
|
if (*format == '|')
|
||||||
format++;
|
format++;
|
||||||
msg = convertitem(PyTuple_GET_ITEM(args, i), &format, p_va,
|
msg = convertitem(PyTuple_GET_ITEM(args, i), &format, p_va,
|
||||||
levels, msgbuf, sizeof(msgbuf), &freelist);
|
flags, levels, msgbuf, sizeof(msgbuf),
|
||||||
|
&freelist);
|
||||||
if (msg) {
|
if (msg) {
|
||||||
seterror(i+1, msg, levels, fname, message);
|
seterror(i+1, msg, levels, fname, message);
|
||||||
return cleanreturn(0, freelist);
|
return cleanreturn(0, freelist);
|
||||||
|
@ -1347,8 +1480,8 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
||||||
item = PyDict_GetItemString(keywords, kwlist[i]);
|
item = PyDict_GetItemString(keywords, kwlist[i]);
|
||||||
if (item != NULL) {
|
if (item != NULL) {
|
||||||
Py_INCREF(item);
|
Py_INCREF(item);
|
||||||
msg = convertitem(item, &format, p_va, levels, msgbuf,
|
msg = convertitem(item, &format, p_va, flags, levels,
|
||||||
sizeof(msgbuf), &freelist);
|
msgbuf, sizeof(msgbuf), &freelist);
|
||||||
Py_DECREF(item);
|
Py_DECREF(item);
|
||||||
if (msg) {
|
if (msg) {
|
||||||
seterror(i+1, msg, levels, fname, message);
|
seterror(i+1, msg, levels, fname, message);
|
||||||
|
@ -1361,7 +1494,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
||||||
else if (PyErr_Occurred())
|
else if (PyErr_Occurred())
|
||||||
return cleanreturn(0, freelist);
|
return cleanreturn(0, freelist);
|
||||||
else {
|
else {
|
||||||
msg = skipitem(&format, p_va);
|
msg = skipitem(&format, p_va, flags);
|
||||||
if (msg) {
|
if (msg) {
|
||||||
seterror(i+1, msg, levels, fname, message);
|
seterror(i+1, msg, levels, fname, message);
|
||||||
return cleanreturn(0, freelist);
|
return cleanreturn(0, freelist);
|
||||||
|
@ -1372,7 +1505,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
||||||
/* make sure there are no extraneous keyword arguments */
|
/* make sure there are no extraneous keyword arguments */
|
||||||
if (nkeywords > 0) {
|
if (nkeywords > 0) {
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
while (PyDict_Next(keywords, &pos, &key, &value)) {
|
while (PyDict_Next(keywords, &pos, &key, &value)) {
|
||||||
int match = 0;
|
int match = 0;
|
||||||
char *ks;
|
char *ks;
|
||||||
|
@ -1403,7 +1536,7 @@ vgetargskeywords(PyObject *args, PyObject *keywords, const char *format,
|
||||||
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
skipitem(const char **p_format, va_list *p_va)
|
skipitem(const char **p_format, va_list *p_va, int flags)
|
||||||
{
|
{
|
||||||
const char *format = *p_format;
|
const char *format = *p_format;
|
||||||
char c = *format++;
|
char c = *format++;
|
||||||
|
@ -1435,6 +1568,12 @@ skipitem(const char **p_format, va_list *p_va)
|
||||||
(void) va_arg(*p_va, void *);
|
(void) va_arg(*p_va, void *);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'n': /* Py_ssize_t */
|
||||||
|
{
|
||||||
|
(void) va_arg(*p_va, Py_ssize_t *);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* string codes */
|
/* string codes */
|
||||||
|
|
||||||
|
@ -1458,7 +1597,10 @@ skipitem(const char **p_format, va_list *p_va)
|
||||||
{
|
{
|
||||||
(void) va_arg(*p_va, char **);
|
(void) va_arg(*p_va, char **);
|
||||||
if (*format == '#') {
|
if (*format == '#') {
|
||||||
(void) va_arg(*p_va, int *);
|
if (flags & FLAG_SIZE_T)
|
||||||
|
(void) va_arg(*p_va, Py_ssize_t *);
|
||||||
|
else
|
||||||
|
(void) va_arg(*p_va, int *);
|
||||||
format++;
|
format++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -351,7 +351,7 @@ static char* sys_files[] = {
|
||||||
void
|
void
|
||||||
PyImport_Cleanup(void)
|
PyImport_Cleanup(void)
|
||||||
{
|
{
|
||||||
int pos, ndone;
|
Py_ssize_t pos, ndone;
|
||||||
char *name;
|
char *name;
|
||||||
PyObject *key, *value, *dict;
|
PyObject *key, *value, *dict;
|
||||||
PyInterpreterState *interp = PyThreadState_GET()->interp;
|
PyInterpreterState *interp = PyThreadState_GET()->interp;
|
||||||
|
@ -689,7 +689,7 @@ make_compiled_pathname(char *pathname, char *buf, size_t buflen)
|
||||||
Doesn't set an exception. */
|
Doesn't set an exception. */
|
||||||
|
|
||||||
static FILE *
|
static FILE *
|
||||||
check_compiled_module(char *pathname, long mtime, char *cpathname)
|
check_compiled_module(char *pathname, time_t mtime, char *cpathname)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
long magic;
|
long magic;
|
||||||
|
@ -805,10 +805,11 @@ open_exclusive(char *filename)
|
||||||
|O_BINARY /* necessary for Windows */
|
|O_BINARY /* necessary for Windows */
|
||||||
#endif
|
#endif
|
||||||
#ifdef __VMS
|
#ifdef __VMS
|
||||||
, 0666, "ctxt=bin", "shr=nil");
|
, 0666, "ctxt=bin", "shr=nil"
|
||||||
#else
|
#else
|
||||||
, 0666);
|
, 0666
|
||||||
#endif
|
#endif
|
||||||
|
);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
return fdopen(fd, "wb");
|
return fdopen(fd, "wb");
|
||||||
|
@ -825,7 +826,7 @@ open_exclusive(char *filename)
|
||||||
remove the file. */
|
remove the file. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write_compiled_module(PyCodeObject *co, char *cpathname, long mtime)
|
write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
@ -850,6 +851,7 @@ write_compiled_module(PyCodeObject *co, char *cpathname, long mtime)
|
||||||
}
|
}
|
||||||
/* Now write the true mtime */
|
/* Now write the true mtime */
|
||||||
fseek(fp, 4L, 0);
|
fseek(fp, 4L, 0);
|
||||||
|
assert(mtime < LONG_MAX);
|
||||||
PyMarshal_WriteLongToFile(mtime, fp, Py_MARSHAL_VERSION);
|
PyMarshal_WriteLongToFile(mtime, fp, Py_MARSHAL_VERSION);
|
||||||
fflush(fp);
|
fflush(fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
@ -1061,10 +1063,10 @@ get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
|
||||||
|
|
||||||
#ifdef MS_COREDLL
|
#ifdef MS_COREDLL
|
||||||
extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
|
extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
|
||||||
char *, int);
|
char *, Py_ssize_t);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int case_ok(char *, int, int, char *);
|
static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
|
||||||
static int find_init_module(char *); /* Forward */
|
static int find_init_module(char *); /* Forward */
|
||||||
static struct filedescr importhookdescr = {"", "", IMP_HOOK};
|
static struct filedescr importhookdescr = {"", "", IMP_HOOK};
|
||||||
|
|
||||||
|
@ -1372,7 +1374,7 @@ PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
|
||||||
return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
|
return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* case_ok(char* buf, int len, int namelen, char* name)
|
/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
|
||||||
* The arguments here are tricky, best shown by example:
|
* The arguments here are tricky, best shown by example:
|
||||||
* /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
|
* /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
|
||||||
* ^ ^ ^ ^
|
* ^ ^ ^ ^
|
||||||
|
@ -1420,7 +1422,7 @@ PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int
|
static int
|
||||||
case_ok(char *buf, int len, int namelen, char *name)
|
case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
|
||||||
{
|
{
|
||||||
/* Pick a platform-specific implementation; the sequence of #if's here should
|
/* Pick a platform-specific implementation; the sequence of #if's here should
|
||||||
* match the sequence just above.
|
* match the sequence just above.
|
||||||
|
@ -1891,12 +1893,12 @@ PyImport_ImportModule(const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Forward declarations for helper routines */
|
/* Forward declarations for helper routines */
|
||||||
static PyObject *get_parent(PyObject *globals, char *buf, int *p_buflen);
|
static PyObject *get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen);
|
||||||
static PyObject *load_next(PyObject *mod, PyObject *altmod,
|
static PyObject *load_next(PyObject *mod, PyObject *altmod,
|
||||||
char **p_name, char *buf, int *p_buflen);
|
char **p_name, char *buf, Py_ssize_t *p_buflen);
|
||||||
static int mark_miss(char *name);
|
static int mark_miss(char *name);
|
||||||
static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
|
static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
|
||||||
char *buf, int buflen, int recursive);
|
char *buf, Py_ssize_t buflen, int recursive);
|
||||||
static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
|
static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
|
||||||
|
|
||||||
/* The Magnum Opus of dotted-name import :-) */
|
/* The Magnum Opus of dotted-name import :-) */
|
||||||
|
@ -1906,7 +1908,7 @@ import_module_ex(char *name, PyObject *globals, PyObject *locals,
|
||||||
PyObject *fromlist)
|
PyObject *fromlist)
|
||||||
{
|
{
|
||||||
char buf[MAXPATHLEN+1];
|
char buf[MAXPATHLEN+1];
|
||||||
int buflen = 0;
|
Py_ssize_t buflen = 0;
|
||||||
PyObject *parent, *head, *next, *tail;
|
PyObject *parent, *head, *next, *tail;
|
||||||
|
|
||||||
parent = get_parent(globals, buf, &buflen);
|
parent = get_parent(globals, buf, &buflen);
|
||||||
|
@ -1976,7 +1978,7 @@ PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
|
||||||
corresponding entry is not found in sys.modules, Py_None is returned.
|
corresponding entry is not found in sys.modules, Py_None is returned.
|
||||||
*/
|
*/
|
||||||
static PyObject *
|
static PyObject *
|
||||||
get_parent(PyObject *globals, char *buf, int *p_buflen)
|
get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen)
|
||||||
{
|
{
|
||||||
static PyObject *namestr = NULL;
|
static PyObject *namestr = NULL;
|
||||||
static PyObject *pathstr = NULL;
|
static PyObject *pathstr = NULL;
|
||||||
|
@ -2044,7 +2046,7 @@ get_parent(PyObject *globals, char *buf, int *p_buflen)
|
||||||
/* altmod is either None or same as mod */
|
/* altmod is either None or same as mod */
|
||||||
static PyObject *
|
static PyObject *
|
||||||
load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
|
load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
|
||||||
int *p_buflen)
|
Py_ssize_t *p_buflen)
|
||||||
{
|
{
|
||||||
char *name = *p_name;
|
char *name = *p_name;
|
||||||
char *dot = strchr(name, '.');
|
char *dot = strchr(name, '.');
|
||||||
|
@ -2114,7 +2116,7 @@ mark_miss(char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, int buflen,
|
ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
|
||||||
int recursive)
|
int recursive)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -363,10 +363,10 @@ int (*PyMacGluePtr_##routinename)(PyObject *, object *); \
|
||||||
\
|
\
|
||||||
int routinename(PyObject *pyobj, object *cobj) { \
|
int routinename(PyObject *pyobj, object *cobj) { \
|
||||||
if (!PyMacGluePtr_##routinename) { \
|
if (!PyMacGluePtr_##routinename) { \
|
||||||
if (!PyImport_ImportModule(module)) return NULL; \
|
if (!PyImport_ImportModule(module)) return 0; \
|
||||||
if (!PyMacGluePtr_##routinename) { \
|
if (!PyMacGluePtr_##routinename) { \
|
||||||
PyErr_SetString(PyExc_ImportError, "Module did not provide routine: " module ": " #routinename); \
|
PyErr_SetString(PyExc_ImportError, "Module did not provide routine: " module ": " #routinename); \
|
||||||
return NULL; \
|
return 0; \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
return (*PyMacGluePtr_##routinename)(pyobj, cobj); \
|
return (*PyMacGluePtr_##routinename)(pyobj, cobj); \
|
||||||
|
|
|
@ -59,7 +59,7 @@ typedef struct {
|
||||||
static void
|
static void
|
||||||
w_more(int c, WFILE *p)
|
w_more(int c, WFILE *p)
|
||||||
{
|
{
|
||||||
int size, newsize;
|
Py_ssize_t size, newsize;
|
||||||
if (p->str == NULL)
|
if (p->str == NULL)
|
||||||
return; /* An error already occurred */
|
return; /* An error already occurred */
|
||||||
size = PyString_Size(p->str);
|
size = PyString_Size(p->str);
|
||||||
|
@ -117,7 +117,7 @@ w_long64(long x, WFILE *p)
|
||||||
static void
|
static void
|
||||||
w_object(PyObject *v, WFILE *p)
|
w_object(PyObject *v, WFILE *p)
|
||||||
{
|
{
|
||||||
int i, n;
|
Py_ssize_t i, n;
|
||||||
|
|
||||||
p->depth++;
|
p->depth++;
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ w_object(PyObject *v, WFILE *p)
|
||||||
else {
|
else {
|
||||||
char buf[256]; /* Plenty to format any double */
|
char buf[256]; /* Plenty to format any double */
|
||||||
PyFloat_AsReprString(buf, (PyFloatObject *)v);
|
PyFloat_AsReprString(buf, (PyFloatObject *)v);
|
||||||
n = strlen(buf);
|
n = (int)strlen(buf);
|
||||||
w_byte(TYPE_FLOAT, p);
|
w_byte(TYPE_FLOAT, p);
|
||||||
w_byte(n, p);
|
w_byte(n, p);
|
||||||
w_string(buf, n, p);
|
w_string(buf, n, p);
|
||||||
|
@ -213,14 +213,14 @@ w_object(PyObject *v, WFILE *p)
|
||||||
PyComplex_RealAsDouble(v));
|
PyComplex_RealAsDouble(v));
|
||||||
PyFloat_AsReprString(buf, temp);
|
PyFloat_AsReprString(buf, temp);
|
||||||
Py_DECREF(temp);
|
Py_DECREF(temp);
|
||||||
n = strlen(buf);
|
n = (int)strlen(buf);
|
||||||
w_byte(n, p);
|
w_byte(n, p);
|
||||||
w_string(buf, n, p);
|
w_string(buf, n, p);
|
||||||
temp = (PyFloatObject*)PyFloat_FromDouble(
|
temp = (PyFloatObject*)PyFloat_FromDouble(
|
||||||
PyComplex_ImagAsDouble(v));
|
PyComplex_ImagAsDouble(v));
|
||||||
PyFloat_AsReprString(buf, temp);
|
PyFloat_AsReprString(buf, temp);
|
||||||
Py_DECREF(temp);
|
Py_DECREF(temp);
|
||||||
n = strlen(buf);
|
n = (int)strlen(buf);
|
||||||
w_byte(n, p);
|
w_byte(n, p);
|
||||||
w_string(buf, n, p);
|
w_string(buf, n, p);
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ w_object(PyObject *v, WFILE *p)
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
o = PyInt_FromLong(PyDict_Size(p->strings));
|
o = PyInt_FromSsize_t(PyDict_Size(p->strings));
|
||||||
PyDict_SetItem(p->strings, v, o);
|
PyDict_SetItem(p->strings, v, o);
|
||||||
Py_DECREF(o);
|
Py_DECREF(o);
|
||||||
w_byte(TYPE_INTERNED, p);
|
w_byte(TYPE_INTERNED, p);
|
||||||
|
@ -282,7 +282,7 @@ w_object(PyObject *v, WFILE *p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (PyDict_Check(v)) {
|
else if (PyDict_Check(v)) {
|
||||||
int pos;
|
Py_ssize_t pos;
|
||||||
PyObject *key, *value;
|
PyObject *key, *value;
|
||||||
w_byte(TYPE_DICT, p);
|
w_byte(TYPE_DICT, p);
|
||||||
/* This one is NULL object terminated! */
|
/* This one is NULL object terminated! */
|
||||||
|
@ -395,9 +395,10 @@ static int
|
||||||
r_string(char *s, int n, RFILE *p)
|
r_string(char *s, int n, RFILE *p)
|
||||||
{
|
{
|
||||||
if (p->fp != NULL)
|
if (p->fp != NULL)
|
||||||
return fread(s, 1, n, p->fp);
|
/* The result fits into int because it must be <=n. */
|
||||||
|
return (int)fread(s, 1, n, p->fp);
|
||||||
if (p->end - p->ptr < n)
|
if (p->end - p->ptr < n)
|
||||||
n = p->end - p->ptr;
|
n = (int)(p->end - p->ptr);
|
||||||
memcpy(s, p->ptr, n);
|
memcpy(s, p->ptr, n);
|
||||||
p->ptr += n;
|
p->ptr += n;
|
||||||
return n;
|
return n;
|
||||||
|
@ -939,7 +940,10 @@ PyMarshal_ReadLastObjectFromFile(FILE *fp)
|
||||||
pBuf = (char *)PyMem_MALLOC(filesize);
|
pBuf = (char *)PyMem_MALLOC(filesize);
|
||||||
if (pBuf != NULL) {
|
if (pBuf != NULL) {
|
||||||
PyObject* v;
|
PyObject* v;
|
||||||
size_t n = fread(pBuf, 1, filesize, fp);
|
size_t n;
|
||||||
|
/* filesize must fit into an int, because it
|
||||||
|
is smaller than REASONABLE_FILE_LIMIT */
|
||||||
|
n = fread(pBuf, 1, (int)filesize, fp);
|
||||||
v = PyMarshal_ReadObjectFromString(pBuf, n);
|
v = PyMarshal_ReadObjectFromString(pBuf, n);
|
||||||
if (pBuf != buf)
|
if (pBuf != buf)
|
||||||
PyMem_FREE(pBuf);
|
PyMem_FREE(pBuf);
|
||||||
|
@ -970,7 +974,7 @@ PyMarshal_ReadObjectFromFile(FILE *fp)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *
|
PyObject *
|
||||||
PyMarshal_ReadObjectFromString(char *str, int len)
|
PyMarshal_ReadObjectFromString(char *str, Py_ssize_t len)
|
||||||
{
|
{
|
||||||
RFILE rf;
|
RFILE rf;
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
|
|
|
@ -313,6 +313,11 @@ do_mkvalue(const char **p_format, va_list *p_va)
|
||||||
return PyInt_FromLong(n);
|
return PyInt_FromLong(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'n':
|
||||||
|
#if SIZEOF_SIZE_T!=SIZEOF_LONG
|
||||||
|
return PyLong_FromSsize_t(va_arg(*p_va, Py_Ssize_t));
|
||||||
|
#endif
|
||||||
|
/* Fall through from 'n' to 'l' if Py_ssize_t is long */
|
||||||
case 'l':
|
case 'l':
|
||||||
return PyInt_FromLong(va_arg(*p_va, long));
|
return PyInt_FromLong(va_arg(*p_va, long));
|
||||||
|
|
||||||
|
@ -371,7 +376,7 @@ do_mkvalue(const char **p_format, va_list *p_va)
|
||||||
case 'c':
|
case 'c':
|
||||||
{
|
{
|
||||||
char p[1];
|
char p[1];
|
||||||
p[0] = va_arg(*p_va, int);
|
p[0] = (char)va_arg(*p_va, int);
|
||||||
return PyString_FromStringAndSize(p, 1);
|
return PyString_FromStringAndSize(p, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ PyOS_ascii_strtod(const char *nptr, char **endptr)
|
||||||
**/
|
**/
|
||||||
char *
|
char *
|
||||||
PyOS_ascii_formatd(char *buffer,
|
PyOS_ascii_formatd(char *buffer,
|
||||||
int buf_len,
|
size_t buf_len,
|
||||||
const char *format,
|
const char *format,
|
||||||
double d)
|
double d)
|
||||||
{
|
{
|
||||||
|
|
|
@ -939,7 +939,7 @@ print_error_text(PyObject *f, int offset, const char *text)
|
||||||
nl = strchr(text, '\n');
|
nl = strchr(text, '\n');
|
||||||
if (nl == NULL || nl-text >= offset)
|
if (nl == NULL || nl-text >= offset)
|
||||||
break;
|
break;
|
||||||
offset -= (nl+1-text);
|
offset -= (int)(nl+1-text);
|
||||||
text = nl+1;
|
text = nl+1;
|
||||||
}
|
}
|
||||||
while (*text == ' ' || *text == '\t') {
|
while (*text == ' ' || *text == '\t') {
|
||||||
|
|
|
@ -426,7 +426,8 @@ static int
|
||||||
analyze_cells(PyObject *scope, PyObject *free)
|
analyze_cells(PyObject *scope, PyObject *free)
|
||||||
{
|
{
|
||||||
PyObject *name, *v, *w;
|
PyObject *name, *v, *w;
|
||||||
int pos = 0, success = 0;
|
int success = 0;
|
||||||
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
w = PyInt_FromLong(CELL);
|
w = PyInt_FromLong(CELL);
|
||||||
if (!w)
|
if (!w)
|
||||||
|
@ -507,7 +508,7 @@ update_symbols(PyObject *symbols, PyObject *scope,
|
||||||
PyObject *bound, PyObject *free, int class)
|
PyObject *bound, PyObject *free, int class)
|
||||||
{
|
{
|
||||||
PyObject *name, *v, *u, *w, *free_value = NULL;
|
PyObject *name, *v, *u, *w, *free_value = NULL;
|
||||||
int pos = 0;
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
while (PyDict_Next(symbols, &pos, &name, &v)) {
|
while (PyDict_Next(symbols, &pos, &name, &v)) {
|
||||||
long i, flags;
|
long i, flags;
|
||||||
|
@ -583,7 +584,8 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free,
|
||||||
{
|
{
|
||||||
PyObject *name, *v, *local = NULL, *scope = NULL, *newbound = NULL;
|
PyObject *name, *v, *local = NULL, *scope = NULL, *newbound = NULL;
|
||||||
PyObject *newglobal = NULL, *newfree = NULL;
|
PyObject *newglobal = NULL, *newfree = NULL;
|
||||||
int i, pos = 0, success = 0;
|
int i, success = 0;
|
||||||
|
Py_ssize_t pos = 0;
|
||||||
|
|
||||||
local = PyDict_New();
|
local = PyDict_New();
|
||||||
if (!local)
|
if (!local)
|
||||||
|
|
|
@ -1279,7 +1279,7 @@ PySys_SetArgv(int argc, char **argv)
|
||||||
if (path != NULL) {
|
if (path != NULL) {
|
||||||
char *argv0 = argv[0];
|
char *argv0 = argv[0];
|
||||||
char *p = NULL;
|
char *p = NULL;
|
||||||
int n = 0;
|
Py_ssize_t n = 0;
|
||||||
PyObject *a;
|
PyObject *a;
|
||||||
#ifdef HAVE_READLINK
|
#ifdef HAVE_READLINK
|
||||||
char link[MAXPATHLEN+1];
|
char link[MAXPATHLEN+1];
|
||||||
|
|
|
@ -170,7 +170,7 @@ bootstrap(void *call)
|
||||||
long
|
long
|
||||||
PyThread_start_new_thread(void (*func)(void *), void *arg)
|
PyThread_start_new_thread(void (*func)(void *), void *arg)
|
||||||
{
|
{
|
||||||
unsigned long rv;
|
uintptr_t rv;
|
||||||
callobj obj;
|
callobj obj;
|
||||||
|
|
||||||
dprintf(("%ld: PyThread_start_new_thread called\n",
|
dprintf(("%ld: PyThread_start_new_thread called\n",
|
||||||
|
@ -186,7 +186,7 @@ PyThread_start_new_thread(void (*func)(void *), void *arg)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
rv = _beginthread(bootstrap, 0, &obj); /* use default stack size */
|
rv = _beginthread(bootstrap, 0, &obj); /* use default stack size */
|
||||||
if (rv == (unsigned long)-1) {
|
if (rv == (uintptr_t)-1) {
|
||||||
/* I've seen errno == EAGAIN here, which means "there are
|
/* I've seen errno == EAGAIN here, which means "there are
|
||||||
* too many threads".
|
* too many threads".
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -66,7 +66,7 @@ static void countobjs(PyDrawFObject *pd)
|
||||||
if ((char*)d==end) pd->nobjs=k;
|
if ((char*)d==end) pd->nobjs=k;
|
||||||
}
|
}
|
||||||
|
|
||||||
static drawfile_object *findobj(PyDrawFObject *pd,int n)
|
static drawfile_object *findobj(PyDrawFObject *pd,Py_ssize_t n)
|
||||||
{ drawfile_diagram *dd=pd->drawf;
|
{ drawfile_diagram *dd=pd->drawf;
|
||||||
drawfile_object *d=dd->objects;
|
drawfile_object *d=dd->objects;
|
||||||
for(;n>0;n--) d=NEXT(d);
|
for(;n>0;n--) d=NEXT(d);
|
||||||
|
@ -520,14 +520,14 @@ static PyObject *drawf_concat(PyDrawFObject *b,PyDrawFObject *c)
|
||||||
return (PyObject*)p;
|
return (PyObject*)p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *drawf_repeat(PyDrawFObject *b,int i)
|
static PyObject *drawf_repeat(PyDrawFObject *b,Py_ssize_t i)
|
||||||
{ PyErr_SetString(PyExc_IndexError,"drawf repetition not implemented");
|
{ PyErr_SetString(PyExc_IndexError,"drawf repetition not implemented");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *drawf_item(PyDrawFObject *b,int i)
|
static PyObject *drawf_item(PyDrawFObject *b,Py_ssize_t i)
|
||||||
{ PyDrawFObject *c;
|
{ PyDrawFObject *c;
|
||||||
int size;
|
Py_ssize_t size;
|
||||||
drawfile_diagram *dd;
|
drawfile_diagram *dd;
|
||||||
drawfile_object *d;
|
drawfile_object *d;
|
||||||
if(i<0||i>=b->nobjs)
|
if(i<0||i>=b->nobjs)
|
||||||
|
@ -546,9 +546,9 @@ static PyObject *drawf_item(PyDrawFObject *b,int i)
|
||||||
return (PyObject*)c;
|
return (PyObject*)c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *drawf_slice(PyDrawFObject *b,int i,int j)
|
static PyObject *drawf_slice(PyDrawFObject *b,Py_ssize_t i,Py_ssize_t j)
|
||||||
{ PyDrawFObject *c;
|
{ PyDrawFObject *c;
|
||||||
int size,n;
|
Py_ssize_t size,n;
|
||||||
drawfile_diagram *dd;
|
drawfile_diagram *dd;
|
||||||
drawfile_object *d;
|
drawfile_object *d;
|
||||||
if(i<0||j>b->nobjs)
|
if(i<0||j>b->nobjs)
|
||||||
|
@ -570,7 +570,7 @@ static PyObject *drawf_slice(PyDrawFObject *b,int i,int j)
|
||||||
return (PyObject*)c;
|
return (PyObject*)c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int drawf_ass_item(PyDrawFObject *b,int i,PyObject *v)
|
static int drawf_ass_item(PyDrawFObject *b,Py_ssize_t i,PyObject *v)
|
||||||
{ PyErr_SetString(PyExc_IndexError,"drawf ass not implemented");
|
{ PyErr_SetString(PyExc_IndexError,"drawf ass not implemented");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -587,7 +587,7 @@ static int drawf_ass_item(PyDrawFObject *b,int i,PyObject *v)
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int drawf_ass_slice(PyDrawFObject *b,int i,int j,PyObject *v)
|
static int drawf_ass_slice(PyDrawFObject *b,Py_ssize_t i,Py_ssize_t j,PyObject *v)
|
||||||
{ PyErr_SetString(PyExc_IndexError,"drawf ass_slice not implemented");
|
{ PyErr_SetString(PyExc_IndexError,"drawf ass_slice not implemented");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -595,11 +595,11 @@ static int drawf_ass_slice(PyDrawFObject *b,int i,int j,PyObject *v)
|
||||||
static PySequenceMethods drawf_as_sequence=
|
static PySequenceMethods drawf_as_sequence=
|
||||||
{ (inquiry)drawf_len,
|
{ (inquiry)drawf_len,
|
||||||
(binaryfunc)drawf_concat,
|
(binaryfunc)drawf_concat,
|
||||||
(intargfunc)drawf_repeat,
|
(ssizeargfunc)drawf_repeat,
|
||||||
(intargfunc)drawf_item,
|
(ssizeargfunc)drawf_item,
|
||||||
(intintargfunc)drawf_slice,
|
(ssizessizeargfunc)drawf_slice,
|
||||||
(intobjargproc)drawf_ass_item,
|
(ssizeobjargproc)drawf_ass_item,
|
||||||
(intintobjargproc)drawf_ass_slice,
|
(ssizessizeobjargproc)drawf_ass_slice,
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *PyDrawF_GetAttr(PyDrawFObject *s,char *name)
|
static PyObject *PyDrawF_GetAttr(PyDrawFObject *s,char *name)
|
||||||
|
|
|
@ -215,12 +215,12 @@ static PyObject *block_concat(PyBlockObject *b,PyBlockObject *c)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *block_repeat(PyBlockObject *b,int i)
|
static PyObject *block_repeat(PyBlockObject *b,Py_ssize_t i)
|
||||||
{ PyErr_SetString(PyExc_IndexError,"block repetition not implemented");
|
{ PyErr_SetString(PyExc_IndexError,"block repetition not implemented");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *block_item(PyBlockObject *b,int i)
|
static PyObject *block_item(PyBlockObject *b,Py_ssize_t i)
|
||||||
{ if(i<0||4*i>=b->length)
|
{ if(i<0||4*i>=b->length)
|
||||||
{ PyErr_SetString(PyExc_IndexError,"block index out of range");
|
{ PyErr_SetString(PyExc_IndexError,"block index out of range");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -228,8 +228,8 @@ static PyObject *block_item(PyBlockObject *b,int i)
|
||||||
return PyInt_FromLong(((long*)(b->block))[i]);
|
return PyInt_FromLong(((long*)(b->block))[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *block_slice(PyBlockObject *b,int i,int j)
|
static PyObject *block_slice(PyBlockObject *b,Py_ssize_t i,Py_ssize_t j)
|
||||||
{ int n,k;
|
{ Py_ssize_t n,k;
|
||||||
long *p=b->block;
|
long *p=b->block;
|
||||||
PyObject *result;
|
PyObject *result;
|
||||||
if(j>b->length/4) j=b->length/4;
|
if(j>b->length/4) j=b->length/4;
|
||||||
|
@ -239,11 +239,11 @@ static PyObject *block_slice(PyBlockObject *b,int i,int j)
|
||||||
}
|
}
|
||||||
n=j-i;
|
n=j-i;
|
||||||
result=PyList_New(n);
|
result=PyList_New(n);
|
||||||
for(k=0;k<n;k++) PyList_SetItem(result,k,PyInt_FromLong(p[i+k]));
|
for(k=0;k<n;k++) PyList_SetItem(result,k,PyInt_FromSsize_t(p[i+k]));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int block_ass_item(PyBlockObject *b,int i,PyObject *v)
|
static int block_ass_item(PyBlockObject *b,Py_ssize_t i,PyObject *v)
|
||||||
{ if(i<0||i>=b->length/4)
|
{ if(i<0||i>=b->length/4)
|
||||||
{ PyErr_SetString(PyExc_IndexError,"block index out of range");
|
{ PyErr_SetString(PyExc_IndexError,"block index out of range");
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -256,8 +256,8 @@ static int block_ass_item(PyBlockObject *b,int i,PyObject *v)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int block_ass_slice(PyBlockObject *b,int i,int j,PyObject *v)
|
static int block_ass_slice(PyBlockObject *b,Py_ssize_t i,Py_ssize_t j,PyObject *v)
|
||||||
{ int n,k;
|
{ Py_ssize_t n,k;
|
||||||
long *p=b->block;
|
long *p=b->block;
|
||||||
if(j>b->length/4) j=b->length/4;
|
if(j>b->length/4) j=b->length/4;
|
||||||
if(i<0||i>j)
|
if(i<0||i>j)
|
||||||
|
@ -281,11 +281,11 @@ static int block_ass_slice(PyBlockObject *b,int i,int j,PyObject *v)
|
||||||
static PySequenceMethods block_as_sequence=
|
static PySequenceMethods block_as_sequence=
|
||||||
{ (inquiry)block_len, /*sq_length*/
|
{ (inquiry)block_len, /*sq_length*/
|
||||||
(binaryfunc)block_concat, /*sq_concat*/
|
(binaryfunc)block_concat, /*sq_concat*/
|
||||||
(intargfunc)block_repeat, /*sq_repeat*/
|
(ssizeargfunc)block_repeat, /*sq_repeat*/
|
||||||
(intargfunc)block_item, /*sq_item*/
|
(ssizeargfunc)block_item, /*sq_item*/
|
||||||
(intintargfunc)block_slice, /*sq_slice*/
|
(ssizessizeargfunc)block_slice, /*sq_slice*/
|
||||||
(intobjargproc)block_ass_item, /*sq_ass_item*/
|
(ssizeobjargproc)block_ass_item, /*sq_ass_item*/
|
||||||
(intintobjargproc)block_ass_slice, /*sq_ass_slice*/
|
(ssizessizeobjargproc)block_ass_slice, /*sq_ass_slice*/
|
||||||
};
|
};
|
||||||
|
|
||||||
static PyObject *PyBlock_GetAttr(PyBlockObject *s,char *name)
|
static PyObject *PyBlock_GetAttr(PyBlockObject *s,char *name)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# From configure.in Revision: 42199 .
|
# From configure.in Revision: 42307 .
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.59 for python 2.5.
|
# Generated by GNU Autoconf 2.59 for python 2.5.
|
||||||
#
|
#
|
||||||
|
@ -6197,6 +6197,70 @@ _ACEOF
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking for ssize_t" >&5
|
||||||
|
echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_type_ssize_t+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if ((ssize_t *) 0)
|
||||||
|
return 0;
|
||||||
|
if (sizeof (ssize_t))
|
||||||
|
return 0;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_type_ssize_t=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_cv_type_ssize_t=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
|
||||||
|
if test $ac_cv_type_ssize_t = yes; then
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_SSIZE_T 1
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Sizes of various common basic types
|
# Sizes of various common basic types
|
||||||
# ANSI C requires sizeof(char) == 1, so no need to check it
|
# ANSI C requires sizeof(char) == 1, so no need to check it
|
||||||
|
@ -9098,6 +9162,420 @@ cat >>confdefs.h <<_ACEOF
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking for size_t" >&5
|
||||||
|
echo $ECHO_N "checking for size_t... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_type_size_t+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
if ((size_t *) 0)
|
||||||
|
return 0;
|
||||||
|
if (sizeof (size_t))
|
||||||
|
return 0;
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_type_size_t=yes
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_cv_type_size_t=no
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_type_size_t" >&6
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking size of size_t" >&5
|
||||||
|
echo $ECHO_N "checking size of size_t... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_sizeof_size_t+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
if test "$ac_cv_type_size_t" = yes; then
|
||||||
|
# The cast to unsigned long works around a bug in the HP C Compiler
|
||||||
|
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
||||||
|
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
||||||
|
# This bug is HP SR number 8606223364.
|
||||||
|
if test "$cross_compiling" = yes; then
|
||||||
|
# Depending upon the size, compute the lo and hi bounds.
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= 0)];
|
||||||
|
test_array [0] = 0
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_lo=0 ac_mid=0
|
||||||
|
while :; do
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
|
||||||
|
test_array [0] = 0
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_hi=$ac_mid; break
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_lo=`expr $ac_mid + 1`
|
||||||
|
if test $ac_lo -le $ac_mid; then
|
||||||
|
ac_lo= ac_hi=
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
ac_mid=`expr 2 '*' $ac_mid + 1`
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
static int test_array [1 - 2 * !(((long) (sizeof (size_t))) < 0)];
|
||||||
|
test_array [0] = 0
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_hi=-1 ac_mid=-1
|
||||||
|
while :; do
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= $ac_mid)];
|
||||||
|
test_array [0] = 0
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_lo=$ac_mid; break
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_hi=`expr '(' $ac_mid ')' - 1`
|
||||||
|
if test $ac_mid -le $ac_hi; then
|
||||||
|
ac_lo= ac_hi=
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
ac_mid=`expr 2 '*' $ac_mid`
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_lo= ac_hi=
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
# Binary search between lo and hi bounds.
|
||||||
|
while test "x$ac_lo" != "x$ac_hi"; do
|
||||||
|
ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
|
||||||
|
test_array [0] = 0
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
||||||
|
(eval $ac_compile) 2>conftest.er1
|
||||||
|
ac_status=$?
|
||||||
|
grep -v '^ *+' conftest.er1 >conftest.err
|
||||||
|
rm -f conftest.er1
|
||||||
|
cat conftest.err >&5
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -z "$ac_c_werror_flag"
|
||||||
|
|| test ! -s conftest.err'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; } &&
|
||||||
|
{ ac_try='test -s conftest.$ac_objext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_hi=$ac_mid
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_lo=`expr '(' $ac_mid ')' + 1`
|
||||||
|
fi
|
||||||
|
rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||||
|
done
|
||||||
|
case $ac_lo in
|
||||||
|
?*) ac_cv_sizeof_size_t=$ac_lo;;
|
||||||
|
'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77
|
||||||
|
See \`config.log' for more details." >&5
|
||||||
|
echo "$as_me: error: cannot compute sizeof (size_t), 77
|
||||||
|
See \`config.log' for more details." >&2;}
|
||||||
|
{ (exit 1); exit 1; }; } ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
if test "$cross_compiling" = yes; then
|
||||||
|
{ { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
|
||||||
|
See \`config.log' for more details." >&5
|
||||||
|
echo "$as_me: error: cannot run test program while cross compiling
|
||||||
|
See \`config.log' for more details." >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
|
else
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
$ac_includes_default
|
||||||
|
long longval () { return (long) (sizeof (size_t)); }
|
||||||
|
unsigned long ulongval () { return (long) (sizeof (size_t)); }
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
FILE *f = fopen ("conftest.val", "w");
|
||||||
|
if (! f)
|
||||||
|
exit (1);
|
||||||
|
if (((long) (sizeof (size_t))) < 0)
|
||||||
|
{
|
||||||
|
long i = longval ();
|
||||||
|
if (i != ((long) (sizeof (size_t))))
|
||||||
|
exit (1);
|
||||||
|
fprintf (f, "%ld\n", i);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned long i = ulongval ();
|
||||||
|
if (i != ((long) (sizeof (size_t))))
|
||||||
|
exit (1);
|
||||||
|
fprintf (f, "%lu\n", i);
|
||||||
|
}
|
||||||
|
exit (ferror (f) || fclose (f) != 0);
|
||||||
|
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_sizeof_size_t=`cat conftest.val`
|
||||||
|
else
|
||||||
|
echo "$as_me: program exited with status $ac_status" >&5
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
( exit $ac_status )
|
||||||
|
{ { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77
|
||||||
|
See \`config.log' for more details." >&5
|
||||||
|
echo "$as_me: error: cannot compute sizeof (size_t), 77
|
||||||
|
See \`config.log' for more details." >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
|
fi
|
||||||
|
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f conftest.val
|
||||||
|
else
|
||||||
|
ac_cv_sizeof_size_t=0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
echo "$as_me:$LINENO: checking for long long support" >&5
|
echo "$as_me:$LINENO: checking for long long support" >&5
|
||||||
echo $ECHO_N "checking for long long support... $ECHO_C" >&6
|
echo $ECHO_N "checking for long long support... $ECHO_C" >&6
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue