Files
scriptc/tests/corpus/2968-numeric-array-borrow.ts

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);