mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-15 04:50:40 +08:00
54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
// Borrow direct bindings only while index evaluation preserves their owner.
|
|
const globalValues = [3, 5, -0];
|
|
let globalIndex = 0;
|
|
console.log("global", globalValues[globalIndex++] + globalValues[globalIndex], globalIndex);
|
|
console.log("signed-zero", 1 / (globalValues[2] * 1));
|
|
|
|
function localReads(values: number[]): void {
|
|
let index = 0;
|
|
const alias = values;
|
|
const indices = new Uint8Array([1, 0]);
|
|
console.log("local", values[index++] + values[index], index);
|
|
console.log("assign-index", values[index = 0] * 2, index);
|
|
console.log("bytes-index", values[indices[0]] + 1);
|
|
console.log("nested", values[values[0] - 3] + 1);
|
|
values = [90];
|
|
console.log("alias", alias[0] + values[0]);
|
|
}
|
|
localReads([3, 5]);
|
|
|
|
let current = [11];
|
|
const replacement = [70];
|
|
console.log("replace-global", current[(current = replacement) ? 0 : 0] + 1, current[0]);
|
|
|
|
function replaceLocal(): void {
|
|
let values = [13];
|
|
const replacement = [80];
|
|
console.log("replace-local", values[(values = replacement) ? 0 : 0] * 2, values[0]);
|
|
values = [17];
|
|
const indices = new Uint8Array([0]);
|
|
console.log("replace-nested", values[indices[(values = replacement) ? 0 : 0]] + 1, values[0]);
|
|
}
|
|
replaceLocal();
|
|
|
|
function captured(): void {
|
|
let values = [19];
|
|
function read(): number { return values[0] + 1; }
|
|
function replace(): number { values = [100]; return 0; }
|
|
console.log("captured", read(), values[replace()] + 1, read());
|
|
}
|
|
captured();
|
|
|
|
function indexTdz(): void {
|
|
function read(values: number[]): number { return values[index] + 1; }
|
|
try { console.log(read([23])); } catch (e) { console.log("index-tdz", (e as Error).name); }
|
|
const index = 0;
|
|
console.log("after-tdz", read([23]));
|
|
}
|
|
indexTdz();
|
|
|
|
function consume(values: number[]): number { return values[0] + 1; }
|
|
console.log("owned-argument", consume([29]));
|
|
console.log("temporary", [31][0] + 1);
|
|
console.log("conditional", (globalIndex > 0 ? [37] : [41])[0] + 1);
|