Mercurial > cpython-lru_cache-weakref
comparison Python/sysmodule.c @ 41957:7015cccf29e3
Change sys.intern() so that unicode strings can be
interned too. Add a test for this.
| author | Walter Dörwald <walter@livinglogic.de> |
|---|---|
| date | Tue, 05 Jun 2007 20:22:04 +0000 |
| parents | b30c75d22f34 |
| children | 9d02a4adf574 |
comparison
equal
deleted
inserted
replaced
| 41956:b30c75d22f34 | 41957:7015cccf29e3 |
|---|---|
| 264 sys_intern(PyObject *self, PyObject *args) | 264 sys_intern(PyObject *self, PyObject *args) |
| 265 { | 265 { |
| 266 PyObject *s; | 266 PyObject *s; |
| 267 if (!PyArg_ParseTuple(args, "S:intern", &s)) | 267 if (!PyArg_ParseTuple(args, "S:intern", &s)) |
| 268 return NULL; | 268 return NULL; |
| 269 if (!PyString_CheckExact(s)) { | 269 if (PyString_CheckExact(s)) { |
| 270 PyErr_SetString(PyExc_TypeError, | 270 Py_INCREF(s); |
| 271 "can't intern subclass of string"); | 271 PyString_InternInPlace(&s); |
| 272 return NULL; | 272 return s; |
| 273 } | 273 } |
| 274 Py_INCREF(s); | 274 else if (PyUnicode_CheckExact(s)) { |
| 275 PyString_InternInPlace(&s); | 275 Py_INCREF(s); |
| 276 return s; | 276 PyUnicode_InternInPlace(&s); |
| 277 return s; | |
| 278 } | |
| 279 else { | |
| 280 PyErr_Format(PyExc_TypeError, | |
| 281 "can't intern %.400s", s->ob_type->tp_name); | |
| 282 return NULL; | |
| 283 } | |
| 277 } | 284 } |
| 278 | 285 |
| 279 PyDoc_STRVAR(intern_doc, | 286 PyDoc_STRVAR(intern_doc, |
| 280 "intern(string) -> string\n\ | 287 "intern(string) -> string\n\ |
| 281 \n\ | 288 \n\ |
