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\