From cbd9ee69eeaadf7a50007532071890b4eaeae664 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Sat, 14 Apr 2007 05:25:50 +0000 Subject: When __slots__ are set to a unicode string, make it work the same as setting a plain string, ie don't expand to single letter identifiers. --- Lib/test/test_descr.py | 18 +++++++++++++++++- Misc/NEWS | 3 +++ Objects/typeobject.c | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 41c0bdf..eda96a6 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -1225,13 +1225,29 @@ def slots(): raise TestFailed, "[''] slots not caught" class C(object): __slots__ = ["a", "a_b", "_a", "A0123456789Z"] + # XXX(nnorwitz): was there supposed to be something tested + # from the class above? + + # Test a single string is not expanded as a sequence. + class C(object): + __slots__ = "abc" + c = C() + c.abc = 5 + vereq(c.abc, 5) # Test unicode slot names try: - unichr + unicode except NameError: pass else: + # Test a single unicode string is not expanded as a sequence. + class C(object): + __slots__ = unicode("abc") + c = C() + c.abc = 5 + vereq(c.abc, 5) + # _unicode_to_string used to modify slots in certain circumstances slots = (unicode("foo"), unicode("bar")) class C(object): diff --git a/Misc/NEWS b/Misc/NEWS index db0c8dc..b84d0b5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- When __slots__ are set to a unicode string, make it work the same as + setting a plain string, ie don't expand to single letter identifiers. + - Request #1191699: Slices can now be pickled. - Request #1193128: str.translate() now allows a None argument for diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 0ce7f82..285bd67 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1816,7 +1816,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) /* Have slots */ /* Make it into a tuple */ - if (PyString_Check(slots)) + if (PyString_Check(slots) || PyUnicode_Check(slots)) slots = PyTuple_Pack(1, slots); else slots = PySequence_Tuple(slots); -- cgit v0.12