From b20879c0db917f6bdd31279c0787a372827f7e3b Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 18:18:18 +0300 Subject: [PATCH 1/5] improve usage example --- README.md | 55 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2bc476be..0bd8787a 100644 --- a/README.md +++ b/README.md @@ -15,40 +15,63 @@ $> npm install binaryen ``` ```js -import binaryen from "binaryen"; +import { + Module, + createType, + i32 as I32, +} from "binaryen"; + +/* + (func (export "add") $add (param $0 i32) (param $1 i32) (result i32) + . (local $2 i32) + | (local.set $2 + | . (i32.add + | | (local.get $0) + | | (local.get $1) + | ` ) + | ) + | (return + | (local.get $2) + ` ) + ) + + Let's build above wasm function using binaryen IR +*/ // Create a module with a single function -var myModule = new binaryen.Module(); - -myModule.addFunction("add", binaryen.createType([ binaryen.i32, binaryen.i32 ]), binaryen.i32, [ binaryen.i32 ], - myModule.block(null, [ - myModule.local.set(2, - myModule.i32.add( - myModule.local.get(0, binaryen.i32), - myModule.local.get(1, binaryen.i32) +const mod = new Module(); +const { local, i32 } = mod; + +mod.addFunction("add", createType([ I32, I32 ]), I32, [ I32 ], + mod.block(null, [ + local.set(2, + i32.add( + local.get(0, I32), + local.get(1, I32) ) ), - myModule.return( - myModule.local.get(2, binaryen.i32) + mod.return( + local.get(2, I32) ) ]) ); -myModule.addFunctionExport("add", "add"); +mod.addFunctionExport("add", "add"); // Optimize the module using default passes and levels -myModule.optimize(); +mod.optimize(); // Validate the module -if (!myModule.validate()) +if (!mod.validate()) throw new Error("validation error"); // Generate text format and binary -var textData = myModule.emitText(); -var wasmData = myModule.emitBinary(); +var textData = mod.emitText(); +var wasmData = mod.emitBinary(); // Example usage with the WebAssembly API var compiled = new WebAssembly.Module(wasmData); var instance = new WebAssembly.Instance(compiled, {}); + console.log(instance.exports.add(41, 1)); ``` From 76da0d4769a097aa6fb52c8687d48ebd8fe10eca Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 18:20:44 +0300 Subject: [PATCH 2/5] add comment about entry block --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0bd8787a..4663d7a8 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ const mod = new Module(); const { local, i32 } = mod; mod.addFunction("add", createType([ I32, I32 ]), I32, [ I32 ], - mod.block(null, [ + mod.block(null, [ // entry block (usually not visible in wat/wast) local.set(2, i32.add( local.get(0, I32), From 44e2cd5cfc1e139043a8e6a57464393511c73527 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Fri, 5 Aug 2022 09:20:21 +0300 Subject: [PATCH 3/5] add dispose --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 4663d7a8..40339000 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,9 @@ if (!mod.validate()) var textData = mod.emitText(); var wasmData = mod.emitBinary(); +// Free resurces +mod.dispose(); + // Example usage with the WebAssembly API var compiled = new WebAssembly.Module(wasmData); var instance = new WebAssembly.Instance(compiled, {}); From 049c4696b98a2b3f3fe930cb8ebe86fc83cd5f9a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Fri, 5 Aug 2022 09:21:00 +0300 Subject: [PATCH 4/5] type in comment --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40339000..ac9afb6a 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ if (!mod.validate()) var textData = mod.emitText(); var wasmData = mod.emitBinary(); -// Free resurces +// Free resources mod.dispose(); // Example usage with the WebAssembly API From d8ae4a4e068b956f8f2169b578e4e58f294e11f4 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Fri, 5 Aug 2022 09:28:35 +0300 Subject: [PATCH 5/5] better vertical bars --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index ac9afb6a..ec5c2248 100644 --- a/README.md +++ b/README.md @@ -23,16 +23,16 @@ import { /* (func (export "add") $add (param $0 i32) (param $1 i32) (result i32) - . (local $2 i32) - | (local.set $2 - | . (i32.add - | | (local.get $0) - | | (local.get $1) - | ` ) - | ) - | (return - | (local.get $2) - ` ) + ⋮ (local $2 i32) + ⋮ (local.set $2 + ⋮ ⋮ (i32.add + ⋮ ⋮ ⋮ (local.get $0) + ⋮ ⋮ ⋮ (local.get $1) + ⋮ ⋮ ) + ⋮ ) + ⋮ (return + ⋮ ⋮ (local.get $2) + ⋮ ) ) Let's build above wasm function using binaryen IR