File: fused_cmethods.srctree

package info (click to toggle)
cython 3.0.11%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 19,092 kB
  • sloc: python: 83,539; ansic: 18,831; cpp: 1,402; xml: 1,031; javascript: 511; makefile: 403; sh: 204; sed: 11
file content (208 lines) | stat: -rw-r--r-- 5,945 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
"""
PYTHON setup.py build_ext -i
PYTHON main.py
"""

######## main.py ########

from __future__ import absolute_import
from pkg.user import UseRegisters

def test():
    from pkg import called
    assert called == [], called

    ureg = UseRegisters()

    assert called == [
        'Before setFullFlags',
        'setFullFlags was called',
        'After setFullFlags',
    ], called

    del called[:]
    ureg.call_write()

    assert called == [
        'Before regWriteWithOpWords',
        'regWriteWithOpWords was called',
        'regWriteWithOpWords leave function',
        'After regWriteWithOpWords',
    ], called

    del called[:]
    ureg.call_non_fused()

    assert called == [
        'Before nonFusedMiddle',
        'nonFusedMiddle was called',
        'After nonFusedMiddle',
        'Before nonFusedBottom',
        'nonFusedBottom was called',
        'After nonFusedBottom',
        'Before nonFusedTop',
        'nonFusedTop was called',
        'After nonFusedTop',
    ], called


def test_sub():
    from pkg import called
    from pkg.registers import SubRegisters
    ureg = UseRegisters(reg_type=SubRegisters)

    del called[:]
    ureg.call_sub()

    assert called == [
        'Before nonFusedSub',
        'nonFusedSub was called',
        'After nonFusedSub',
        'Before fusedSub',
        'fusedSub was called',
        'After fusedSub',
    ], called


test()
test_sub()


######## setup.py ########

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules = cythonize('pkg/*.pyx'))

######## pkg/__init__.py ########

called = []

######## pkg/user.pxd ########

from .registers cimport Registers, SubRegisters

cdef class UseRegisters:
    cdef Registers registers


######## pkg/user.pyx ########

from . import called

cdef class UseRegisters:
    def __init__(self, reg_type=Registers):
        self.registers = reg_type()
        called.append("Before setFullFlags")
        self.registers.setFullFlags(<unsigned int>12345, <unsigned int>0)
        called.append("After setFullFlags")

    def call_write(self):
        called.append("Before regWriteWithOpWords")
        self.registers.regWriteWithOpWords(0, <unsigned int>0)
        called.append("After regWriteWithOpWords")

    def call_non_fused(self):
        called.append("Before nonFusedMiddle")
        self.registers.nonFusedMiddle(0, <unsigned int>0)
        called.append("After nonFusedMiddle")

        called.append("Before nonFusedBottom")
        self.registers.nonFusedBottom(0, <unsigned int>0)
        called.append("After nonFusedBottom")

        called.append("Before nonFusedTop")
        self.registers.nonFusedTop(0, <unsigned int>0)
        called.append("After nonFusedTop")

    def call_sub(self):
        assert isinstance(self.registers, SubRegisters), type(self.registers)
        called.append("Before nonFusedSub")
        (<SubRegisters>self.registers).nonFusedSub(0, <unsigned int>0)
        called.append("After nonFusedSub")

        called.append("Before fusedSub")
        (<SubRegisters>self.registers).fusedSub(0, <unsigned int>0)
        called.append("After fusedSub")


######## pkg/registers.pxd ########

from cython cimport integral

cdef class Registers:
    cdef unsigned long long regs[1]
    cdef void nonFusedTop(self, unsigned short regId, unsigned int value)
    cdef void regWriteWithOpWords(self, unsigned short regId, integral value)
    cdef void nonFusedMiddle(self, unsigned short regId, unsigned int value)
    cdef void setFullFlags(self, integral reg0, unsigned int reg1)
    cdef void nonFusedBottom(self, unsigned short regId, unsigned int value)
    cdef void lastFusedImplFirst(self, integral reg0, unsigned int reg1)


cdef class SubRegisters(Registers):
    cdef void fusedSub(self, integral reg0, unsigned int reg1)
    cdef void nonFusedSub(self, unsigned short regId, unsigned int value)


######## pkg/registers.pyx ########

from . import called

cdef class Registers:
    def __init__(self):
        pass

    cdef void lastFusedImplFirst(self, integral reg0, unsigned int reg1):
        called.append("lastFusedImplFirst was called")

    cdef void nonFusedTop(self, unsigned short regId, unsigned int value):
        called.append("nonFusedTop was called")

    cdef void regWriteWithOpWords(self, unsigned short regId, integral value):
        called.append("regWriteWithOpWords was called")
        self.regs[regId] = value
        called.append("regWriteWithOpWords leave function")

    cdef void nonFusedMiddle(self, unsigned short regId, unsigned int value):
        called.append("nonFusedMiddle was called")

    cdef void setFullFlags(self, integral reg0, unsigned int reg1):
        called.append("setFullFlags was called")

    cdef void nonFusedBottom(self, unsigned short regId, unsigned int value):
        called.append("nonFusedBottom was called")


cdef class SubRegisters(Registers):
    cdef void fusedSub(self, integral reg0, unsigned int reg1):
        called.append("fusedSub was called")

    cdef void nonFusedSub(self, unsigned short regId, unsigned int value):
        called.append("nonFusedSub was called")


######## pkg/sub.pxd ########

from .registers cimport *

cdef class SubSubRegisters(SubRegisters):
    cdef void fusedSubSubFirst(self, integral reg0, unsigned int reg1)
    cdef void nonFusedSubSub(self, unsigned short regId, unsigned int value)
    cdef void fusedSubSubLast(self, integral reg0, unsigned int reg1)


######## pkg/sub.pyx ########

from . import called

cdef class SubSubRegisters(SubRegisters):
    cdef void fusedSubSubFirst(self, integral reg0, unsigned int reg1):
        called.append("fusedSubSubFirst was called")

    cdef void nonFusedSubSub(self, unsigned short regId, unsigned int value):
        called.append("nonFusedSubSub was called")

    cdef void fusedSubSubLast(self, integral reg0, unsigned int reg1):
        called.append("fusedSubSubLast was called")