Document and update the API of the externals.rs module (#812)
* Document and update the API of the `externals.rs` module This commit ensures that all public methods and items are documented in the `externals.rs` module, notably all external values that can be imported and exported in WebAssembly. Along the way this also tidies up the API and fixes a few bugs: * `Global::new` now returns a `Result` and fails if the provided value does not match the type of the global. * `Global::set` now returns a `Result` and fails if the global is either immutable or the provided value doesn't match the type of the global. * `Table::new` now fails if the provided initializer does not match the element type. * `Table::get` now returns `Option<Val>` instead of implicitly returning null. * `Table::set` now returns `Result<()>`, returning an error on out of bounds or if the input type is of the wrong type. * `Table::grow` now returns `Result<u32>`, returning the previous number of table elements if succesful or an error if the maximum is reached or the initializer value is of the wrong type. Additionally a bug was fixed here where if the wrong initializer was provided the table would be grown still, but initialization would fail. * `Memory::data` was renamed to `Memory::data_unchecked_mut`. Additionally `Memory::data_unchecked` was added. Lots of caveats were written down about how using the method can go wrong. * `Memory::grow` now returns `Result<u32>`, returning an error if growth fails or the number of pages previous the growth if successful. * Run rustfmt * Fix another test * Update crates/api/src/externals.rs Co-Authored-By: Sergei Pepyakin <s.pepyakin@gmail.com> Co-authored-by: Sergei Pepyakin <s.pepyakin@gmail.com>
This commit is contained in:
@@ -76,23 +76,23 @@ pub fn instantiate_spectest(store: &Store) -> HashMap<&'static str, Extern> {
|
||||
ret.insert("print_f64_f64", Extern::Func(func));
|
||||
|
||||
let ty = GlobalType::new(ValType::I32, Mutability::Const);
|
||||
let g = Global::new(store, ty, Val::I32(666));
|
||||
let g = Global::new(store, ty, Val::I32(666)).unwrap();
|
||||
ret.insert("global_i32", Extern::Global(g));
|
||||
|
||||
let ty = GlobalType::new(ValType::I64, Mutability::Const);
|
||||
let g = Global::new(store, ty, Val::I64(666));
|
||||
let g = Global::new(store, ty, Val::I64(666)).unwrap();
|
||||
ret.insert("global_i64", Extern::Global(g));
|
||||
|
||||
let ty = GlobalType::new(ValType::F32, Mutability::Const);
|
||||
let g = Global::new(store, ty, Val::F32(0x4426_8000));
|
||||
let g = Global::new(store, ty, Val::F32(0x4426_8000)).unwrap();
|
||||
ret.insert("global_f32", Extern::Global(g));
|
||||
|
||||
let ty = GlobalType::new(ValType::F64, Mutability::Const);
|
||||
let g = Global::new(store, ty, Val::F64(0x4084_d000_0000_0000));
|
||||
let g = Global::new(store, ty, Val::F64(0x4084_d000_0000_0000)).unwrap();
|
||||
ret.insert("global_f64", Extern::Global(g));
|
||||
|
||||
let ty = TableType::new(ValType::FuncRef, Limits::new(10, Some(20)));
|
||||
let table = Table::new(store, ty, Val::AnyRef(AnyRef::Null));
|
||||
let table = Table::new(store, ty, Val::AnyRef(AnyRef::Null)).unwrap();
|
||||
ret.insert("table", Extern::Table(table));
|
||||
|
||||
let ty = MemoryType::new(Limits::new(1, Some(2)));
|
||||
|
||||
Reference in New Issue
Block a user