mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-24 06:14:01 +08:00
* Expand static Effect support across common APIs * Preserve compiler parity across expanded Effect patterns * Fix compiler regressions exposed by Effect coverage * Bound shared type conversion traversal * Clarify conversion contracts and tidy fixtures * Run every Effect fixture in CI shards * Preserve inferred array assignments in concurrent Effect programs * Record inferred array fixture compiler ordering
39 lines
1.7 KiB
JavaScript
39 lines
1.7 KiB
JavaScript
class Explained extends Error {
|
|
detail = "computed";
|
|
get message() { return this.detail; }
|
|
toString() { return this.name + ": " + this.message; }
|
|
}
|
|
function read(error) { return error.message; }
|
|
const absent = new Explained();
|
|
const present = new Explained("own");
|
|
const empty = new Explained("");
|
|
console.log(absent.message, read(absent), absent.toString());
|
|
console.log(present.message, read(present), empty.message === "");
|
|
console.log(Object.hasOwn(absent, "message"), Object.hasOwn(present, "message"), Object.hasOwn(empty, "message"));
|
|
console.log(Object.getOwnPropertyDescriptor(absent, "message") === undefined);
|
|
console.log(Object.getOwnPropertyDescriptor(present, "message").enumerable);
|
|
function write(error, message) { error.message = message; }
|
|
try { write(absent, "no"); } catch (error) { console.log(error.name); }
|
|
write(present, "updated");
|
|
console.log(read(present));
|
|
const marker = Symbol("marker");
|
|
Object.assign(absent, { detail: "assigned" });
|
|
Object.defineProperty(absent, marker, { value: 42 });
|
|
console.log(read(absent), absent[marker]);
|
|
try { throw absent; } catch (error) {
|
|
console.log(error === absent, error.message, error[marker]);
|
|
}
|
|
class DefaultRendering extends Error {
|
|
get message() { return "from getter"; }
|
|
}
|
|
console.log(new DefaultRendering().toString());
|
|
class ThrowingMessage extends Error {
|
|
/** @returns {string} */
|
|
get message() { throw new Error("message getter"); }
|
|
}
|
|
try { new ThrowingMessage().toString(); } catch (error) { console.log(error.message); }
|
|
try { new ThrowingMessage().stack; } catch (error) { console.log(error.message); }
|
|
const plain = new Error();
|
|
write(plain, "added");
|
|
console.log(Object.hasOwn(plain, "message"), Object.getOwnPropertyDescriptor(plain, "message").enumerable);
|