cython
1# ticket: t258
2
3cdef extern from "Python.h":
4
5ctypedef class __builtin__.list [object PyListObject]:
6cdef Py_ssize_t allocated
7
8ctypedef class __builtin__.dict [object PyDictObject]:
9pass
10
11cdef Py_ssize_t Py_SIZE(object o)
12
13cdef list L = [1,2,4]
14cdef dict d = {'A': 'a'}
15
16
17def test_list(list L):
18"""
19>>> test_list(list(range(10)))
20True
21>>> class list_subclass(list): pass
22>>> test_list(list_subclass([1,2,3]))
23True
24"""
25return Py_SIZE(L) <= L.allocated
26
27def test_tuple(tuple t):
28"""
29Actual builtin types are restrictive wrt subclassing so optimizations can be safely performed.
30
31>>> test_tuple((1,2))
322
33>>> class tuple_subclass(tuple): pass
34>>> test_tuple(tuple_subclass((1,2)))
35Traceback (most recent call last):
36...
37TypeError: Argument 't' has incorrect type (expected tuple, got tuple_subclass)
38"""
39return len(t)
40
41