feat(c-api) Use Option<NonNull<wasm_valtype_t>> in wasm_valtype_kind.

A more Rust-FFI idiomatic way to handle null pointer.

Note: In `wasm_valtype_kind`, it's tricky to handle the error because
we _must_ return a `wasm_valtype_kind` value. For the moment, it
continues to panic, which is probably the best tradeoff.
This commit is contained in:
Ivan Enderlin
2020-10-08 15:05:13 +02:00
parent cf47832ec6
commit 5dbab5655e

View File

@@ -1,5 +1,6 @@
use super::super::value::wasm_valkind_t; use super::super::value::wasm_valkind_t;
use std::convert::TryInto; use std::convert::TryInto;
use std::ptr::NonNull;
use wasmer::ValType; use wasmer::ValType;
#[allow(non_camel_case_types)] #[allow(non_camel_case_types)]
@@ -83,10 +84,11 @@ pub extern "C" fn wasm_valtype_new(kind: wasm_valkind_t) -> Option<Box<wasm_valt
pub unsafe extern "C" fn wasm_valtype_delete(_valtype: Option<Box<wasm_valtype_t>>) {} pub unsafe extern "C" fn wasm_valtype_delete(_valtype: Option<Box<wasm_valtype_t>>) {}
#[no_mangle] #[no_mangle]
pub unsafe extern "C" fn wasm_valtype_kind(valtype: *const wasm_valtype_t) -> wasm_valkind_t { pub unsafe extern "C" fn wasm_valtype_kind(
if valtype.is_null() { valtype: Option<NonNull<wasm_valtype_t>>,
// TODO: handle error ) -> wasm_valkind_t {
panic!("wasm_valtype_kind: argument is null pointer"); valtype
} .expect("`wasm_valtype_kind: argument is a null pointer")
return (*valtype).valkind as wasm_valkind_t; .as_ref()
.valkind as wasm_valkind_t
} }