Files
scriptc/tests/corpus/bigint-checked-storage.js
Chris Tate 97a489845a Preserve native values through renderer initialization
- Carry BigInts, Sets, and regular expressions through checked native storage without a JavaScript engine.
- Preserve dictionary aliases, spreads, frozen metadata, and fluent initialization helpers.
- Collect checked object and closure cycles while preserving live references.
2026-09-29 00:20:53 -05:00

37 lines
2.3 KiB
JavaScript

function identity(value) { return value; }
const big = identity(18446744073709551615n);
const zero = identity(0n);
const negative = identity(-9223372036854775808n);
console.log(typeof big, String(big), Boolean(big), Boolean(zero));
console.log(big === identity(18446744073709551615n), big === identity(18446744073709551615));
console.log(String(big + identity(1n)), String(negative + identity(-1n)), big + "!");
const record = { pointer: big, nested: [negative, zero] };
console.log(record.pointer.toString(16), record.nested.map(value => String(value)).join(","));
console.log(String(structuredClone(record).pointer));
console.log(Object.fromEntries([[big, "pointer"]])["18446744073709551615"]);
for (const value of [big, [big], { value: big }]) {
try { console.log(JSON.stringify(value)); } catch (error) { console.log(error.name, error.message); }
}
console.log(JSON.stringify(record, (_key, value) => typeof value === "bigint" ? String(value) : value));
for (const other of [1, null, undefined, true]) {
try { console.log(big + other); } catch (error) { console.log(error.name, error.message); }
}
console.log(Object.prototype.toString.call(big), Number(identity(42n)));
try { new WeakMap().set(big, 1); } catch (error) { console.log(error.name, error.message); }
const values = new Map([[big, "first"], [identity(18446744073709551615n), "second"]]);
console.log(values.size, values.get(identity(18446744073709551615n)));
console.log([big].includes(identity(18446744073709551615n)), [big].indexOf(identity(18446744073709551615n)));
console.log(Number({ valueOf() { return identity(42n); } }));
for (const radix of [2, 10, 36, undefined, 1, 37, null, 2n]) {
try { console.log(big.toString(radix)); } catch (error) { console.log(error.name, error.message); }
}
try { console.log(+big); } catch (error) { console.log(error.name, error.message); }
try { new Map([big]); } catch (error) { console.log(error.name, error.message); }
function describe(value) { return typeof value === "bigint" ? value.toString(16) : "other"; }
console.log(describe(big), describe(1), describe(null));
const buffer = identity(Buffer.from([65, 255]));
for (const encoding of ["HEX", "latin1", "utf8", "invalid", undefined, null, 0, 16]) {
try { console.log(buffer.toString(encoding)); } catch (error) { console.log(error.name, error.message); }
}
console.log(identity(Buffer.from([])).toString("invalid"));