Coverage for wasmtime/_extern.py: 87%

39 statements  

« prev     ^ index     » next       coverage.py v7.11.3, created at 2026-05-07 14:30 +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, Tag 

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 if ptr.kind == ffi.WASMTIME_EXTERN_TAG.value: 

21 return Tag._from_raw(ptr.of.tag) 

22 raise WasmtimeError("unknown extern") 

23 

24 

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

26 from wasmtime import Func, Table, Global, Memory, SharedMemory, Tag 

27 

28 if isinstance(item, Func): 

29 return item._as_extern() 

30 elif isinstance(item, Global): 

31 return item._as_extern() 

32 elif isinstance(item, Memory): 

33 return item._as_extern() 

34 elif isinstance(item, SharedMemory): 

35 return item._as_extern() 

36 elif isinstance(item, Tag): 

37 return item._as_extern() 

38 elif isinstance(item, Table): 

39 return item._as_extern() 

40 else: 

41 raise TypeError("expected a Func, Global, Memory, SharedMemory, Tag, or Table") 

42 

43 

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

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

46 self._set_ptr(ptr) 

47 

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

49 ffi.wasm_extern_delete(ptr)