diff options
author | Guido van Rossum <guido@python.org> | 2002-05-24 19:01:59 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2002-05-24 19:01:59 (GMT) |
commit | cacfc07d083286e80b6f86939d466e186f7ea3c0 (patch) | |
tree | 87e5221791901acdca69ef823d93d470679fa49c /Objects | |
parent | 9ee4b94f51d19a37db3b93222b5e15c8379db78d (diff) | |
download | cpython-cacfc07d083286e80b6f86939d466e186f7ea3c0.zip cpython-cacfc07d083286e80b6f86939d466e186f7ea3c0.tar.gz cpython-cacfc07d083286e80b6f86939d466e186f7ea3c0.tar.bz2 |
- A new type object, 'string', is added. This is a common base type
for 'str' and 'unicode', and can be used instead of
types.StringTypes, e.g. to test whether something is "a string":
isinstance(x, string) is True for Unicode and 8-bit strings. This
is an abstract base class and cannot be instantiated directly.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/object.c | 3 | ||||
-rw-r--r-- | Objects/stringobject.c | 56 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 4 |
3 files changed, 61 insertions, 2 deletions
diff --git a/Objects/object.c b/Objects/object.c index 1bd8db9..b1bf2c3 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -1779,6 +1779,9 @@ _Py_ReadyTypes(void) if (PyType_Ready(&PyBool_Type) < 0) Py_FatalError("Can't initialize 'bool'"); + if (PyType_Ready(&PyString_Type) < 0) + Py_FatalError("Can't initialize 'str'"); + if (PyType_Ready(&PyList_Type) < 0) Py_FatalError("Can't initialize 'list'"); diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 668668c..27b3af4 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -2855,6 +2855,60 @@ str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds) return pnew; } +static PyObject * +basestring_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + PyErr_SetString(PyExc_TypeError, + "The string type cannot be instantiated"); + return NULL; +} + +static char basestring_doc[] = +"Type string cannot be instantiated; it is the base for str and unicode."; + +PyTypeObject PyBaseString_Type = { + PyObject_HEAD_INIT(&PyType_Type) + 0, + "string", + 0, + 0, + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ + basestring_doc, /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + &PyBaseObject_Type, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + basestring_new, /* tp_new */ + 0, /* tp_free */ +}; + static char string_doc[] = "str(object) -> string\n\ \n\ @@ -2893,7 +2947,7 @@ PyTypeObject PyString_Type = { string_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ - 0, /* tp_base */ + &PyBaseString_Type, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 5cc8455..0ac4941 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -5835,7 +5835,7 @@ PyTypeObject PyUnicode_Type = { unicode_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ - 0, /* tp_base */ + &PyBaseString_Type, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ @@ -5859,6 +5859,8 @@ void _PyUnicode_Init(void) strcpy(unicode_default_encoding, "ascii"); for (i = 0; i < 256; i++) unicode_latin1[i] = NULL; + if (PyType_Ready(&PyUnicode_Type) < 0) + Py_FatalError("Can't initialize 'unicode'"); } /* Finalize the Unicode implementation */ |