diff options
author | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-08-11 17:31:17 (GMT) |
---|---|---|
committer | Alexander Belopolsky <alexander.belopolsky@gmail.com> | 2010-08-11 17:31:17 (GMT) |
commit | f0f45142d52436d26ce8ed888c73496949caae90 (patch) | |
tree | 53a4f3c197b87cb8afa33b87de48b06d5859513d | |
parent | 3a879e8a277e61195f5379862ef47f3ca9c69f4b (diff) | |
download | cpython-f0f45142d52436d26ce8ed888c73496949caae90.zip cpython-f0f45142d52436d26ce8ed888c73496949caae90.tar.gz cpython-f0f45142d52436d26ce8ed888c73496949caae90.tar.bz2 |
Issue #2443: Added a new macro, Py_VA_COPY, which is equivalent to C99
va_copy, but available on all python platforms. Untabified a few
unrelated files.
-rw-r--r-- | Include/pyport.h | 10 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Modules/_elementtree.c | 28 | ||||
-rw-r--r-- | Modules/_hashopenssl.c | 2 | ||||
-rw-r--r-- | Objects/abstract.c | 10 | ||||
-rw-r--r-- | Objects/bytearrayobject.c | 14 | ||||
-rw-r--r-- | Objects/bytesobject.c | 10 | ||||
-rw-r--r-- | Objects/capsule.c | 36 | ||||
-rw-r--r-- | Objects/memoryobject.c | 8 | ||||
-rw-r--r-- | Objects/unicodectype.c | 16 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 10 | ||||
-rw-r--r-- | Python/getargs.c | 40 | ||||
-rw-r--r-- | Python/modsupport.c | 10 |
13 files changed, 74 insertions, 124 deletions
diff --git a/Include/pyport.h b/Include/pyport.h index 9561285..3932dc6 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -822,4 +822,14 @@ extern pid_t forkpty(int *, char *, struct termios *, struct winsize *); #define Py_ULL(x) Py_LL(x##U) #endif +#ifdef VA_LIST_IS_ARRAY +#define Py_VA_COPY(x, y) Py_MEMCPY((x), (y), sizeof(va_list)) +#else +#ifdef __va_copy +#define Py_VA_COPY __va_copy +#else +#define Py_VA_COPY(x, y) (x) = (y) +#endif +#endif + #endif /* Py_PYPORT_H */ @@ -583,6 +583,10 @@ Core and Builtins C-API ----- +- Issue #2443: A new macro, `Py_VA_COPY`, copies the state of the + variable argument list. `Py_VA_COPY` is equivalent to C99 + `va_copy`, but available on all python platforms. + - PySlice_GetIndicesEx now clips the step to [-PY_SSIZE_T_MAX, PY_SSIZE_T_MAX] instead of [-PY_SSIZE_T_MAX-1, PY_SSIZE_T_MAX]. This makes it safe to do "step = -step" when reversing a slice. diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index 2fad8e2..876ab3a 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2870,15 +2870,15 @@ static PyMethodDef _functions[] = { static struct PyModuleDef _elementtreemodule = { - PyModuleDef_HEAD_INIT, - "_elementtree", - NULL, - -1, - _functions, - NULL, - NULL, - NULL, - NULL + PyModuleDef_HEAD_INIT, + "_elementtree", + NULL, + -1, + _functions, + NULL, + NULL, + NULL, + NULL }; PyMODINIT_FUNC @@ -2890,12 +2890,12 @@ PyInit__elementtree(void) /* Initialize object types */ if (PyType_Ready(&TreeBuilder_Type) < 0) - return NULL; + return NULL; if (PyType_Ready(&Element_Type) < 0) - return NULL; + return NULL; #if defined(USE_EXPAT) if (PyType_Ready(&XMLParser_Type) < 0) - return NULL; + return NULL; #endif m = PyModule_Create(&_elementtreemodule); @@ -2905,8 +2905,8 @@ PyInit__elementtree(void) /* The code below requires that the module gets already added to sys.modules. */ PyDict_SetItemString(PyImport_GetModuleDict(), - _elementtreemodule.m_name, - m); + _elementtreemodule.m_name, + m); /* python glue code */ diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c index 887de55..9f550a6 100644 --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -559,7 +559,7 @@ static struct PyMethodDef EVP_functions[] = { CONSTRUCTOR_METH_DEF(sha384), CONSTRUCTOR_METH_DEF(sha512), #endif - {NULL, NULL} /* Sentinel */ + {NULL, NULL} /* Sentinel */ }; diff --git a/Objects/abstract.c b/Objects/abstract.c index fa2611a..d5a5d3c 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2311,15 +2311,7 @@ objargs_mktuple(va_list va) va_list countva; PyObject *result, *tmp; -#ifdef VA_LIST_IS_ARRAY - memcpy(countva, va, sizeof(va_list)); -#else -#ifdef __va_copy - __va_copy(countva, va); -#else - countva = va; -#endif -#endif + Py_VA_COPY(countva, va); while (((PyObject *)va_arg(countva, PyObject *)) != NULL) ++n; diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index cdc860f..be19a82 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -936,12 +936,12 @@ bytearray_repr(PyByteArrayObject *self) static PyObject * bytearray_str(PyObject *op) { - if (Py_BytesWarningFlag) { - if (PyErr_WarnEx(PyExc_BytesWarning, - "str() on a bytearray instance", 1)) - return NULL; - } - return bytearray_repr((PyByteArrayObject*)op); + if (Py_BytesWarningFlag) { + if (PyErr_WarnEx(PyExc_BytesWarning, + "str() on a bytearray instance", 1)) + return NULL; + } + return bytearray_repr((PyByteArrayObject*)op); } static PyObject * @@ -1458,7 +1458,7 @@ done: static PyObject * bytearray_maketrans(PyObject *null, PyObject *args) { - return _Py_bytes_maketrans(args); + return _Py_bytes_maketrans(args); } diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index c0c82f7..41c86d9 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -173,15 +173,7 @@ PyBytes_FromFormatV(const char *format, va_list vargs) char *s; PyObject* string; -#ifdef VA_LIST_IS_ARRAY - Py_MEMCPY(count, vargs, sizeof(va_list)); -#else -#ifdef __va_copy - __va_copy(count, vargs); -#else - count = vargs; -#endif -#endif + Py_VA_COPY(count, vargs); /* step 1: figure out how large a buffer we need */ for (f = format; *f; f++) { if (*f == '%') { diff --git a/Objects/capsule.c b/Objects/capsule.c index e25af6c..acd3de6 100644 --- a/Objects/capsule.c +++ b/Objects/capsule.c @@ -298,27 +298,27 @@ Python import mechanism to link to one another.\n\ PyTypeObject PyCapsule_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) - "PyCapsule", /*tp_name*/ - sizeof(PyCapsule), /*tp_basicsize*/ - 0, /*tp_itemsize*/ + "PyCapsule", /*tp_name*/ + sizeof(PyCapsule), /*tp_basicsize*/ + 0, /*tp_itemsize*/ /* methods */ capsule_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_reserved*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ capsule_repr, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - 0, /*tp_flags*/ - PyCapsule_Type__doc__ /*tp_doc*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + 0, /*tp_flags*/ + PyCapsule_Type__doc__ /*tp_doc*/ }; diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c index 5b3caf2..70ae6cc 100644 --- a/Objects/memoryobject.c +++ b/Objects/memoryobject.c @@ -775,10 +775,10 @@ static PyMappingMethods memory_as_mapping = { }; static PySequenceMethods memory_as_sequence = { - 0, /* sq_length */ - 0, /* sq_concat */ - 0, /* sq_repeat */ - (ssizeargfunc)memory_item, /* sq_item */ + 0, /* sq_length */ + 0, /* sq_concat */ + 0, /* sq_repeat */ + (ssizeargfunc)memory_item, /* sq_item */ }; /* Buffer methods */ diff --git a/Objects/unicodectype.c b/Objects/unicodectype.c index 1849831..db4f513 100644 --- a/Objects/unicodectype.c +++ b/Objects/unicodectype.c @@ -63,10 +63,10 @@ Py_UNICODE _PyUnicode_ToTitlecase(register Py_UNICODE ch) int delta = ctype->title; if (ctype->flags & NODELTA_MASK) - return delta; + return delta; if (delta >= 32768) - delta -= 65536; + delta -= 65536; return ch + delta; } @@ -114,7 +114,7 @@ int _PyUnicode_ToDecimalDigit(Py_UNICODE ch) int _PyUnicode_IsDecimalDigit(Py_UNICODE ch) { if (_PyUnicode_ToDecimalDigit(ch) < 0) - return 0; + return 0; return 1; } @@ -131,7 +131,7 @@ int _PyUnicode_ToDigit(Py_UNICODE ch) int _PyUnicode_IsDigit(Py_UNICODE ch) { if (_PyUnicode_ToDigit(ch) < 0) - return 0; + return 0; return 1; } @@ -195,9 +195,9 @@ Py_UNICODE _PyUnicode_ToUppercase(Py_UNICODE ch) const _PyUnicode_TypeRecord *ctype = gettyperecord(ch); int delta = ctype->upper; if (ctype->flags & NODELTA_MASK) - return delta; + return delta; if (delta >= 32768) - delta -= 65536; + delta -= 65536; return ch + delta; } @@ -209,9 +209,9 @@ Py_UNICODE _PyUnicode_ToLowercase(Py_UNICODE ch) const _PyUnicode_TypeRecord *ctype = gettyperecord(ch); int delta = ctype->lower; if (ctype->flags & NODELTA_MASK) - return delta; + return delta; if (delta >= 32768) - delta -= 65536; + delta -= 65536; return ch + delta; } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 478f9a9..849f33e 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -755,15 +755,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) char fmt[61]; /* should be enough for %0width.precisionlld */ const char *copy; -#ifdef VA_LIST_IS_ARRAY - Py_MEMCPY(count, vargs, sizeof(va_list)); -#else -#ifdef __va_copy - __va_copy(count, vargs); -#else - count = vargs; -#endif -#endif + Py_VA_COPY(count, vargs); /* step 1: count the number of %S/%R/%A/%s format specifications * (we call PyObject_Str()/PyObject_Repr()/PyObject_ASCII()/ * PyUnicode_DecodeUTF8() for these objects once during step 3 and put the diff --git a/Python/getargs.c b/Python/getargs.c index e4bd50d..abf55ce 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -105,15 +105,7 @@ PyArg_VaParse(PyObject *args, const 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 + Py_VA_COPY(lva, va); return vgetargs1(args, format, &lva, 0); } @@ -123,15 +115,7 @@ _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 + Py_VA_COPY(lva, va); return vgetargs1(args, format, &lva, FLAG_SIZE_T); } @@ -1376,15 +1360,7 @@ PyArg_VaParseTupleAndKeywords(PyObject *args, 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 + Py_VA_COPY(lva, va); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0); return retval; @@ -1408,15 +1384,7 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args, 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 + Py_VA_COPY(lva, va); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, FLAG_SIZE_T); diff --git a/Python/modsupport.c b/Python/modsupport.c index 5f5d842..85b0d66 100644 --- a/Python/modsupport.c +++ b/Python/modsupport.c @@ -456,15 +456,7 @@ va_build_value(const char *format, va_list va, int flags) int n = countformat(f, '\0'); 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 + Py_VA_COPY(lva, va); if (n < 0) return NULL; |