Files
scriptc/tests/corpus/js-static-registries.cjs
Chris Tate f52b3b5b73 Compile untyped Map and Set registries without a JavaScript engine
- Store checked values in native collections while preserving supported object identities and JavaScript key equality.
- Support collection iteration and reject reference conversions that would copy or adapt stored objects.
2026-09-28 01:12:29 -05:00

38 lines
1.2 KiB
JavaScript

// Bundled OpenTUI stores renderables by number without type arguments.
class Renderable {
static next = 1;
static byNumber = new Map();
num;
constructor() {
this.num = Renderable.next++;
Renderable.byNumber.set(this.num, this);
}
destroy() {
Renderable.byNumber.delete(this.num);
}
}
const first = new Renderable();
const second = new Renderable();
console.log(first.num, second.num, Renderable.byNumber.size);
console.log(Renderable.byNumber.get(first.num) === first);
first.destroy();
console.log(Renderable.byNumber.has(first.num), Renderable.byNumber.get(second.num) === second);
second.destroy();
console.log(Renderable.byNumber.size, Renderable.byNumber.get(123) === undefined);
class Services {
registered = new Set();
add(value) { this.registered.add(value); }
remove(value) { return this.registered.delete(value); }
has(value) { return this.registered.has(value); }
}
const services = new Services();
services.add(first);
services.add(first);
services.add(second);
console.log(services.registered.size, services.has(first), services.has(second));
console.log(services.remove(first), services.remove(first), services.has(second));
services.registered.clear();
console.log(services.registered.size);