0

Trying to create an array with a size that is a variable imported from the JS doesn't seem to work. For example:

AssemblyScript:

export declare arrSize: u32

const arr = new Uint32Array(arrSize)

export function init (): void {
  unchecked(testArr[0]) = 1
  store<u32>(0, unchecked(testArr[0]))
}

JS:

const memory = new WebAssembly.Memory({ initial: 1 })
WebAssembly.instantiateStreaming(fetch('module.wasm'), {
  env: { memory },
  index: { arrSize: 2 }
}).then(module => {
  const { init } = module.instance.exports
  init()
  const arr = new Uint32Array(memory.buffer, 0, 2)
  console.log(arr)
})

Whereas if I change const arr = new Uint32Array(2) in the AssemblyScript file, it works.

Is there a way to have dynamically sized local arrays in the WebAssembly module?

1 Answer 1

1

This works:

export declare const count: i32;

const arr = new Array<i32>(count);
export function getCount(): i32 {
    return arr.length;
}

And in the imports object for WebAssembly.instantiate you should have:

{
    index: {
        count: 22
    }
}

provided that you assemblyscript file is named index.ts

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.