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

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 

7 

8from typing import TYPE_CHECKING 

9if TYPE_CHECKING: 

10 from .. import Root 

11 

12@dataclass 

13class Bundled: 

14 module: str 

15 protocol: str 

16 name: str 

17 

18@dataclass 

19class Function: 

20 protocol: str 

21 name: str 

22 

23@dataclass 

24class Constructor: 

25 module: str 

26 protocol: str 

27 

28@dataclass 

29class Static: 

30 module: str 

31 protocol: str 

32 name: str 

33 

34@dataclass 

35class FunctionExportBundled: 

36 value: Bundled 

37 

38@dataclass 

39class FunctionExportFreestanding: 

40 value: Function 

41 

42@dataclass 

43class FunctionExportConstructor: 

44 value: Constructor 

45 

46@dataclass 

47class FunctionExportMethod: 

48 value: str 

49 

50@dataclass 

51class FunctionExportStatic: 

52 value: Static 

53 

54FunctionExport = Union[FunctionExportBundled, FunctionExportFreestanding, FunctionExportConstructor, FunctionExportMethod, FunctionExportStatic] 

55 

56@dataclass 

57class Case: 

58 name: str 

59 has_payload: bool 

60 

61@dataclass 

62class LocalResource: 

63 new: int 

64 rep: int 

65 drop: int 

66 

67@dataclass 

68class RemoteResource: 

69 drop: int 

70 

71@dataclass 

72class Resource: 

73 local: Optional[LocalResource] 

74 remote: Optional[RemoteResource] 

75 

76@dataclass 

77class OwnedKindRecord: 

78 value: List[str] 

79 

80@dataclass 

81class OwnedKindVariant: 

82 value: List[Case] 

83 

84@dataclass 

85class OwnedKindEnum: 

86 value: int 

87 

88@dataclass 

89class OwnedKindFlags: 

90 value: int 

91 

92@dataclass 

93class OwnedKindResource: 

94 value: Resource 

95 

96OwnedKind = Union[OwnedKindRecord, OwnedKindVariant, OwnedKindEnum, OwnedKindFlags, OwnedKindResource] 

97 

98@dataclass 

99class OwnedType: 

100 kind: OwnedKind 

101 package: str 

102 name: str 

103 

104@dataclass 

105class TypeOwned: 

106 value: OwnedType 

107 

108@dataclass 

109class TypeOption: 

110 pass 

111 

112@dataclass 

113class TypeNestingOption: 

114 pass 

115 

116@dataclass 

117class TypeResult: 

118 pass 

119 

120@dataclass 

121class TypeTuple: 

122 value: int 

123 

124@dataclass 

125class TypeHandle: 

126 pass 

127 

128Type = Union[TypeOwned, TypeOption, TypeNestingOption, TypeResult, TypeTuple, TypeHandle] 

129 

130@dataclass 

131class Symbols: 

132 types_package: str 

133 exports: List[FunctionExport] 

134 types: List[Type] 

135 

136class Exports: 

137 component: 'Root' 

138 

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 

341