Skip to content

Commit 10b68a5

Browse files
Add bindings for non typed arrays
1 parent 34635b4 commit 10b68a5

File tree

4 files changed

+370
-0
lines changed

4 files changed

+370
-0
lines changed

lib/asbind-instance/supported-ref-types.js

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,201 @@ export const SUPPORTED_REF_TYPES = {
201201
responseRef
202202
);
203203
}
204+
},
205+
BIGINT64ARRAY: {
206+
isTypeFromArgument: arg => {
207+
return arg instanceof BigInt64Array;
208+
},
209+
isTypeFromReference: (wasmExports, ref) => {
210+
return wasmExports.__instanceof(ref, wasmExports.__asbind_Int64Array_ID);
211+
},
212+
getRef: (wasmExports, arg) => {
213+
return wasmExports.__pin(
214+
wasmExports.__newArray(wasmExports.__asbind_Int64Array_ID, arg)
215+
);
216+
},
217+
getValueFromRef: (wasmExports, responseRef) => {
218+
return wasmExports.__getInt64Array(responseRef);
219+
},
220+
getUnsafeValueFromRef: (wasmExports, responseRef) => {
221+
return getUnsafeResponse(
222+
wasmExports.__getInt64ArrayView(responseRef),
223+
responseRef
224+
);
225+
}
226+
},
227+
BIGUINT64ARRAY: {
228+
isTypeFromArgument: arg => {
229+
return arg instanceof BigUint64Array;
230+
},
231+
isTypeFromReference: (wasmExports, ref) => {
232+
return wasmExports.__instanceof(ref, wasmExports.__asbind_Uint64Array_ID);
233+
},
234+
getRef: (wasmExports, arg) => {
235+
return wasmExports.__pin(
236+
wasmExports.__newArray(wasmExports.__asbind_Uint64Array_ID, arg)
237+
);
238+
},
239+
getValueFromRef: (wasmExports, responseRef) => {
240+
return wasmExports.__getInt64Array(responseRef);
241+
},
242+
getUnsafeValueFromRef: (wasmExports, responseRef) => {
243+
return getUnsafeResponse(
244+
wasmExports.__getInt64ArrayView(responseRef),
245+
responseRef
246+
);
247+
}
248+
},
249+
I32ARRAY: {
250+
isTypeFromArgument: arg => {
251+
return Array.isArray(arg) && Number.isInteger(arg[0]);
252+
},
253+
isTypeFromReference: (wasmExports, ref) => {
254+
return wasmExports.__instanceof(ref, wasmExports.__asbind_I32Array_ID);
255+
},
256+
getRef: (wasmExports, arg) => {
257+
return wasmExports.__pin(
258+
wasmExports.__newArray(wasmExports.__asbind_I32Array_ID, arg)
259+
);
260+
},
261+
getValueFromRef: (wasmExports, responseRef) => {
262+
return wasmExports.__getArray(responseRef);
263+
}
264+
},
265+
I64ARRAY: {
266+
isTypeFromArgument: arg => {
267+
return Array.isArray(arg) && typeof arg[0] === "bigint";
268+
},
269+
isTypeFromReference: (wasmExports, ref) => {
270+
return wasmExports.__instanceof(ref, wasmExports.__asbind_I64Array_ID);
271+
},
272+
getRef: (wasmExports, arg) => {
273+
return wasmExports.__pin(
274+
wasmExports.__newArray(wasmExports.__asbind_I64Array_ID, arg)
275+
);
276+
},
277+
getValueFromRef: (wasmExports, responseRef) => {
278+
return wasmExports.__getArray(responseRef);
279+
}
280+
},
281+
STRINGARRAY: {
282+
isTypeFromArgument: arg => {
283+
return Array.isArray(arg) && typeof arg[0] === "string";
284+
},
285+
isTypeFromReference: (wasmExports, ref) => {
286+
return wasmExports.__instanceof(ref, wasmExports.__asbind_StringArray_ID);
287+
},
288+
getRef: (wasmExports, arg) => {
289+
const refs = arg.map(value =>
290+
wasmExports.__pin(wasmExports.__newString(value))
291+
);
292+
return wasmExports.__pin(
293+
wasmExports.__newArray(wasmExports.__asbind_StringArray_ID, refs)
294+
);
295+
},
296+
getValueFromRef: (wasmExports, responseRef) => {
297+
return wasmExports
298+
.__getArray(responseRef)
299+
.map(value => wasmExports.__getString(value));
300+
}
301+
},
302+
I32ARRAYARRAY: {
303+
isTypeFromArgument: arg => {
304+
return (
305+
Array.isArray(arg) &&
306+
Array.isArray(arg[0]) &&
307+
Number.isInteger(arg[0][0])
308+
);
309+
},
310+
isTypeFromReference: (wasmExports, ref) => {
311+
return wasmExports.__instanceof(
312+
ref,
313+
wasmExports.__asbind_I32ArrayArray_ID
314+
);
315+
},
316+
getRef: (wasmExports, arg) => {
317+
const refs = arg.map(value =>
318+
wasmExports.__pin(
319+
wasmExports.__newArray(wasmExports.__asbind_I32Array_ID, value)
320+
)
321+
);
322+
return wasmExports.__pin(
323+
wasmExports.__newArray(wasmExports.__asbind_I32ArrayArray_ID, refs)
324+
);
325+
},
326+
getValueFromRef: (wasmExports, responseRef) => {
327+
return wasmExports
328+
.__getArray(responseRef)
329+
.map(value => wasmExports.__getArray(value));
330+
}
331+
},
332+
I64ARRAYARRAY: {
333+
isTypeFromArgument: arg => {
334+
return (
335+
Array.isArray(arg) &&
336+
Array.isArray(arg[0]) &&
337+
typeof arg[0][0] === "bigint"
338+
);
339+
},
340+
isTypeFromReference: (wasmExports, ref) => {
341+
return wasmExports.__instanceof(
342+
ref,
343+
wasmExports.__asbind_I64ArrayArray_ID
344+
);
345+
},
346+
getRef: (wasmExports, arg) => {
347+
const refs = arg.map(value =>
348+
wasmExports.__pin(
349+
wasmExports.__newArray(wasmExports.__asbind_I64Array_ID, value)
350+
)
351+
);
352+
return wasmExports.__pin(
353+
wasmExports.__newArray(wasmExports.__asbind_I64ArrayArray_ID, refs)
354+
);
355+
},
356+
getValueFromRef: (wasmExports, responseRef) => {
357+
return wasmExports
358+
.__getArray(responseRef)
359+
.map(value => wasmExports.__getArray(value));
360+
}
361+
},
362+
STRINGARRAYARRAY: {
363+
isTypeFromArgument: arg => {
364+
return (
365+
Array.isArray(arg) &&
366+
Array.isArray(arg[0]) &&
367+
typeof arg[0][0] === "string"
368+
);
369+
},
370+
isTypeFromReference: (wasmExports, ref) => {
371+
return wasmExports.__instanceof(
372+
ref,
373+
wasmExports.__asbind_StringArrayArray_ID
374+
);
375+
},
376+
getRef: (wasmExports, arg) => {
377+
const refs = arg.map(value => {
378+
const stringRefs = value.map(v =>
379+
wasmExports.__pin(wasmExports.__newString(v))
380+
);
381+
return wasmExports.__pin(
382+
wasmExports.__newArray(
383+
wasmExports.__asbind_StringArray_ID,
384+
stringRefs
385+
)
386+
);
387+
});
388+
return wasmExports.__pin(
389+
wasmExports.__newArray(wasmExports.__asbind_StringArrayArray_ID, refs)
390+
);
391+
},
392+
getValueFromRef: (wasmExports, responseRef) => {
393+
return wasmExports
394+
.__getArray(responseRef)
395+
.map(value =>
396+
wasmExports.__getArray(value).map(v => wasmExports.__getString(v))
397+
);
398+
}
204399
}
205400
};
206401

lib/assembly/as-bind.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,13 @@ export const __asbind_Int32Array_ID = idof<Int32Array>();
2020
export const __asbind_Uint32Array_ID = idof<Uint32Array>();
2121
export const __asbind_Float32Array_ID = idof<Float32Array>();
2222
export const __asbind_Float64Array_ID = idof<Float64Array>();
23+
export const __asbind_Int64Array_ID = idof<Int64Array>();
24+
export const __asbind_Uint64Array_ID = idof<Uint64Array>();
25+
26+
// Arrays
27+
export const __asbind_I32Array_ID = idof<Array<i32>>();
28+
export const __asbind_I64Array_ID = idof<Array<i64>>();
29+
export const __asbind_StringArray_ID = idof<Array<string>>();
30+
export const __asbind_I32ArrayArray_ID = idof<Array<Array<i32>>>();
31+
export const __asbind_I64ArrayArray_ID = idof<Array<Array<i64>>>();
32+
export const __asbind_StringArrayArray_ID = idof<Array<Array<String>>>();

test/assembly/test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,46 @@ export function mapFloat64Array(array: Float64Array): Float64Array {
7777
return array.map((value: f64) => value * 2);
7878
}
7979

80+
export function mapBigInt64Array(array: Int64Array): Int64Array {
81+
return array.map((value: i64) => value * 2);
82+
}
83+
84+
export function mapBigUint64Array(array: Uint64Array): Uint64Array {
85+
return array.map((value: u64) => value * 2);
86+
}
87+
88+
export function mapI32Array(array: Array<i32>): Array<i32> {
89+
return array.map<i32>((value: i32) => value * 2);
90+
}
91+
92+
export function mapI64Array(array: Array<i64>): Array<i64> {
93+
return array.map<i64>((value: i64) => value * 2);
94+
}
95+
96+
export function mapStringArray(array: Array<String>): Array<String> {
97+
return array.map<String>((value: String) => "#" + value);
98+
}
99+
100+
export function mapI32ArrayArray(array: Array<Array<i32>>): Array<Array<i32>> {
101+
return array.map<Array<i32>>((value: Array<i32>) =>
102+
value.map<i32>((v: i32) => v * 2)
103+
);
104+
}
105+
106+
export function mapI64ArrayArray(array: Array<Array<i64>>): Array<Array<i64>> {
107+
return array.map<Array<i64>>((value: Array<i64>) =>
108+
value.map<i64>((v: i64) => v * 2)
109+
);
110+
}
111+
112+
export function mapStringArrayArray(
113+
array: Array<Array<String>>
114+
): Array<Array<String>> {
115+
return array.map<Array<String>>((value: Array<String>) =>
116+
value.map<String>((v: String) => "#" + v)
117+
);
118+
}
119+
80120
declare function testImportString(value: string): void;
81121
export function callTestImportString(value: string): void {
82122
testImportString(value);

0 commit comments

Comments
 (0)