1616 WASM_ANYREF .value : 'externref' ,
1717}
1818
19+
1920@ctypes .CFUNCTYPE (None , c_void_p )
2021def _externref_finalizer (extern_id : int ) -> None :
2122 Val ._id_to_ref_count [extern_id ] -= 1
@@ -35,35 +36,41 @@ def _intern(obj: typing.Any) -> c_void_p:
3536def _unintern (val : int ) -> typing .Any :
3637 return Val ._id_to_extern .get (val )
3738
39+
3840def get_valtype_attr (ty : ValType ) -> str :
3941 return val_id2attr [wasm_valtype_kind (ty ._ptr )]
4042
43+
4144def val_getter (store_id : int , val_raw : wasmtime_val_raw_t , attr : str ) -> typing .Union [int , float , "wasmtime.Func" , typing .Any ]:
4245 val = getattr (val_raw , attr )
43-
44- if attr == 'externref' :
46+
47+ if attr == 'externref' :
4548 ptr = ctypes .POINTER (wasmtime_externref_t )
46- if not val : return None
49+ if not val :
50+ return None
4751 ffi = ptr .from_address (val )
48- if not ffi : return None
52+ if not ffi :
53+ return None
4954 extern_id = wasmtime_externref_data (ffi )
5055 return _unintern (extern_id )
51- elif attr == 'funcref' :
52- if val == 0 : return None
56+ elif attr == 'funcref' :
57+ if val == 0 :
58+ return None
5359 f = wasmtime_func_t ()
5460 f .store_id = store_id
5561 f .index = val
5662 return wasmtime .Func ._from_raw (f )
5763 return val
5864
65+
5966def val_setter (dst : wasmtime_val_raw_t , attr : str , val : "IntoVal" ):
60- if attr == 'externref' :
61- if isinstance (val , Val ) and val ._raw .kind == WASMTIME_EXTERNREF .value :
67+ if attr == 'externref' :
68+ if isinstance (val , Val ) and val ._raw .kind == WASMTIME_EXTERNREF .value :
6269 casted = ctypes .addressof (val ._raw .of .externref )
6370 else :
6471 casted = ctypes .addressof (Val .externref (val )._raw .of .externref )
65- elif attr == 'funcref' :
66- if isinstance (val , Val ) and val ._raw .kind == WASMTIME_FUNCREF .value :
72+ elif attr == 'funcref' :
73+ if isinstance (val , Val ) and val ._raw .kind == WASMTIME_FUNCREF .value :
6774 casted = val ._raw .of .funcref .index
6875 elif isinstance (val , wasmtime .Func ):
6976 # TODO: validate same val._func.store_id
0 commit comments