I managed to create this file:
    
    
    import wasm3
    # import wasm3/wasm3c
    
    proc wasmSize*(_: typedesc[array]): uint32 = uint32 sizeof(uint32)
    
    proc wasmSize*(_: typedesc[seq]): uint32 = uint32 sizeof(uint32)
    
    proc wasmSize*(_: typedesc[pointer]): uint32 = uint32 sizeof(pointer)
    
    proc wasmCopy(pt: ptr seq[uint8], env: WasmEnv, dest: WasmPtr, offset: var 
uint64)
    
    proc wasmAlloc*[T](oa: openArray[T], env: WasmEnv, wPtr: WasmPtr) =
      const elemSize = uint32 getWasmSize(typeof(oa[0]))
      
      var dataPtr = env.alloc(elemSize * uint32 oa.len)
      env.setMem(uint32(oa.len), wPtr)
      env.setMem(dataPtr, wPtr, offset = uint64 sizeof(int32))
      var offset = 0u64
      for element in oa:
        element.wasmCopy(env, dataPtr, offset)
    
    proc wasmCopy(pt: ptr seq[uint8], env: WasmEnv, dest: WasmPtr, offset: var 
uint64) =
      let ptrptr = env.alloc(uint32 sizeof(WasmPtr))
      wasmAlloc(pt[], env, ptrptr)
      env.copyMem(dest.uint32, ptrptr.unsafeaddr, sizeof(WasmPtr), uint32 
offset)
    
    
    
    Run

Although I haven’t tested it yet, I feel like something will go wrong 

Reply via email to