Files
scriptc/tests/corpus/array-buffer-conversions.js
Chris Tate f668fc4bfd Support native runtime values used by OpenTUI
- Add shared ArrayBuffer storage and native Unicode grapheme segmentation.
- Preserve builtin modules, globals, and byte views across JavaScript bindings.
- Compile package initialization expressions and optional native callables.
2026-09-28 19:01:50 -05:00

38 lines
1.3 KiB
JavaScript

let order = "";
function offset(value) {
return { valueOf() { order += "o"; return value; } };
}
function length(value) {
return { valueOf() { order += "l"; return value; } };
}
const buffer = new ArrayBuffer(8);
for (const n of [-1, 1, 8, 12, Infinity]) {
order = "";
try {
// @ts-expect-error Numeric inputs use the JavaScript coercion protocol.
const view = new Uint32Array(buffer, offset(n), length(0));
console.log(view.byteOffset, view.length);
} catch (error) {
if (error instanceof Error) console.log(error.name);
}
console.log(order);
}
for (const n of [-1, 1, 9]) {
order = "";
try {
// @ts-expect-error Numeric inputs use the JavaScript coercion protocol.
const view = new DataView(buffer, offset(n), length(0));
console.log(view.byteOffset, view.byteLength);
} catch (error) {
if (error instanceof Error) console.log(error.name);
}
console.log(order);
}
order = "";
// @ts-expect-error Extra arguments are evaluated but ignored for array inputs.
const copied = new Uint32Array([5, 6], offset(-1), length(-1));
console.log(copied.length, copied[0], copied[1], order);
// @ts-expect-error Extra arguments are evaluated but ignored for length inputs.
const allocated = new Uint8Array(3, offset(-1), length(-1));
console.log(allocated.length, order);