Merged revisions 71722 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r71722 | benjamin.peterson | 2009-04-18 15:12:47 -0500 (Sat, 18 Apr 2009) | 1 line try to initalize all builtin types with PyType_Ready to avoid problems like #5787 ........
This commit is contained in:
parent
332424777f
commit
ae937c021d
|
@ -1,3 +1,4 @@
|
|||
import builtins
|
||||
import types
|
||||
import unittest
|
||||
import warnings
|
||||
|
@ -3586,6 +3587,17 @@ order (MRO) for bases """
|
|||
else:
|
||||
self.fail("shouldn't be able to create inheritance cycles")
|
||||
|
||||
def test_builtin_bases(self):
|
||||
# Make sure all the builtin types can have their base queried without
|
||||
# segfaulting. See issue #5787.
|
||||
builtin_types = [tp for tp in builtins.__dict__.values()
|
||||
if isinstance(tp, type)]
|
||||
for tp in builtin_types:
|
||||
object.__getattribute__(tp, "__bases__")
|
||||
if tp is not object:
|
||||
self.assertEqual(len(tp.__bases__), 1, tp)
|
||||
|
||||
|
||||
def test_mutable_bases_with_failing_mro(self):
|
||||
# Testing mutable bases with failing mro...
|
||||
class WorkOnce(type):
|
||||
|
|
|
@ -17,6 +17,9 @@ Core and Builtins
|
|||
from Python/dtoa.c. As a consequence, (e.g.) round(x, 2) now
|
||||
consistently agrees with format(x, '.2f').
|
||||
|
||||
- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
|
||||
some builtin types.
|
||||
|
||||
- Issue #5772: format(1e100, '<') produces '1e+100', not '1.0e+100'.
|
||||
|
||||
- Issue #5515: str.format() type 'n' combined with commas and leading
|
||||
|
|
|
@ -577,7 +577,9 @@ static PyObject *builtin_object;
|
|||
int _PyFrame_Init()
|
||||
{
|
||||
builtin_object = PyUnicode_InternFromString("__builtins__");
|
||||
return (builtin_object != NULL);
|
||||
if (builtin_object == NULL)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
PyFrameObject *
|
||||
|
|
|
@ -1479,31 +1479,85 @@ void
|
|||
_Py_ReadyTypes(void)
|
||||
{
|
||||
if (PyType_Ready(&PyType_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'type'");
|
||||
Py_FatalError("Can't initialize type type");
|
||||
|
||||
if (PyType_Ready(&_PyWeakref_RefType) < 0)
|
||||
Py_FatalError("Can't initialize 'weakref'");
|
||||
Py_FatalError("Can't initialize weakref type");
|
||||
|
||||
if (PyType_Ready(&PyBool_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'bool'");
|
||||
Py_FatalError("Can't initialize bool type");
|
||||
|
||||
if (PyType_Ready(&PyByteArray_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'bytes'");
|
||||
Py_FatalError("Can't initialize bytearray");
|
||||
|
||||
if (PyType_Ready(&PyBytes_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'str'");
|
||||
|
||||
if (PyType_Ready(&PyList_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'list'");
|
||||
Py_FatalError("Can't initialize list");
|
||||
|
||||
if (PyType_Ready(&PyNone_Type) < 0)
|
||||
Py_FatalError("Can't initialize type(None)");
|
||||
Py_FatalError("Can't initialize None type");
|
||||
|
||||
if (PyType_Ready(Py_Ellipsis->ob_type) < 0)
|
||||
Py_FatalError("Can't initialize type(Ellipsis)");
|
||||
|
||||
if (PyType_Ready(&PyNotImplemented_Type) < 0)
|
||||
Py_FatalError("Can't initialize type(NotImplemented)");
|
||||
Py_FatalError("Can't initialize NotImplemented type");
|
||||
|
||||
if (PyType_Ready(&PyTraceBack_Type) < 0)
|
||||
Py_FatalError("Can't initialize traceback type");
|
||||
|
||||
if (PyType_Ready(&PySuper_Type) < 0)
|
||||
Py_FatalError("Can't initialize super type");
|
||||
|
||||
if (PyType_Ready(&PyBaseObject_Type) < 0)
|
||||
Py_FatalError("Can't initialize object type");
|
||||
|
||||
if (PyType_Ready(&PyRange_Type) < 0)
|
||||
Py_FatalError("Can't initialize range type");
|
||||
|
||||
if (PyType_Ready(&PyDict_Type) < 0)
|
||||
Py_FatalError("Can't initialize dict type");
|
||||
|
||||
if (PyType_Ready(&PySet_Type) < 0)
|
||||
Py_FatalError("Can't initialize set type");
|
||||
|
||||
if (PyType_Ready(&PyUnicode_Type) < 0)
|
||||
Py_FatalError("Can't initialize str type");
|
||||
|
||||
if (PyType_Ready(&PySlice_Type) < 0)
|
||||
Py_FatalError("Can't initialize slice type");
|
||||
|
||||
if (PyType_Ready(&PyStaticMethod_Type) < 0)
|
||||
Py_FatalError("Can't initialize static method type");
|
||||
|
||||
if (PyType_Ready(&PyComplex_Type) < 0)
|
||||
Py_FatalError("Can't initialize complex type");
|
||||
|
||||
if (PyType_Ready(&PyFloat_Type) < 0)
|
||||
Py_FatalError("Can't initialize float type");
|
||||
|
||||
if (PyType_Ready(&PyLong_Type) < 0)
|
||||
Py_FatalError("Can't initialize int type");
|
||||
|
||||
if (PyType_Ready(&PyFrozenSet_Type) < 0)
|
||||
Py_FatalError("Can't initialize frozenset type");
|
||||
|
||||
if (PyType_Ready(&PyProperty_Type) < 0)
|
||||
Py_FatalError("Can't initialize property type");
|
||||
|
||||
if (PyType_Ready(&PyMemoryView_Type) < 0)
|
||||
Py_FatalError("Can't initialize memoryview type");
|
||||
|
||||
if (PyType_Ready(&PyTuple_Type) < 0)
|
||||
Py_FatalError("Can't initialize tuple type");
|
||||
|
||||
if (PyType_Ready(&PyEnum_Type) < 0)
|
||||
Py_FatalError("Can't initialize enumerate type");
|
||||
|
||||
if (PyType_Ready(&PyReversed_Type) < 0)
|
||||
Py_FatalError("Can't initialize reversed type");
|
||||
|
||||
if (PyType_Ready(&PyCode_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'code'");
|
||||
|
|
Loading…
Reference in New Issue