Coverage for wasmtime/_extern.py: 83%

35 statements  

« prev     ^ index     » next       coverage.py v7.11.3, created at 2025-12-01 19:40 +0000

1from . import _ffi as ffi 

2import ctypes 

3from ._exportable import AsExtern 

4from wasmtime import WasmtimeError, Managed 

5 

6 

7def wrap_extern(ptr: ffi.wasmtime_extern_t) -> AsExtern: 

8 from wasmtime import Func, Table, Global, Memory, SharedMemory 

9 

10 if ptr.kind == ffi.WASMTIME_EXTERN_FUNC.value: 

11 return Func._from_raw(ptr.of.func) 

12 if ptr.kind == ffi.WASMTIME_EXTERN_TABLE.value: 

13 return Table._from_raw(ptr.of.table) 

14 if ptr.kind == ffi.WASMTIME_EXTERN_GLOBAL.value: 

15 return Global._from_raw(ptr.of.global_) 

16 if ptr.kind == ffi.WASMTIME_EXTERN_MEMORY.value: 

17 return Memory._from_raw(ptr.of.memory) 

18 if ptr.kind == ffi.WASMTIME_EXTERN_SHAREDMEMORY.value: 

19 return SharedMemory._from_ptr(ptr.of.sharedmemory) 

20 raise WasmtimeError("unknown extern") 

21 

22 

23def get_extern_ptr(item: AsExtern) -> ffi.wasmtime_extern_t: 

24 from wasmtime import Func, Table, Global, Memory, SharedMemory 

25 

26 if isinstance(item, Func): 

27 return item._as_extern() 

28 elif isinstance(item, Global): 

29 return item._as_extern() 

30 elif isinstance(item, Memory): 

31 return item._as_extern() 

32 elif isinstance(item, SharedMemory): 

33 return item._as_extern() 

34 elif isinstance(item, Table): 

35 return item._as_extern() 

36 else: 

37 raise TypeError("expected a Func, Global, Memory, or Table") 

38 

39 

40class Extern(Managed["ctypes._Pointer[ffi.wasm_extern_t]"]): 

41 def __init__(self, ptr: "ctypes._Pointer[ffi.wasm_extern_t]"): 

42 self._set_ptr(ptr) 

43 

44 def _delete(self, ptr: "ctypes._Pointer[ffi.wasm_extern_t]") -> None: 

45 ffi.wasm_extern_delete(ptr)