Skip to content

xtuc/inline-wast

Repository files navigation

inline-wast

Inline WebAssembly in your JavaScript

Motivations

The idea is (almost) the same than the built-in asm (or __asm__) function in C. Express your computation using the WebAssembly backend or an interpreter.

WAST is a superset of WATF (.wat) and is not part of the WebAssembly specification but we use it for convenience.

Example

Instructions

const {wastInstructions} = require('inline-wast/lib/interpreter');

function add(a, b) {
  const fn = wastInstructions`
    (i32.const ${a})
    (i32.const ${b})
    (i32.add)
  `;

  return fn();
}

console.log(add(1, 1)); // 2

Function declaration

const {wast} = require('inline-wast/lib/interpreter');

function add(a, b) {
  const exports = wast(`
    (func (export "add") (param $l i32) (param $r i32) (result i32)
      (get_local $l)
      (get_local $r)
      (i32.add)
    )
  `);

  return exports.add(a, b);
}

console.log(add(1, 1)); // 2

Native

If you want to use the native WebAssembly backend the usage remains the same, but you need to use:

const {wastInstructions, wast} = require('inline-wast/lib/native');

It's not recommended for now, the WAST to WASM conversion needs to be refactored.

About

Inline WebAssembly in your JavaScript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published