mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-02 08:35:07 +08:00
- Preserve fresh constructor identity and shared captures across local class instances. - Carry constructors through unknown values without a JavaScript engine. - Support runtime-length spreads into fixed and rest parameters.
33 lines
949 B
TypeScript
33 lines
949 B
TypeScript
function make(value: number) {
|
|
return () => class Local {
|
|
read(): number { return value; }
|
|
async delayed(): Promise<number> { await Promise.resolve(); return ++value; }
|
|
};
|
|
}
|
|
const evaluate = make(2);
|
|
const First = evaluate();
|
|
const Second = evaluate();
|
|
const first = new First();
|
|
const second = new Second();
|
|
console.log(First === Second, await first.delayed(), second.read());
|
|
|
|
function loop(): number[] {
|
|
const reads: (() => number)[] = [];
|
|
for (let i = 0; i < 3; i++) {
|
|
const Local = class { read(): number { return i; } };
|
|
const value = new Local();
|
|
reads.push(() => value.read());
|
|
}
|
|
return reads.map((read) => read());
|
|
}
|
|
console.log(loop().join(","));
|
|
|
|
function tdz(): void {
|
|
const Local = class { read(): number { return later; } };
|
|
const value = new Local();
|
|
try { console.log(value.read()); } catch (error) { console.log((error as Error).name); }
|
|
let later = 17;
|
|
console.log(value.read());
|
|
}
|
|
tdz();
|