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.