mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-03 08:58:23 +08:00
- 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.
38 lines
1.3 KiB
JavaScript
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);
|