1# mode: run 2# tag: cpdef 3 4# This also makes a nice benchmark for the cpdef method call dispatching code. 5 6cdef class Ext: 7 """ 8 >>> x = Ext() 9 >>> x.rec(10) 10 0 11 """ 12 cpdef rec(self, int i): 13 return 0 if i < 0 else self.rec(i-1) 14 15 16class Py(Ext): 17 """ 18 >>> p = Py() 19 >>> p.rec(10) 20 0 21 """ 22 pass 23 24 25class Slots(Ext): 26 """ 27 >>> s = Slots() 28 >>> s.rec(10) 29 0 30 """ 31 __slots__ = () 32 33 34class PyOverride(Ext): 35 """ 36 >>> p = PyOverride() 37 >>> p.rec(10) 38 10 39 5 40 >>> p.rec(12) 41 12 42 11 43 10 44 5 45 """ 46 def rec(self, i): 47 print(i) 48 return Ext.rec(self, i) if i > 10 else 5 49 50 51class SlotsOverride(Ext): 52 """ 53 >>> s = SlotsOverride() 54 >>> s.rec(10) 55 10 56 6 57 >>> s.rec(12) 58 12 59 11 60 10 61 6 62 """ 63 __slots__ = () 64 def rec(self, i): 65 print(i) 66 return Ext.rec(self, i) if i > 10 else 6 67