The with statement
Allegedly part of the language. We checked. We disagree.
A JavaScript engine that has heard enough.
Aimed at edge runtimes, Workers, and servers — eventually. Today, a lexer, parser, and bytecode interpreter chew through a growing slice of ECMAScript and politely decline everything the language has been trying to forget for the last twenty years. No sloppy mode. No with. No HTML-comment syntax. No DOM apologetics.
docs/ROADMAP.md before opening issues. Better yet, don't.
Other engines treat the spec like an all-you-can-eat buffet. Cynic reads it like a contract. If a feature exists only to keep a 2003 webpage from crashing, it's gone. No flags, no opt-ins, no half-measures.
with statementAllegedly part of the language. We checked. We disagree.
The 0o prefix exists for a reason. The bare-leading-zero form does not.
Annex B's sloppy-only function-in-block hoisting is gone. Declare it where it lives.
for-in headAnnex B accident. Doesn't parse here. Hoist your initializer like an adult.
Use encodeURI / encodeURIComponent. They've been correct since 1999.
String.prototype HTML wrappersAll thirteen of them — anchor, bold, fontcolor, … — left at the door. This is a string, not an HTML formatter.
Date.prototype.{getYear, setYear}The two-digit-year ones. Cynic keeps the normative aliases (substr, trimLeft, toGMTString) — these don't make the cut.
Yes, that's real ECMAScript. Yes, we are pretending it isn't.
Out for good. Aligns with SES / Hardened JavaScript, kills the optimization fence, and removes the supply-chain bait. Multi-file scripts use a host hook, not user-reachable.
Locale-aware formatting is a separate runtime project. Date, Number.prototype.toLocaleString, and friends use ISO / C locale and stay that way.
Defeats SES-style isolation. Cynic's edge-runtime hosts are single-agent-per-isolate by design — there's nothing to share memory with.
Stage 4, but a huge surface (Calendar / TimeZone / Instant / PlainDate / …). Its own implementation phase, not a parser opinion. Until then: Date.
Lexer, parser, and bytecode interpreter ship. The runtime is filling in. Generational GC landed; JIT tiers are still future work. Below is what works, what kind-of works, and what Cynic refuses to pretend works yet.
JSGeneratoru/v flagsSymbol & BigInt primitivesArrayBuffer + DataView%TypedArray%.prototype surfaceProxy trapsimport()awaitWeakRef · FinalizationRegistrySet union / intersection / difference / symmetricDifference / isSubsetOf / isSupersetOf / isDisjointFrom · Promise.try · Promise.withResolversIterator.zip · Map/WeakMap upsert--enable=<name> or --enable-experimental; off by default. Each scored as its own isolated test262 sweep.yield* delegation · for await ofIteratorClose on every abrupt path the spec describes[[Get]] ReferenceError on uninit, dynamic import()[[Get]] ReferenceError the spec asked for.awaitreturn f(x) reuses the caller's frame instead of pushing a fresh onelda_property / sta_property / call_method + proto-load; /perf & /profile harness scaffolded
Full per-bucket scoreboard, history, and per-day deltas live in test262-results.md.