diff --git a/examples/guide-supported-types-examples/pointers.js b/examples/guide-supported-types-examples/pointers.js new file mode 100644 index 00000000..59ff64d8 --- /dev/null +++ b/examples/guide-supported-types-examples/pointers.js @@ -0,0 +1,12 @@ +import { + take_pointer_by_value, + return_pointer, +} from './guide_supported_types_examples'; +import { memory } from './guide_supported_types_examples_bg'; + +let ptr = return_pointer(); +let buf = new Uint8Array(memory.buffer); +let value = buf[ptr]; +console.log(`The byte at the ${ptr} address is ${value}`); + +take_pointer_by_value(ptr); diff --git a/examples/guide-supported-types-examples/src/lib.rs b/examples/guide-supported-types-examples/src/lib.rs index 1fef349a..933f5215 100755 --- a/examples/guide-supported-types-examples/src/lib.rs +++ b/examples/guide-supported-types-examples/src/lib.rs @@ -11,3 +11,4 @@ pub mod char; pub mod bool; pub mod js_value; pub mod boxed_js_value_slice; +pub mod pointers; diff --git a/examples/guide-supported-types-examples/src/pointers.rs b/examples/guide-supported-types-examples/src/pointers.rs new file mode 100644 index 00000000..1b8ebbb5 --- /dev/null +++ b/examples/guide-supported-types-examples/src/pointers.rs @@ -0,0 +1,10 @@ +use std::ptr; +use wasm_bindgen::prelude::*; + +#[wasm_bindgen] +pub fn take_pointer_by_value(x: *mut u8) {} + +#[wasm_bindgen] +pub fn return_pointer() -> *mut u8 { + ptr::null_mut() +} diff --git a/guide/src/reference/types.md b/guide/src/reference/types.md index c8f82339..ede02667 100644 --- a/guide/src/reference/types.md +++ b/guide/src/reference/types.md @@ -163,6 +163,18 @@ garbage-collected heap and the Wasm linear memory with `TextDecoder` and |:---:|:---:|:---:|:---:|:---:|:---:|:---:| | Yes | No | No | Yes | No | No | A JavaScript number value | +### Example Rust Usage + +```rust +{{#include ../../../examples/guide-supported-types-examples/src/pointers.rs}} +``` + +### Example JavaScript Usage + +```js +{{#include ../../../examples/guide-supported-types-examples/pointers.js}} +``` + ## `u8` `i8` `u16` `i16` `u64` `i64` `isize` `size` | `T` parameter | `&T` parameter | `&mut T` parameter | `T` return value | `Option` parameter | `Option` return value | JavaScript representation |