Currently when calling wasm_runtime_call_wasm() to invoke wasm function with externref type argument from runtime embedder, developer needs to use wasm_externref_obj2ref() to convert externref obj into an internal ref index firstly, which is not convenient to developer. To align with GC feature in which all the references passed to wasm_runtime_call_wasm() can be object pointers directly, we change the interface of wasm_runtime_call_wasm() to allow to pass object pointer directly for the externref argument, and refactor the related codes, update the related samples and the document.
1010 B
WAMR reference-types introduction
WebAssembly reference-types proposal introduces two new types funcref
and externref
. With externref
, It is easier and more efficient to interoperate with host environment. Host references are able to be represented directly by type externref
.
WAMR has implemented the reference-types proposal. WAMR allows a native method to pass a host object to a WASM application as an externref
parameter or receives a host object from a WASM application as an externref
result. Internally, WAMR won't try to parse or dereference externref
. It is an opaque type.
The restriction of using externref
in a native method is the host object has to be the value of a unintptr_t
variable. In other words, it takes 8 bytes on 64-bit machine and 4 bytes on 32-bit machines. Please keep that in mind especially when calling wasm_runtime_call_wasm
.
Please ref to the sample for more details.