summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMarc-André Lemburg <mal@egenix.com>2002-08-11 12:23:04 (GMT)
committerMarc-André Lemburg <mal@egenix.com>2002-08-11 12:23:04 (GMT)
commitcc8764ca9dc3fceb9dc283163a89c9bb649b5392 (patch)
tree7f4c069636e05afe04482cc42c38f1937818806d /Python
parent078151da901bebce6eb232d958fbbb1e5ced4399 (diff)
downloadcpython-cc8764ca9dc3fceb9dc283163a89c9bb649b5392.zip
cpython-cc8764ca9dc3fceb9dc283163a89c9bb649b5392.tar.gz
cpython-cc8764ca9dc3fceb9dc283163a89c9bb649b5392.tar.bz2
Add C API PyUnicode_FromOrdinal() which exposes unichr() at C level.
u'%c' will now raise a ValueError in case the argument is an integer outside the valid range of Unicode code point ordinals. Closes SF bug #593581.
Diffstat (limited to 'Python')
-rw-r--r--Python/bltinmodule.c35
1 files changed, 1 insertions, 34 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index fec7554..7a53065 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -260,44 +260,11 @@ static PyObject *
builtin_unichr(PyObject *self, PyObject *args)
{
long x;
- Py_UNICODE s[2];
if (!PyArg_ParseTuple(args, "l:unichr", &x))
return NULL;
-#ifdef Py_UNICODE_WIDE
- if (x < 0 || x > 0x10ffff) {
- PyErr_SetString(PyExc_ValueError,
- "unichr() arg not in range(0x110000) "
- "(wide Python build)");
- return NULL;
- }
-#else
- if (x < 0 || x > 0xffff) {
- PyErr_SetString(PyExc_ValueError,
- "unichr() arg not in range(0x10000) "
- "(narrow Python build)");
- return NULL;
- }
-#endif
-
- if (x <= 0xffff) {
- /* UCS-2 character */
- s[0] = (Py_UNICODE) x;
- return PyUnicode_FromUnicode(s, 1);
- }
- else {
-#ifndef Py_UNICODE_WIDE
- /* UCS-4 character. store as two surrogate characters */
- x -= 0x10000L;
- s[0] = 0xD800 + (Py_UNICODE) (x >> 10);
- s[1] = 0xDC00 + (Py_UNICODE) (x & 0x03FF);
- return PyUnicode_FromUnicode(s, 2);
-#else
- s[0] = (Py_UNICODE)x;
- return PyUnicode_FromUnicode(s, 1);
-#endif
- }
+ return PyUnicode_FromOrdinal(x);
}
PyDoc_STRVAR(unichr_doc,