Skip to content

Commit 16eaaa4

Browse files
authored
Fix detached ArrayBuffer errors (swiftwasm#153)
1 parent 20c634a commit 16eaaa4

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

Runtime/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export class SwiftRuntime {
177177
},
178178

179179
swjs_decode_string: (bytes_ptr: pointer, length: number) => {
180-
const bytes = this.memory.bytes.subarray(
180+
const bytes = this.memory.bytes().subarray(
181181
bytes_ptr,
182182
bytes_ptr + length
183183
);

Runtime/src/memory.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,27 @@ import { pointer } from "./types";
33

44
export class Memory {
55
readonly rawMemory: WebAssembly.Memory;
6-
readonly bytes: Uint8Array;
7-
readonly dataView: DataView;
86

97
private readonly heap = new SwiftRuntimeHeap();
108

119
constructor(exports: WebAssembly.Exports) {
1210
this.rawMemory = exports.memory as WebAssembly.Memory;
13-
this.bytes = new Uint8Array(this.rawMemory.buffer);
14-
this.dataView = new DataView(this.rawMemory.buffer);
1511
}
1612

1713
retain = (value: any) => this.heap.retain(value);
1814
getObject = (ref: number) => this.heap.referenceHeap(ref);
1915
release = (ref: number) => this.heap.release(ref);
2016

21-
writeBytes = (ptr: pointer, bytes: Uint8Array) =>
22-
this.bytes.set(bytes, ptr);
17+
bytes = () => new Uint8Array(this.rawMemory.buffer);
18+
dataView = () => new DataView(this.rawMemory.buffer);
2319

24-
readUint32 = (ptr: pointer) => this.dataView.getUint32(ptr, true);
25-
readFloat64 = (ptr: pointer) => this.dataView.getFloat64(ptr, true);
20+
writeBytes = (ptr: pointer, bytes: Uint8Array) => this.bytes().set(bytes, ptr);
21+
22+
readUint32 = (ptr: pointer) => this.dataView().getUint32(ptr, true);
23+
readFloat64 = (ptr: pointer) => this.dataView().getFloat64(ptr, true);
2624

2725
writeUint32 = (ptr: pointer, value: number) =>
28-
this.dataView.setUint32(ptr, value, true);
26+
this.dataView().setUint32(ptr, value, true);
2927
writeFloat64 = (ptr: pointer, value: number) =>
30-
this.dataView.setFloat64(ptr, value, true);
28+
this.dataView().setFloat64(ptr, value, true);
3129
}

0 commit comments

Comments
 (0)