Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 24737:eaa87632b1e8 legacy-trunk
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.
| author | Marc-André Lemburg <mal@egenix.com> |
|---|---|
| date | Sun, 11 Aug 2002 12:23:04 +0000 |
| parents | 8142f8d668a0 |
| children | 3ae8e3ff7e3f |
line wrap: on
line diff
--- a/Python/bltinmodule.c Sun Aug 11 04:24:12 2002 +0000 +++ b/Python/bltinmodule.c Sun Aug 11 12:23:04 2002 +0000 @@ -260,44 +260,11 @@ 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,
