Skip to content
33 changes: 15 additions & 18 deletions lib/wasi.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,6 @@ const kBindingName = Symbol('kBindingName');

emitExperimentalWarning('WASI');


function setupInstance(self, instance) {
validateObject(instance, 'instance');
validateObject(instance.exports, 'instance.exports');

self[kInstance] = instance;
self[kSetMemory](instance.exports.memory);
}

class WASI {
constructor(options = kEmptyObject) {
validateObject(options, 'options');
Expand Down Expand Up @@ -118,14 +109,25 @@ class WASI {
this[kInstance] = undefined;
}

// Must not export _initialize, must export _start
start(instance) {
finalizeBindings(instance, {
memory = instance?.exports?.memory,
} = {}) {
if (this[kStarted]) {
throw new ERR_WASI_ALREADY_STARTED();
}

validateObject(instance, 'instance');
validateObject(instance.exports, 'instance.exports');

this[kSetMemory](memory);

this[kInstance] = instance;
this[kStarted] = true;
}

setupInstance(this, instance);
// Must not export _initialize, must export _start
start(instance) {
this.finalizeBindings(instance);

const { _start, _initialize } = this[kInstance].exports;

Expand All @@ -145,12 +147,7 @@ class WASI {

// Must not export _start, may optionally export _initialize
initialize(instance) {
if (this[kStarted]) {
throw new ERR_WASI_ALREADY_STARTED();
}
this[kStarted] = true;

setupInstance(this, instance);
this.finalizeBindings(instance);

const { _start, _initialize } = this[kInstance].exports;

Expand Down
Loading