Files
scriptc/tests/corpus/field-assignment-values.ts
Chris Tate 08115a1d3d Support native startup caches and assignment expressions
- Share symbol-keyed global caches across statically compiled modules.
- Preserve assignment results and evaluation order for native fields, accessors, and nullish defaults.
- Read omitted options correctly in specialized JavaScript package calls.
2026-09-28 11:05:00 -05:00

27 lines
1.0 KiB
TypeScript

let trace = "";
class Counter {
stored = 1;
get value(): number { trace += "get;"; return this.stored; }
set value(value: number) { trace += "set;"; this.stored = value; }
}
let current = new Counter();
const first = current;
function receiver(): Counter { trace += "receiver;"; return current; }
function replacement(): number { trace += "rhs;"; current = new Counter(); return 4; }
console.log(receiver().value += replacement(), first.stored, current.stored, trace);
trace = "";
console.log(receiver().value = replacement(), current.stored, trace);
const record = { a: 1, nested: { value: 2 }, text: "a" };
console.log(record.a = 7, record.nested.value *= 3, record.text += "b");
console.log(JSON.stringify(record));
const key = Symbol("value");
class Keyed {
[key] = 2;
}
const keyed = new Keyed();
console.log(keyed[key] += 5, keyed[key]);
let sideEffects = 0;
function fail(): number { sideEffects++; throw new Error("failed rhs"); }
try { console.log(record.a += fail()); }
catch (e) { if (e instanceof Error) console.log(e.message, record.a, sideEffects); }