/
enum.pyx
200 lines (164 loc) · 2.81 KB
/
enum.pyx
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
#if 0
''' '
#endif
#ifdef __cplusplus
template <typename T>
using Box = T*;
#endif
#if 0
' '''
#endif
from libc.stdint cimport int8_t, int16_t, int32_t, int64_t, intptr_t
from libc.stdint cimport uint8_t, uint16_t, uint32_t, uint64_t, uintptr_t
cdef extern from *:
ctypedef bint bool
ctypedef struct va_list
cdef extern from *:
cdef enum:
a1 # = 0,
a2 # = 2,
a3,
a4 # = 5,
ctypedef uint64_t A;
cdef enum:
b1 # = 0,
b2 # = 2,
b3,
b4 # = 5,
ctypedef uint32_t B;
cdef enum:
c1 # = 0,
c2 # = 2,
c3,
c4 # = 5,
ctypedef uint16_t C;
cdef enum:
d1 # = 0,
d2 # = 2,
d3,
d4 # = 5,
ctypedef uint8_t D;
cdef enum:
e1 # = 0,
e2 # = 2,
e3,
e4 # = 5,
ctypedef uintptr_t E;
cdef enum:
f1 # = 0,
f2 # = 2,
f3,
f4 # = 5,
ctypedef intptr_t F;
ctypedef enum L:
l1,
l2,
l3,
l4,
cdef enum:
m1 # = -1,
m2 # = 0,
m3 # = 1,
ctypedef int8_t M;
ctypedef enum N:
n1,
n2,
n3,
n4,
cdef enum:
o1,
o2,
o3,
o4,
ctypedef int8_t O;
ctypedef struct J:
pass
ctypedef struct K:
pass
ctypedef struct Opaque:
pass
cdef enum:
Foo,
Bar,
Baz,
ctypedef uint8_t G_Tag;
ctypedef struct Bar_Body:
G_Tag tag;
uint8_t x;
int16_t y;
ctypedef union G:
G_Tag tag;
int16_t foo;
Bar_Body bar;
ctypedef enum H_Tag:
H_Foo,
H_Bar,
H_Baz,
ctypedef struct H_Bar_Body:
uint8_t x;
int16_t y;
ctypedef struct H:
H_Tag tag;
int16_t foo;
H_Bar_Body bar;
cdef enum:
ExI_Foo,
ExI_Bar,
ExI_Baz,
ctypedef uint8_t ExI_Tag;
ctypedef struct ExI_Bar_Body:
uint8_t x;
int16_t y;
ctypedef struct ExI:
ExI_Tag tag;
int16_t foo;
ExI_Bar_Body bar;
cdef enum:
P0,
P1,
ctypedef uint8_t P_Tag;
ctypedef struct P1_Body:
uint8_t _0;
uint8_t _1;
uint8_t _2;
ctypedef struct P:
P_Tag tag;
uint8_t p0;
P1_Body p1;
ctypedef enum Q_Tag:
Ok,
Err,
ctypedef struct Q:
Q_Tag tag;
uint32_t *ok;
uint32_t err;
void root(Opaque *opaque,
A a,
B b,
C c,
D d,
E e,
F f,
G g,
H h,
ExI i,
J j,
K k,
L l,
M m,
N n,
O o,
P p,
Q q);
#if 0
''' '
#endif
#include <stddef.h>
#include "testing-helpers.h"
static_assert(offsetof(CBINDGEN_STRUCT(P), tag) == 0, "unexpected offset for tag");
static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p0");
static_assert(offsetof(CBINDGEN_STRUCT(P), p0) == 1, "unexpected offset for p1");
static_assert(sizeof(CBINDGEN_STRUCT(P)) == 4, "unexpected size for P");
#if 0
' '''
#endif