diff options
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 */ |