Blame tests/run/extern_builtins_T258.pyx
|
Packit |
562c7a |
# ticket: 258
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef extern from "Python.h":
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
ctypedef class __builtin__.list [object PyListObject]:
|
|
Packit |
562c7a |
cdef Py_ssize_t allocated
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
ctypedef class __builtin__.dict [object PyDictObject]:
|
|
Packit |
562c7a |
pass
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef Py_ssize_t Py_SIZE(object o)
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
cdef list L = [1,2,4]
|
|
Packit |
562c7a |
cdef dict d = {'A': 'a'}
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_list(list L):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
>>> test_list(list(range(10)))
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
>>> class list_subclass(list): pass
|
|
Packit |
562c7a |
>>> test_list(list_subclass([1,2,3]))
|
|
Packit |
562c7a |
True
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return Py_SIZE(L) <= L.allocated
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
def test_tuple(tuple t):
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
Actual builtin types are restrictive wrt subclassing so optimizations can be safely performed.
|
|
Packit |
562c7a |
|
|
Packit |
562c7a |
>>> test_tuple((1,2))
|
|
Packit |
562c7a |
2
|
|
Packit |
562c7a |
>>> class tuple_subclass(tuple): pass
|
|
Packit |
562c7a |
>>> test_tuple(tuple_subclass((1,2)))
|
|
Packit |
562c7a |
Traceback (most recent call last):
|
|
Packit |
562c7a |
...
|
|
Packit |
562c7a |
TypeError: Argument 't' has incorrect type (expected tuple, got tuple_subclass)
|
|
Packit |
562c7a |
"""
|
|
Packit |
562c7a |
return len(t)
|
|
Packit |
562c7a |
|