Coverage for tests/bindgen/generated/export_resources/exports/exports.py: 36%
301 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-20 16:25 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-20 16:25 +0000
1from ..intrinsics import _clamp, _decode_utf8, _encode_utf8, _load, _store
2from ..types import Err, Ok, Result
3import ctypes
4from dataclasses import dataclass
5from typing import List, Optional, Union
6import wasmtime
8from typing import TYPE_CHECKING
9if TYPE_CHECKING:
10 from .. import Root
12@dataclass
13class Bundled:
14 module: str
15 protocol: str
16 name: str
18@dataclass
19class Function:
20 protocol: str
21 name: str
23@dataclass
24class Constructor:
25 module: str
26 protocol: str
28@dataclass
29class Static:
30 module: str
31 protocol: str
32 name: str
34@dataclass
35class FunctionExportBundled:
36 value: Bundled
38@dataclass
39class FunctionExportFreestanding:
40 value: Function
42@dataclass
43class FunctionExportConstructor:
44 value: Constructor
46@dataclass
47class FunctionExportMethod:
48 value: str
50@dataclass
51class FunctionExportStatic:
52 value: Static
54FunctionExport = Union[FunctionExportBundled, FunctionExportFreestanding, FunctionExportConstructor, FunctionExportMethod, FunctionExportStatic]
56@dataclass
57class Case:
58 name: str
59 has_payload: bool
61@dataclass
62class LocalResource:
63 new: int
64 rep: int
65 drop: int
67@dataclass
68class RemoteResource:
69 drop: int
71@dataclass
72class Resource:
73 local: Optional[LocalResource]
74 remote: Optional[RemoteResource]
76@dataclass
77class OwnedKindRecord:
78 value: List[str]
80@dataclass
81class OwnedKindVariant:
82 value: List[Case]
84@dataclass
85class OwnedKindEnum:
86 value: int
88@dataclass
89class OwnedKindFlags:
90 value: int
92@dataclass
93class OwnedKindResource:
94 value: Resource
96OwnedKind = Union[OwnedKindRecord, OwnedKindVariant, OwnedKindEnum, OwnedKindFlags, OwnedKindResource]
98@dataclass
99class OwnedType:
100 kind: OwnedKind
101 package: str
102 name: str
104@dataclass
105class TypeOwned:
106 value: OwnedType
108@dataclass
109class TypeOption:
110 pass
112@dataclass
113class TypeNestingOption:
114 pass
116@dataclass
117class TypeResult:
118 pass
120@dataclass
121class TypeTuple:
122 value: int
124@dataclass
125class TypeHandle:
126 pass
128Type = Union[TypeOwned, TypeOption, TypeNestingOption, TypeResult, TypeTuple, TypeHandle]
130@dataclass
131class Symbols:
132 types_package: str
133 exports: List[FunctionExport]
134 types: List[Type]
136class Exports:
137 component: 'Root'
139 def __init__(self, component: 'Root') -> None:
140 self.component = component
141 def init(self, caller: wasmtime.Store, app_name: str, symbols: Symbols, stub_wasi: bool) -> Result[None, str]:
142 ptr, len0 = _encode_utf8(app_name, self.component._realloc0, self.component._core_memory0, caller)
143 record = symbols
144 field = record.types_package
145 field1 = record.exports
146 field2 = record.types
147 ptr3, len4 = _encode_utf8(field, self.component._realloc0, self.component._core_memory0, caller)
148 vec = field1
149 len46 = len(vec)
150 result = self.component._realloc0(caller, 0, 0, 4, len46 * 28)
151 assert(isinstance(result, int))
152 for i47 in range(0, len46):
153 e = vec[i47]
154 base5 = result + i47 * 28
155 if isinstance(e, FunctionExportBundled):
156 payload = e.value
157 _store(ctypes.c_uint8, self.component._core_memory0, caller, base5, 0, 0)
158 record6 = payload
159 field7 = record6.module
160 field8 = record6.protocol
161 field9 = record6.name
162 ptr10, len11 = _encode_utf8(field7, self.component._realloc0, self.component._core_memory0, caller)
163 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 8, len11)
164 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 4, ptr10)
165 ptr12, len13 = _encode_utf8(field8, self.component._realloc0, self.component._core_memory0, caller)
166 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 16, len13)
167 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 12, ptr12)
168 ptr14, len15 = _encode_utf8(field9, self.component._realloc0, self.component._core_memory0, caller)
169 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 24, len15)
170 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 20, ptr14)
171 elif isinstance(e, FunctionExportFreestanding):
172 payload16 = e.value
173 _store(ctypes.c_uint8, self.component._core_memory0, caller, base5, 0, 1)
174 record17 = payload16
175 field18 = record17.protocol
176 field19 = record17.name
177 ptr20, len21 = _encode_utf8(field18, self.component._realloc0, self.component._core_memory0, caller)
178 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 8, len21)
179 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 4, ptr20)
180 ptr22, len23 = _encode_utf8(field19, self.component._realloc0, self.component._core_memory0, caller)
181 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 16, len23)
182 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 12, ptr22)
183 elif isinstance(e, FunctionExportConstructor):
184 payload24 = e.value
185 _store(ctypes.c_uint8, self.component._core_memory0, caller, base5, 0, 2)
186 record25 = payload24
187 field26 = record25.module
188 field27 = record25.protocol
189 ptr28, len29 = _encode_utf8(field26, self.component._realloc0, self.component._core_memory0, caller)
190 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 8, len29)
191 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 4, ptr28)
192 ptr30, len31 = _encode_utf8(field27, self.component._realloc0, self.component._core_memory0, caller)
193 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 16, len31)
194 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 12, ptr30)
195 elif isinstance(e, FunctionExportMethod):
196 payload32 = e.value
197 _store(ctypes.c_uint8, self.component._core_memory0, caller, base5, 0, 3)
198 ptr33, len34 = _encode_utf8(payload32, self.component._realloc0, self.component._core_memory0, caller)
199 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 8, len34)
200 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 4, ptr33)
201 elif isinstance(e, FunctionExportStatic):
202 payload35 = e.value
203 _store(ctypes.c_uint8, self.component._core_memory0, caller, base5, 0, 4)
204 record36 = payload35
205 field37 = record36.module
206 field38 = record36.protocol
207 field39 = record36.name
208 ptr40, len41 = _encode_utf8(field37, self.component._realloc0, self.component._core_memory0, caller)
209 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 8, len41)
210 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 4, ptr40)
211 ptr42, len43 = _encode_utf8(field38, self.component._realloc0, self.component._core_memory0, caller)
212 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 16, len43)
213 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 12, ptr42)
214 ptr44, len45 = _encode_utf8(field39, self.component._realloc0, self.component._core_memory0, caller)
215 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 24, len45)
216 _store(ctypes.c_uint32, self.component._core_memory0, caller, base5, 20, ptr44)
217 else:
218 raise TypeError("invalid variant specified for FunctionExport")
219 vec101 = field2
220 len103 = len(vec101)
221 result102 = self.component._realloc0(caller, 0, 0, 4, len103 * 48)
222 assert(isinstance(result102, int))
223 for i104 in range(0, len103):
224 e48 = vec101[i104]
225 base49 = result102 + i104 * 48
226 if isinstance(e48, TypeOwned):
227 payload50 = e48.value
228 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 0, 0)
229 record51 = payload50
230 field52 = record51.kind
231 field53 = record51.package
232 field54 = record51.name
233 if isinstance(field52, OwnedKindRecord):
234 payload55 = field52.value
235 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 4, 0)
236 vec60 = payload55
237 len62 = len(vec60)
238 result61 = self.component._realloc0(caller, 0, 0, 4, len62 * 8)
239 assert(isinstance(result61, int))
240 for i63 in range(0, len62):
241 e56 = vec60[i63]
242 base57 = result61 + i63 * 8
243 ptr58, len59 = _encode_utf8(e56, self.component._realloc0, self.component._core_memory0, caller)
244 _store(ctypes.c_uint32, self.component._core_memory0, caller, base57, 4, len59)
245 _store(ctypes.c_uint32, self.component._core_memory0, caller, base57, 0, ptr58)
246 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 12, len62)
247 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 8, result61)
248 elif isinstance(field52, OwnedKindVariant):
249 payload64 = field52.value
250 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 4, 1)
251 vec72 = payload64
252 len74 = len(vec72)
253 result73 = self.component._realloc0(caller, 0, 0, 4, len74 * 12)
254 assert(isinstance(result73, int))
255 for i75 in range(0, len74):
256 e65 = vec72[i75]
257 base66 = result73 + i75 * 12
258 record67 = e65
259 field68 = record67.name
260 field69 = record67.has_payload
261 ptr70, len71 = _encode_utf8(field68, self.component._realloc0, self.component._core_memory0, caller)
262 _store(ctypes.c_uint32, self.component._core_memory0, caller, base66, 4, len71)
263 _store(ctypes.c_uint32, self.component._core_memory0, caller, base66, 0, ptr70)
264 _store(ctypes.c_uint8, self.component._core_memory0, caller, base66, 8, int(field69))
265 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 12, len74)
266 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 8, result73)
267 elif isinstance(field52, OwnedKindEnum):
268 payload76 = field52.value
269 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 4, 2)
270 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 8, _clamp(payload76, 0, 4294967295))
271 elif isinstance(field52, OwnedKindFlags):
272 payload77 = field52.value
273 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 4, 3)
274 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 8, _clamp(payload77, 0, 4294967295))
275 elif isinstance(field52, OwnedKindResource):
276 payload78 = field52.value
277 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 4, 4)
278 record79 = payload78
279 field80 = record79.local
280 field81 = record79.remote
281 if field80 is None:
282 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 8, 0)
283 else:
284 payload83 = field80
285 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 8, 1)
286 record84 = payload83
287 field85 = record84.new
288 field86 = record84.rep
289 field87 = record84.drop
290 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 12, _clamp(field85, 0, 4294967295))
291 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 16, _clamp(field86, 0, 4294967295))
292 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 20, _clamp(field87, 0, 4294967295))
293 if field81 is None:
294 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 24, 0)
295 else:
296 payload89 = field81
297 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 24, 1)
298 record90 = payload89
299 field91 = record90.drop
300 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 28, _clamp(field91, 0, 4294967295))
301 else:
302 raise TypeError("invalid variant specified for OwnedKind")
303 ptr92, len93 = _encode_utf8(field53, self.component._realloc0, self.component._core_memory0, caller)
304 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 36, len93)
305 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 32, ptr92)
306 ptr94, len95 = _encode_utf8(field54, self.component._realloc0, self.component._core_memory0, caller)
307 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 44, len95)
308 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 40, ptr94)
309 elif isinstance(e48, TypeOption):
310 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 0, 1)
311 elif isinstance(e48, TypeNestingOption):
312 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 0, 2)
313 elif isinstance(e48, TypeResult):
314 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 0, 3)
315 elif isinstance(e48, TypeTuple):
316 payload99 = e48.value
317 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 0, 4)
318 _store(ctypes.c_uint32, self.component._core_memory0, caller, base49, 4, _clamp(payload99, 0, 4294967295))
319 elif isinstance(e48, TypeHandle):
320 _store(ctypes.c_uint8, self.component._core_memory0, caller, base49, 0, 5)
321 else:
322 raise TypeError("invalid variant specified for Type")
323 ret = self.component.lift_callee0(caller, ptr, len0, ptr3, len4, result, len46, result102, len103, int(stub_wasi))
324 assert(isinstance(ret, int))
325 load = _load(ctypes.c_uint8, self.component._core_memory0, caller, ret, 0)
326 expected: Result[None, str]
327 if load == 0:
328 expected = Ok(None)
329 elif load == 1:
330 load105 = _load(ctypes.c_int32, self.component._core_memory0, caller, ret, 4)
331 load106 = _load(ctypes.c_int32, self.component._core_memory0, caller, ret, 8)
332 ptr107 = load105
333 len108 = load106
334 list = _decode_utf8(self.component._core_memory0, caller, ptr107, len108)
335 expected = Err(list)
336 else:
337 raise TypeError("invalid variant discriminant for expected")
338 tmp = expected
339 self.component._post_return0(caller, ret)
340 return tmp