mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-19 05:29:46 +08:00
- 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.
27 lines
1.0 KiB
TypeScript
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); }
|