mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
- 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.
This commit is contained in:
parent
9ee4b94f51
commit
cacfc07d08
6 changed files with 69 additions and 2 deletions
|
@ -39,6 +39,7 @@ typedef struct {
|
||||||
char ob_sval[1];
|
char ob_sval[1];
|
||||||
} PyStringObject;
|
} PyStringObject;
|
||||||
|
|
||||||
|
extern DL_IMPORT(PyTypeObject) PyBaseString_Type;
|
||||||
extern DL_IMPORT(PyTypeObject) PyString_Type;
|
extern DL_IMPORT(PyTypeObject) PyString_Type;
|
||||||
|
|
||||||
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
|
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
|
||||||
|
|
|
@ -6,6 +6,12 @@ Type/class unification and new-style classes
|
||||||
|
|
||||||
Core and builtins
|
Core and builtins
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
- Deprecated features of xrange objects have been removed as
|
- Deprecated features of xrange objects have been removed as
|
||||||
promised. The start, stop, and step attributes and the tolist()
|
promised. The start, stop, and step attributes and the tolist()
|
||||||
method no longer exist. xrange repetition and slicing have been
|
method no longer exist. xrange repetition and slicing have been
|
||||||
|
|
|
@ -1779,6 +1779,9 @@ _Py_ReadyTypes(void)
|
||||||
if (PyType_Ready(&PyBool_Type) < 0)
|
if (PyType_Ready(&PyBool_Type) < 0)
|
||||||
Py_FatalError("Can't initialize 'bool'");
|
Py_FatalError("Can't initialize 'bool'");
|
||||||
|
|
||||||
|
if (PyType_Ready(&PyString_Type) < 0)
|
||||||
|
Py_FatalError("Can't initialize 'str'");
|
||||||
|
|
||||||
if (PyType_Ready(&PyList_Type) < 0)
|
if (PyType_Ready(&PyList_Type) < 0)
|
||||||
Py_FatalError("Can't initialize 'list'");
|
Py_FatalError("Can't initialize 'list'");
|
||||||
|
|
||||||
|
|
|
@ -2855,6 +2855,60 @@ str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||||
return pnew;
|
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[] =
|
static char string_doc[] =
|
||||||
"str(object) -> string\n\
|
"str(object) -> string\n\
|
||||||
\n\
|
\n\
|
||||||
|
@ -2893,7 +2947,7 @@ PyTypeObject PyString_Type = {
|
||||||
string_methods, /* tp_methods */
|
string_methods, /* tp_methods */
|
||||||
0, /* tp_members */
|
0, /* tp_members */
|
||||||
0, /* tp_getset */
|
0, /* tp_getset */
|
||||||
0, /* tp_base */
|
&PyBaseString_Type, /* tp_base */
|
||||||
0, /* tp_dict */
|
0, /* tp_dict */
|
||||||
0, /* tp_descr_get */
|
0, /* tp_descr_get */
|
||||||
0, /* tp_descr_set */
|
0, /* tp_descr_set */
|
||||||
|
|
|
@ -5835,7 +5835,7 @@ PyTypeObject PyUnicode_Type = {
|
||||||
unicode_methods, /* tp_methods */
|
unicode_methods, /* tp_methods */
|
||||||
0, /* tp_members */
|
0, /* tp_members */
|
||||||
0, /* tp_getset */
|
0, /* tp_getset */
|
||||||
0, /* tp_base */
|
&PyBaseString_Type, /* tp_base */
|
||||||
0, /* tp_dict */
|
0, /* tp_dict */
|
||||||
0, /* tp_descr_get */
|
0, /* tp_descr_get */
|
||||||
0, /* tp_descr_set */
|
0, /* tp_descr_set */
|
||||||
|
@ -5859,6 +5859,8 @@ void _PyUnicode_Init(void)
|
||||||
strcpy(unicode_default_encoding, "ascii");
|
strcpy(unicode_default_encoding, "ascii");
|
||||||
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
||||||
unicode_latin1[i] = NULL;
|
unicode_latin1[i] = NULL;
|
||||||
|
if (PyType_Ready(&PyUnicode_Type) < 0)
|
||||||
|
Py_FatalError("Can't initialize 'unicode'");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Finalize the Unicode implementation */
|
/* Finalize the Unicode implementation */
|
||||||
|
|
|
@ -1905,6 +1905,7 @@ _PyBuiltin_Init(void)
|
||||||
SETBUILTIN("object", &PyBaseObject_Type);
|
SETBUILTIN("object", &PyBaseObject_Type);
|
||||||
SETBUILTIN("staticmethod", &PyStaticMethod_Type);
|
SETBUILTIN("staticmethod", &PyStaticMethod_Type);
|
||||||
SETBUILTIN("str", &PyString_Type);
|
SETBUILTIN("str", &PyString_Type);
|
||||||
|
SETBUILTIN("string", &PyBaseString_Type);
|
||||||
SETBUILTIN("super", &PySuper_Type);
|
SETBUILTIN("super", &PySuper_Type);
|
||||||
SETBUILTIN("tuple", &PyTuple_Type);
|
SETBUILTIN("tuple", &PyTuple_Type);
|
||||||
SETBUILTIN("type", &PyType_Type);
|
SETBUILTIN("type", &PyType_Type);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue