Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPragyan Das <pragyandas@msn.com>2020-05-28 22:37:50 +0300
committerRich Trott <rtrott@gmail.com>2020-06-19 19:57:28 +0300
commit343cf1b3c176c01ea992d5db0145f34b3e2066b6 (patch)
tree98ead1e718f022292d4d0a206ea57f3914b77c81 /doc/api/wasi.md
parentfdcd4893ff91f359433fb7526d4e3133260de777 (diff)
doc: update WASM code sample
- Code sample updated by adding a hello-world (`demo.wat`) code example - Step for compiling `.wat` to `.wasm` added (with reference to `wabt` tools) - The sample code prints "hello world\n" in the console This update adds a very minimal change to the existing sample and can be treated as an extension. PR-URL: https://github.com/nodejs/node/pull/33626 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'doc/api/wasi.md')
-rw-r--r--doc/api/wasi.md43
1 files changed, 41 insertions, 2 deletions
diff --git a/doc/api/wasi.md b/doc/api/wasi.md
index 3f9c6c7f51b..b46aacfbcb1 100644
--- a/doc/api/wasi.md
+++ b/doc/api/wasi.md
@@ -22,15 +22,54 @@ const wasi = new WASI({
const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
(async () => {
- const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm'));
+ const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));
const instance = await WebAssembly.instantiate(wasm, importObject);
wasi.start(instance);
})();
```
+To run the above example, create a new WebAssembly text format file named
+`demo.wat`:
+
+```text
+(module
+ ;; Import the required fd_write WASI function which will write the given io vectors to stdout
+ ;; The function signature for fd_write is:
+ ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written
+ (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32)))
+
+ (memory 1)
+ (export "memory" (memory 0))
+
+ ;; Write 'hello world\n' to memory at an offset of 8 bytes
+ ;; Note the trailing newline which is required for the text to appear
+ (data (i32.const 8) "hello world\n")
+
+ (func $main (export "_start")
+ ;; Creating a new io vector within linear memory
+ (i32.store (i32.const 0) (i32.const 8)) ;; iov.iov_base - This is a pointer to the start of the 'hello world\n' string
+ (i32.store (i32.const 4) (i32.const 12)) ;; iov.iov_len - The length of the 'hello world\n' string
+
+ (call $fd_write
+ (i32.const 1) ;; file_descriptor - 1 for stdout
+ (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0
+ (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one.
+ (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written
+ )
+ drop ;; Discard the number of bytes written from the top of the stack
+ )
+)
+```
+
+Use [wabt](https://github.com/WebAssembly/wabt) to compile `.wat` to `.wasm`
+
+```console
+$ wat2wasm demo.wat
+```
+
The `--experimental-wasi-unstable-preview1` and `--experimental-wasm-bigint`
-CLI arguments are needed for the previous example to run.
+CLI arguments are needed for this example to run.
## Class: `WASI`
<!-- YAML