Repository navigation
Releases: KarpelesLab/kataan
Releases · KarpelesLab/kataan
Release list
v0.0.9
Added
- (interrupt) cooperative host interrupt for watchdog deadlines
- (disposal)
await usingsuspends per resource (ROADMAP §3.14) - (intl) per-calendar eras and month names; corpus at 99.99%
- (module) source-phase imports; await-using owes a tick (+5)
- (intl) intl 0.6.0 — all nine list combinations, locale separators (+14)
- (gc) collect during execution at bounded safepoints (+2)
- (intl) CLDR units, calendar fields, hour cycle, locale negotiation (+41)
- (atomics) real multi-agent execution — built-ins/Atomics is green (+21)
- (module) real asynchronous module evaluation (+6)
- (intl) legacy constructor mode, dayPeriod, era year, formatRange (+17)
- (web) documentation and playground published to GitHub Pages
Fixed
- (lib) restore rope's doc comment and alloc gate, fix interrupt intra-doc link
- (ci) repair --all-features and no_std builds, refresh stale Intl/array expectations
- (class) super resolves over the live prototype chain, not the AST
- (array,iterator) 38 conformance bugs; Array.prototype.sort was O(n^2)
- (parser,expr) 19 conformance bugs in strict/expressions/lexical areas
- (builtins) ~25 conformance bugs across Symbol/Reflect/Date/JSON/BigInt
- (regex,string) 31 conformance bugs; bound the start-filter scan
- (test262) resolve harness includes in subdirectories
- (class) a
usingin a static block never disposed - (typed-array) Object.seal on a non-empty typed array must throw
- (array) flatMap iterated a snapshot; make staging measurable
- (rope) remove a debug print left in
materialize - (lexer) a regex may follow the
)of a statement head - (intl) DateTimeFormat formatToParts was missing numbering-system digits
- (intl) collation support is per-language, not a global name list
- (intl) route NumberFormat formatRange through the crate's range support
- (intl) sensitivity "case" is primary strength + case level
- (intl) DisplayNames/supportedValuesOf agreement; -u-tz- alias names (+2)
- (regexp) @@replace must carry WTF-8, and concatenate it canonically
- (parser) carry program text as WTF-8 so lone surrogates survive (+9)
- (realm/temporal) swap intrinsics on realm entry; Table 6 month-day (+17)
- (annexB) per-realm RegExp brand check; B.3.5 for-in initializer (+7)
- (language) const bindings,
oflexing, import.meta, generator steps (+34) - (parse) longest valid prefix in parseFloat; ToInt32 radix in parseInt (+2)
- (web) refresh the conformance figures and derive them all from the ledger
- (builtins) RegExp RepeatMatcher, function metadata, realms, integrity (+31)
- (async) PromiseResolve must observe
constructor; async-generator ticks (+13) - (scope) Annex B.3.3 block-function hoisting is sloppy-only (+6)
- (lexer) a class body's
}ends a statement, so/after it is a regex (+4) - (module) evaluate a deferred import's async dependencies (+8)
- (intl) apply the locale's collation tailoring
- (shape) break the parent/transition reference cycle
- (array) Array.fromAsync suspends at each Await (+4)
- (array) Array.prototype is an Array exotic object (+4)
- (array) ArraySetLength coercion order and [[Set]] result (+2)
- (engine) honour replaced built-in prototype methods (+4)
- (array) generic Array.prototype methods on typed arrays (+6)
- (ci) drop --locked from the Pages build
- (nbvm) sync KNOWN_GLOBALS with the installed global set (+ wasm32 support)
Other
- (for-of) re-rooting the whole item list per iteration was O(n^2)
- (roadmap) §3.14
await usingdisposal must suspend per resource - (roadmap) §5.1 record the constant-factor sweep and closure result
- (nbvm) stop materializing fn name/length on every closure allocation
- (roadmap) §5.0 string iterator drain fixed — it was a duplicate
next - (iterator) the string iterator had a second, unfixed copy of
next - (roadmap) array methods fixed; headline back in step with the ledger
- (array) at/indexOf/lastIndexOf/push were O(n) per call
- (roadmap) §5.0 array methods copy the whole array per call
- (roadmap) §5.0 record the delete/iterator fixes and one open item
- delete was O(n) per call; built-in iterators copied their buffer per step
- (roadmap) §5.0 record the string cluster; name what is still unswept
- (string) slice/substring/indexOf were O(n) per call
- (string) rope-join
concatand template literals - (string) O(1) indexed reads — ASCII fast path + in-place rope flattening
- (string) every property access on a string materialized it
- (regex) AdvanceStringIndex re-transcoded the subject on every call
- (roadmap) §5.2 start filter now covers classes; §5.0 Map/Set is not quadratic
- (regex) extend the start-of-match filter to character classes
- (test262) record why each of the last three failures is not ours
- (roadmap) refresh the headline from 287 ledgered failures to 11
- (web) 99.98% — 51,878 of 51,890, 12 known failures
- (web) 99.97% — 51,876 of 51,890, 14 known failures
- (roadmap) §3.11 — @@replace closed, and the concatenation rule
- (web) 99.96% — 51,871 of 51,890, 19 known failures
- (web) 99.95% — 51,862 of 51,890, 28 known failures
- (deps) intl 0.6.1 — minimumGroupingDigits (+6)
- (intl) relative time is CLDR-backed; raise the harness idle bound
- (web) 99.93% — 51,856 of 51,890, 34 known failures
- (web) 99.91% — 51,842 of 51,890, 48 known failures
- (web) 99.87% — 51,825 of 51,890, 65 known failures
- (web) 99.86% — 51,818 of 51,890, 72 known failures
- (web) 99.86% — 51,816 of 51,890, 74 known failures
- (web) refresh the committed conformance figures
- (deps) intl 0.5.3; fix our numbering-system probe (+10)
- (roadmap) §3.7 records the global-object write-side design
- (roadmap) §5.2 rewritten — regex algorithmic gaps are closed
- (regex) reuse the matcher's working buffers across a scan
- (regex) skip offsets that cannot start a match
- (regex) memoize the subject; fix two nbvm correctness bugs found doing it
- (roadmap) §5.2, the per-call regex subject buffer
- (regex) stop rescanning every position for an anchored pattern
- (deps) intl 0.5.1 -> 0.5.2
- (test262) tell an aborted worker from a hung one; timeout back to 30s
- (test262) raise the hang timeout from 20s to 90s
v0.0.8
Added
- (temporal) astronomical Chinese/Dangi calendars (+5, unbounds the range)
- (intl) CLDR alias tables for BCP-47 extension subtags (+3)
- (regex) Unicode 17 property tables, emoji string properties, spec \s (+~45)
- (engine) per-iteration let, switch TDZ, for-of arguments, tagged-template, optional-chaining, #x in (+17)
- (engine) yield/await in computed property keys (object literals + class members) (+8)
- (engine) class super()/this-binding cell + Function/GeneratorFunction subclassing (+17)
- (engine) Temporal DST duration rounding + IANA links, Array live flatten/map/filter observable order (+21)
- (regex) reverse-lookbehind captures, lossless surrogate ToString, AnnexB legacy parse (+20)
- (intl) wire intl-0.5.1 dangi/umalqura calendars + DateTimeFormat interval & non-Gregorian formatting + getCanonicalLocales aliases (+97)
- (intl) BigInt-exact NumberFormat via puremp::Decimal significant-digits (+4)
- (engine) String-exotic [[DefineOwnProperty]] + curated fixture corrections (+1)
- (engine) lexical-env separation for eval/global declaration-instantiation (+17)
- (engine) Array.fromAsync iterator-driven, RegExp cross-realm brand, ArrayIterator/Proxy-set, destructuring/for-in order (+42)
- (engine) Temporal lunisolar arithmetic, Array sparse mutators, NumberFormat compact, class extends-null/heritage-TDZ (+70)
- (engine) formatRange field-level parts, Date.UTC fp, RegExp lastIndex physical (+12)
- (intl) DateTimeFormat IANA timezone support via the Temporal tz data (+14)
- (realm,module) Gen/AsyncGen proto-from-ctor-realm-prototype + ShadowRealm importValue (+3)
- (module) single-module top-level-await via suspendable coroutine (+3)
- (shadowrealm) genuine realm isolation on the realm-global-swap foundation (+8)
- (realm) swap global_this/global_scope at realm boundaries (+7)
- (realm) cross-realm proto-from-ctor for dynamic Function (+1)
- (module) %AbstractModuleSource% intrinsic (+8)
- (engine) URI encode/decode, matchAll iterator, class constructor order (+31)
- (tdz) for-of/for-in head lexical TDZ (+12)
- (temporal) Duration relativeTo rounding — built-ins/Temporal now 0 fails (+10)
- (engine) Proxy Set/Get receiver preservation + AsyncFunction tag + Object (+25)
- (temporal) DST cross-midnight, IANA canon, NudgeToCalendarUnit, hang fix (+40)
- (temporal) DST/timezone arithmetic — disambiguation, transitions, DST-aware diff (+26)
- (intl) DTF hourCycle/ZDT-toLocaleString + NF exact-decimal + RTF numbering (+39)
- (intl) Islamic/Persian dateStyle for Temporal toLocaleString (+3)
- (language) 3rd contained grind — assignment order, for-of protocol, using decls (+18)
- (array) precise [[Get]]/[[Set]]/[[Delete]] for hole+accessor mutators (+16)
- (array) species-create through Proxy, prototype.length, weak-collection tag (+12)
- (realm) proto-from-ctor-realm — per-realm Intl protos + GetPrototypeFromConstructor (+15)
- (regex) v-flag property-of-strings (Emoji_Keycap_Sequence) + astral group names (+26)
- (intl) smaller-services algorithmic — ListFormat, Collator, localeCompare, numbering (+36)
- (intl) Temporal→DateTimeFormat protocol + toLocaleString + DTF algorithmic (+93)
- (intl) NumberFormat algorithmic — decimal rounding, BigInt/coercion, accounting (+52)
- (intl) re-wire Locale/Intl to intl-0.5 CLDR data + bounded aliases (+22)
- (engine) Promise finally/species, static-block scope, WTF-8 surrogates (+18)
- (engine) scattered code-tail — class extends, live collections, private-on-proxy (+25)
- (realm) cross-realm error identity + ArraySpeciesCreate lookup (+19)
- (atomics) virtual-clock cooperative scheduling for wait/waitAsync (+39)
- (function) source-text .toString() for classes + computed methods (+7)
- (typedarray) resizable-buffer OOB + length-tracking view completion (+31)
- (async-gen) lazy yield* delegation + for-await over sync iterators (+31)
- (language) diffuse tail — regex-literal LT, strict/global bindings, directives (+30)
- (class) diffuse grind — direct-eval private names, private-elem invariants (+42)
- (language) 2nd diffuse grind — lazy IteratorClose destructuring +47 (+48)
- (builtins) diffuse tail — JSON parse-with-source +9, Set +4, unary-wrapper +2 (+18)
- (typedarray,temporal) diffuse grind — TypedArray +19, Temporal ISO +27 (+48)
- (object) diffuse conformance grind — built-ins/Object 67→15 (+52)
- (language) diffuse conformance grind — statements/expressions (+34, 46 fixed)
- (temporal,array) diffuse conformance grind — Temporal ISO +92, Array +53 (+142)
- (temporal) widen Duration to i128 + correctly-rounded total/BigInt→Number (+14)
- (temporal) per-calendar edge fixes — BC round-trip, era validation, month-until overshoot (+181)
- (temporal) harden lunisolar leap-month semantics in the calendar layer (+67)
- (temporal) calendar-aware arithmetic for PlainDateTime/ZonedDateTime/YearMonth (+286)
- (temporal) calendar-aware arithmetic + PlainMonthDay wiring (+152)
- (temporal) non-ISO calendar wiring for ZonedDateTime + PlainYearMonth (+410)
- (temporal) non-ISO calendar wiring for PlainDateTime (+230)
- (temporal) non-ISO calendar layer + PlainDate wiring (+238)
- (async-gen) reify method-call arguments in the step machine (+3)
- (async-gen) spec-shaped request queue + per-await microtask suspension (+7)
- (conformance) implement Iterator.zip / Iterator.zipKeyed proposal (+33)
- (conformance) resizable/growable ArrayBuffer + length-tracking views (§3.8)
- (conformance) GetPrototypeFromConstructor uses newTarget's realm (proto-from-ctor-realm, +45)
- (conformance) implement mapped arguments object ([[ParameterMap]]) (26 → 2, +24)
- (jit) direct generic→generic calls + inline ArrayLen; retire JIT_DESIGN.md
- (jit) direct generic JIT→JIT calls + inline ArrayLen (§2.1 / Pass 6)
- (jit) inline property-SET + array-element GET/SET fast paths (§2.1 Pass 6)
- (jit) inline monomorphic property-GET fast path (§2.1 Pass 6)
- (jit) generic-tier array element access + .length — Pass 5
- (jit) generic-tier function calls (Op::Call / Op::CallNative) — Pass 4
- (jit) generic-tier control flow + comparisons + value arithmetic — Pass 3
- (jit) generic-tier property access (GetProp/SetProp) — Pass 2
- (jit) generic (NanBox) tier substrate — Pass 1, end-to-end generic Add
- (host) §4.3 web platform globals + fix no_std build (FloatExt) (+59 tests)
- (host) §4.5 node-compat builtins — Buffer, path, os, util, querystring, process (+23 tests)
- (wasm) §2.2 reference types + bulk-table + JS-boundary tables (+9 tests)
- (host) §4.1 event loop + timers (setTimeout/Interval/Immediate, nextTick, AbortController)
- (conformance) implement proper tail calls (PTC) on both tiers — un-skip +34
- (test262) $262.agent cooperative scheduler + Atomics.waitAsync
- (conformance) implement $262.createRealm (cross-realm) — un-skip +77
- (conformance) import attributes + assertions + JSON/text modules — un-skip +94
- (conformance) implement class decorators + accessor auto-accessors — un-skip +24
- (conformance) implement IsHTMLDDA (document.all) exotic — un-skip +34
- (temporal) implement Duration relativeTo calendar arithmetic (+124)
- (temporal) Temporal instances are ordinary extensible objects (+31)
- (temporal) PlainDate.toPlainDateTime accepts a time-like (ToTemporalTime)
- (temporal) implement toZonedDateTime on PlainDate + PlainDateTime (+26)
- (temporal) implement Temporal.Now — Temporal fully un-skipped, 3920 pass
- (temporal) implement Temporal.ZonedDateTime — 844/901, corpus 3003→3875 pass
- (temporal) Date.prototype.toTemporalInstant → Temporal.Instant (+8)
- (temporal) subclassing, subclass statics, and valueOf via ToPrimitive (+19)
- (temporal) implement 7 Temporal types — 2984 test262 tests now pass (was 0)
- (temporal) scaffold Temporal (ROADMAP §4) — ISO core + brand + registration + dispatch
- (sab) make SharedArrayBuffer subclassable (class extends SharedArrayBuffer)
- (sab) brand-check SharedArrayBuffer.prototype.slice/grow receiver
- (sab) brand-check SharedArrayBuffer prototype getters + grow receiver
- (sab) validate SharedArrayBuffer length + maxByteLength via ToIndex; un-skip
- (atomics) wait requires a shared buffer — TypeError before arg coercion
- (atomics) BigInt64Array/BigUint64Array read-modify-write
- (atomics) throw TypeError for writing ops on an immutable ArrayBuffer
- (atomics) implement single-agent notify/wait + fix arity/proto; un-skip Atomics
- (tdz) hoist block/script/function let/const/class to TDZ at scope entry
- async-generator yield Awaits its operand (AsyncGeneratorYield) (§async-generators)
- @@asyncDispose then-chains PromiseResolve(return()) → undefined (§async-generators)
- %AsyncIteratorPrototype%[Symbol.asyncDispose] (§async-generators)
- generator instance prototype chain (g.prototype inherits %GeneratorPrototype%) (§generators)
- %GeneratorFunction% / %AsyncGeneratorFunction% constructor objects (§generators)
- distinct %AsyncGeneratorFunction.prototype% / %AsyncGeneratorPrototype% / %AsyncIteratorPrototype% (§async-generators)
- distinct %GeneratorFunction.prototype% / %GeneratorPrototype% for sync generators (§generators)
- Intl.Locale Info API — getCalendars/getCollations/getHourCycles/getNumberingSystems/getTimeZones/getTextInfo/getWeekInfo (§intl402)
- Atomics.pause([N]) — spin-loop hint (§built-ins)
- %IteratorPrototype%[Symbol.toStringTag] get/set accessor (§built-ins)
- (intl) Intl.Locale can be subclassed (§3.9)
- (intl) subclassing for ListFormat/RelativeTimeFormat/Segmenter + fix instance proto (§3.9)
- (intl) Intl.PluralRules can be subclassed (§3.9)
- (intl) Intl.Locale firstDayOfWeek option + accessor (ES2024, §3.9)
- (intl) validate Intl.Locale language/script/region option shapes (§3.9)
- (intl) validate Intl.Locale calendar/collation/numberingSystem options (§3.9)
- (intl) Intl.Locale variants optio...
v0.0.7
Added
- (promise) Promise[Symbol.species] getter → subclass then/catch chaining (§3.6)
- (promise) Promise subclassing — class P extends Promise (§3.6)
Fixed
- (string) String-exotic getOwnPropertyDescriptor + getOwnPropertyNames (§3.6)
- (string) String index properties are enumerable (propertyIsEnumerable) (§3.6)
- (string) String exotic objects expose own index/length to has_own (§3.6)
- (bigint) a BigInt primitive's [[Prototype]] is %BigInt.prototype% (§3.6)
- (typedarray) array-like constructor uses ToLength (empty, not RangeError) (§3.6)
- (array) toSpliced coerces start/deleteCount via ToIntegerOrInfinity (§3.6)
- (array) slice coerces start/end via ToIntegerOrInfinity (§3.6)
- (array) fill/flat/copyWithin coerce index args via ToIntegerOrInfinity (§3.6)
- (array) splice coerces start/deleteCount via ToIntegerOrInfinity (§3.6)
- (array) copyWithin runs spec-precise algorithm for hole/accessor arrays (§3.6)
- (array) reverse runs spec-precise algorithm for hole/accessor arrays (§3.6)
- (array) sort runs spec-precise SortIndexedProperties for hole/accessor arrays (§3.6)
- (arraybuffer) slice allocates via SpeciesConstructor (§3.6)
- (arraybuffer) install ArrayBuffer[Symbol.species] getter (§3.6)
- (proxy) Reflect.set trapless chain to an ordinary getter-only accessor → false (§3.6)
- (string) split ToStrings separator before limit-0; nbvm faults object sep (§3.6)
- (string) String.raw validates template/raw with throwing ToObject (§3.6)
- (string) replace/replaceAll ToString the replacement value (§3.6)
- (functions) Function constructor ToString's its arguments (§3.6)
- (proxy) computed [[Set]] runs parent.[[Set]] through a proxy/setter proto (§3.6)
- (proxy) Reflect.set on a proxy target returns the real [[Set]] boolean (§3.6)
- (with) with-statement HasBinding consults the proxy has trap (§3.5)
- (array) flat/flatMap use ArraySpeciesCreate + CreateDataPropertyOrThrow (§3.6)
- (array) flat/flatMap skip absent array-like indices (HasProperty) (§3.6)
- (array) array holes are absent to
in/HasProperty; flat skips holes (§3.6) - (array) Array.of honors a constructor this (§3.7)
- (proxy) Reflect.set with a proxy receiver writes via [[DefineOwnProperty]] (§3.6)
- (proxy) a proxy write target runs its own [[Set]], not the cell gate (§3.6)
- (proxy) Reflect.ownKeys forwards trapless [[OwnPropertyKeys]] to target (§3.7)
- (proxy) JSON.stringify + getOwnPropertyDescriptors enumerate proxies (§3.7)
- (proxy) object-rest patterns run proxy-aware CopyDataProperties (§3.7)
- (proxy) object spread enumerates a proxy source via its traps (§3.7)
- (proxy) route HasProperty through the proxy trap in array-like iteration (§3.7)
Other
- record the puremp BigInt-backend migration (CHANGELOG + ROADMAP §8)
- (bignum) back BigInt with puremp::Int (§8 reused-crate)
- fix string_exotic_own test —
inon a string primitive throws - (test262) remove 33 now-passing ledger entries (array precise mutators + ArrayBuffer species)
- (test262) remove 30 now-passing ledger entries (Promise subclassing + species)
- fix public->private intra-doc link in promise_state
- (roadmap) note puremp as the BigInt-layer backend candidate (§8)
- lower MSRV to Rust 1.88
- (test262) remove 31 more now-passing ledger entries (49 total this batch)
- (test262) remove 18 now-passing ledger entries (proxy/Array.of/JSON)
- (roadmap) record proxy-conformance progress + refresh pass-rate (§3.7)
Added
- (promise)
class P extends Promise {}subclassing —super(executor)now
runs the executor and backs the (ordinary-object) subclass instance with a
hidden[[PromiseState]]cell thatpromise_statefollows, so construction,
the static combinators (P.resolve/all/race/allSettled/…),then/catch,
await, and microtask delivery all work on a subclass instance (a non-callable
executor is a TypeError). - (promise)
Promise[Symbol.species]— Promise now carries the shared species
getter (returnsthis), soPromise[Symbol.species] === Promise, a subclass
inherits it (class P extends Promise {}→P[Symbol.species] === P), and
then/catchproduce subclass instances via SpeciesConstructor (an explicit
@@speciesoverride is still honored) (ROADMAP §3.6 Promise).
Changed
- (bignum)
BigIntis now backed bypuremp
(the Karpelès Lab pure-Rust multi-precision maths crate) instead of the
in-house arbitrary-precision integer:src/bignum.rsis a thin wrapper
(pub struct BigInt(puremp::Int)) preserving the prior API, soCell::BigInt
and every call site are unchanged. Addeddefault-features = false, features = ["int"](no_std +alloc, MSRV 1.88). Truncateddiv_rem,
two's-complement bit ops,mod_2k(BigInt64Array wrapping), andwrite_radix
map directly; verified against the full bignum test module and the BigInt
Test262 semantics (ROADMAP §8).
Fixed
- (array)
Array.prototype.sortruns the spec-preciseSortIndexedProperties
when the array has hole or accessor-override indices: it collects present
elements via[[Get]](index getters fire), sorts them, writes the sorted
values back via[[Set]](setters fire), andDeletePropertyOrThrows the
trailing indices. Dense arrays and typed arrays keep the fast in-memory sort
(ROADMAP §3.6). - (arraybuffer)
ArrayBuffer[Symbol.species]getter is installed (returns
this, so a subclass inherits it), andArrayBuffer.prototype.sliceallocates
its result viaSpeciesConstructor(O, %ArrayBuffer%)— a subclass instance for
a subclass receiver, a non-constructor species is a TypeError, and the result
is validated as a distinct ArrayBuffer of sufficient length (ROADMAP §3.6). - (string)
String.prototype.splitrunsToString(separator)before the
limit === 0short-circuit (a throwing separatortoStringthrows even at
limit 0), and the bytecode VM faults an object/Symbol/wrapper separator (or an
objectlimit) to the tree-walker so a customtoString/@@splitand RegExp
delegation are honored — previously"axbxc".split({toString:()=>"x"})did not
split undernbvm(ROADMAP §3.6, §6 two-engines-one-truth). - (string)
String.rawuses throwingToObjecton the template and on
Get(template, "raw")(anull/undefinedor a non-objectrawthrows
TypeError), and readsrawviaGetso an inherited getter fires and its
throw propagates — previously all silently succeeded (ROADMAP §3.6). - (string)
String.prototype.replace/replaceAllToStringthe replacement
value and the function-replacer's result (a customtoString/@@toPrimitive
runs and a thrown value propagates) instead of rendering"[object Object]"
(ROADMAP §3.6). - (functions) the
FunctionconstructorToStrings each argument
(CreateDynamicFunction): a customtoString/valueOfruns and a thrown value
propagates —new Function({toString(){throw 1}}, "")throws1instead of
stringifying to"[object Object]"and failing to parse (ROADMAP §3.6). - (proxy) a computed write (
o[k]=v,arr[i]=v) whose own slot is absent
now runsparent.[[Set]]— an inherited setter, or a proxy on the prototype
chain, handles it (with Receiver = the object) — matching the dot-key
assign_memberpath. SoObject.setPrototypeOf(arr, proxyWithSetTrap); arr[0]=v
fires the trap instead of silently creating an own index. Default-%Array. prototype%arrays and present indices keep the dense fast path (ROADMAP §3.6). - (with) the
withobject-environmentHasBindingis a proxy-aware
HasProperty, sowith (new Proxy(o, {has(){…}})) { name }consults thehas
trap (a trapless proxy forwards to its target) instead of throwing a spurious
ReferenceError;@@unscopablesstill applies (ROADMAP §3.5). - (array) sparse-array holes are absent to
in/HasProperty: the proxy-
aware[[HasProperty]]used a barei < lengthtest that reported a hole as
present, so1 in [2,,3],0 in new Array(3),[2,,3].hasOwnProperty(1),
and the generic array-like iteration (forEach/map/… presence probe) all
counted holes. Now hole-aware (viahas_own).Array.prototype.flat/
flatMapalso skip holes (FlattenIntoArray uses HasProperty) (ROADMAP §3.6). - (array)
Array.prototype.flat/flatMapon a generic array-like skip absent
indices per FlattenIntoArray's HasProperty check (so a poisoned getter past
lengthis never read), andflatMappasses the source object as the
callback's 3rd argument (ROADMAP §3.6). - (array)
Array.prototype.flat/flatMapbuild the result with
ArraySpeciesCreate(O, 0)+CreateDataPropertyOrThrow— a non-constructor
@@species(or a non-extensible/non-configurable target) now throws a
TypeError, and a subclass species is honored (ROADMAP §3.6). - (array)
Array.ofhonors a constructorthis(Array.of.call(C, …)/
subclassC.of(…)) —Construct(C, «len»)+CreateDataPropertyOrThrow—
instead of always building a plain%Array%(ROADMAP §3.7). - (proxy) route HasProperty through the proxy
hastrap in generic
array-like iteration, so[...new Proxy([1,2,3],{})],Array.from(proxy),
andArray.prototype.*.call(proxy, …)observe the proxied elements instead
of reading holes (ROADMAP §3.7). - (proxy) object spread (
{...proxy}, CopyDataProperties) enumerates a proxy
source through itsownKeys/getOwnPropertyDescriptor/gettraps (strings
and symbols, enumerable only) instead of copying nothing (ROADMAP §3.7). - (proxy) object-rest patterns (
{...rest}in a binding, assignment target,
function parameter, or generator step) run the same proxy-aware
CopyDataProperties, sharing onecopy_data_propertieshelper; this also fixes
symbol own keys being dropped from object rest on ordinary objects. - (proxy)
JSON.stringifyenumerates a proxy through i...
v0.0.6
Added
- (embed) host-function registration API — register_fn + Ctx (§4.0 M1)
Other
- (roadmap) plan the host-function registration / embedding API (§4.0)
- add CI, crates.io, docs.rs, and MIT license badges to README
Added
- (embed) host-function registration API —
Interp::register_fn/
register_global_fn+Ctx(ROADMAP §4.0 milestone 1): register a Rust
closure as a first-class JS function with spec-shapedname/length, build
values, read/write properties, throw catchable errors, coerce arguments, and
re-enter JS. Backed by a newCell::HostFnregistry cell; self-reentrancy is
a cleanTypeError.
v0.0.5
Added
- (generator) suspend on yield in for-of/for-in assignment-target patterns
- (generator) suspend on yield in a destructuring member-target key
- (generator) suspend on yield in destructuring-assignment defaults
- (generator) suspend on yield inside object literals
- (generator) suspend on yield inside array literals
- (builtins) Array and Object are real callable function cells
- (modules) import-defer — exotic-object edges, super/this fixes (+ general)
- (modules) import-defer proposal (core: static
import defer * as ns) - (arraybuffer) immutable-arraybuffer proposal
- (promise) Promise.allKeyed / allSettledKeyed (await-dictionary proposal)
- (object) Symbol/BigInt wrapper objects (ToObject)
- (eval) new.target valid in direct eval inside function code
- (iterators) real %RegExpStringIteratorPrototype% for matchAll
- (iterators) real per-kind iterator prototypes (Array/String/Map/Set)
- (class) TDZ for
thisin derived constructors (must call super) - (functions) formal-parameter TDZ (self/forward default reference)
- (functions) separate parameter and body environments
- (eval) EvalDeclarationInstantiation param/arguments conflict
- (eval) direct eval inherits the caller's super (home object)
- (eval) completion values carried through break/continue
- (eval) proper statement completion values (UpdateEmpty)
- (intl) Intl.PluralRules conformance
- (intl) Intl.DurationFormat conformance (+ NumberFormat -0/option fixes)
- (intl) Intl.RelativeTimeFormat conformance
- (intl) Intl.ListFormat conformance
- (class) lexically-scoped private names (#x)
- (modules) module completeness pass (parser, async, namespace, early errors)
- (modules) ES module system + dynamic import()
- (language) explicit resource management (using / await using)
- (builtins) complete getOrInsert/getOrInsertComputed (upsert)
- (builtins) Promise.try (ES2025)
- (builtins) Error.prototype.stack accessor
- (builtins) FinalizationRegistry, WeakRef.prototype.deref, Symbol.prototype
- (builtins) Math.sumPrecise + fix no_std build
- (regex) early errors for inline modifier groups (?ims-ims:)
- (array) property descriptors on indices + length (ArraySetLength)
- (builtins) Error.isError (ES2025) with [[ErrorData]] brand
- (regex) reject invalid \p{…} property escapes as SyntaxError
- (regex) parse-time literal validation + structural early errors
- (builtins) Uint8Array base64/hex (ES2025)
- RegExp.escape + async yield* requires Object iterator
- (async) async yield* delegation (async-iterator protocol)
- (builtins) Array.fromAsync
- (builtins) batch 13 part 2b — Array/RegExp/TypedArray conformance
- (builtins) batch 13 part 2a — Promise/JSON/Object conformance
- (builtins) batch 12 part 2 — String/TypedArray/DataView/Date conformance
- (builtins) sparse-array holes + ES2025 Map/Set conformance
- (nbexec) true lazy async/await with microtask ordering
- (nbexec) wire lazy generators into call/dispatch/iteration
- (nbexec) true lazy generators — explicit-stack suspension engine
- (nbexec) DisposableStack, AsyncDisposableStack, ShadowRealm + SuppressedError
- (intl) real branded .prototype for every Intl service + Locale/DurationFormat
- (intl) realm prototype cache + dispatch wiring for Intl branding
- (nbexec) native subclassing — class extends Map/Array/typed/Date/…
- (nbexec) GetPrototypeFromConstructor for built-in constructors
- (intl) spec-accurate option validation + resolvedOptions for NumberFormat/DateTimeFormat
- (intl) add Intl.getCanonicalLocales + Intl.supportedValuesOf
- (regex) inline modifiers, v-flag unicodeSets, CI word/property + XID
- (builtins) Array/Function/arguments conformance sweep (batch 9 part 2)
- (annexB) escape/unescape, String HTML methods, Date legacy, RegExp compile + legacy statics
- (builtins) Object/Iterator/Proxy/Reflect conformance sweep (batch 8 part 2)
- (typedarray) detachArrayBuffer native + ArrayBuffer/DataView/TypedArray conformance
- (regexp) ES2022
d-flag match indices (MakeIndicesArray) - (regexp) first-class RegExp.prototype + spec-compliant exec/symbol methods (nbexec)
- (builtins) TypedArray of/from prototype link + spec-faithful from
- (builtins) spec-compliant TypedArray set + subarray (offset ToInteger, species)
- (builtins) TypedArraySpeciesCreate for map/filter/slice; fix construct return
- (builtins) DataView/TypedArray/ArrayBuffer prototype & ctor conformance
- (class) support extending an ordinary function (class X extends fn)
- (super) computed super member access, assignment, and delete
- (assignment) NamedEvaluation for plain identifier assignment
- (global) unify global-object properties and global var bindings
- (class) own name/length + static members as real own properties
- (builtins) Promise/Map/Set/Function/Reflect/Proxy sweep + regression cleanup (batch 6)
- (with) implement the with statement (object environment record)
- (destructuring) NamedEvaluation for binding/param defaults
- (class) inherit methods via prototype + VM prototype-chain reads
- (class) materialize class .prototype with methods/accessors
- (builtins) Array/Object/TypedArray conformance sweep (batch 5)
- (date) Date.prototype[Symbol.toPrimitive] + OrdinaryToPrimitive helper
- (iterator) add the Iterator global, %IteratorPrototype%, and helpers
- (typed-arrays) add BigInt64Array and BigUint64Array
- (nbexec) real eval() and the Function constructor (dynamic code)
- (regex) reject quantifiers on non-quantifiable assertions
- (regex) SyntaxError for invalid group names, duplicate names, bad refs, and u-mode strictness
- (parser) optional-chain tagged template + new.target placement
- (parser) destructuring-target early errors
- (parser) illegal break/continue/return early errors
- (parser) invalid assignment/update targets + strict binding names
- (parser) early-error validation pass for class & private-name rules
- (regex) full Unicode property escapes \p{…}/\P{…} (u-flag)
- (typedarray) add shared %TypedArray% intrinsic constructor hierarchy
- (engine) typed-error API for conformance checking
- (limits) add dedicated max_eval_depth knob (C2 follow-up)
Fixed
- (yield)* propagate an abrupt IteratorClose when forwarding throw to a throw-less iterator
- (yield)* pass the inner result object through; don't read value when incomplete
- (super) RequireObjectCoercible on the super base for object methods
- (proxy) forward trapless has/delete to a proxy target recursively
- (proto) validate the proto setter like SetPrototypeOf
- (Object.prototype) ToObject(this) in hasOwnProperty/propertyIsEnumerable/isPrototypeOf
- (JSON.parse) reject unescaped control characters in strings
- (compound-assign) capture the identifier reference before the RHS
- (with) lexically scope the with-statement object environment
- (parser) allow
letas identifier in for-in left-hand side - (promise) Promise.resolve/reject use NewPromiseCapability for custom C
- (parser) array/object literal contents are [+In] inside a for-header
- (regex) properties of strings are an early error in invalid positions
- (parser/eval) strict-reserved words as sloppy ident refs; direct eval inherits caller strictness
- (Object.assign) spec CopyDataProperties — key order, enumerability, errors
- (Object.assign) Set with Throw + read-only string indices
- (class) PrivateSet on a private method/accessor throws TypeError
- (assignment) ToPropertyKey before RHS in compound member assignment
- (annexB) spec-correct defineGetter/Setter & lookupGetter/Setter
- (iterator) tag boxed String wrapper's @@iterator prototype
- (class) evaluate computed member keys eagerly at class definition
- (nbvm) no-init
varre-declaration must not clobber the binding - (with) bare-name delete + NaN/undefined/Infinity resolve via with-object
- (regex) reject \p{…} property class as a range endpoint under u
- (regex) reject character-class range with low > high
- (regex) reject braced quantifier with nothing to repeat (Annex B)
- (annexB/global) preserve existing global binding + non-configurable decls
- (annexB) B.3.4 if/else function gets its own block binding
- (annexB) B.3.3 block-function hoisting through catch + switch
- (array) spec-conformant Array.prototype.concat
- (async) await adopts thenables (PromiseResolve semantics)
- (async) class async methods + async-generator promise results
- (class) super in static/field initializers + static field/method redecl
- (annexB) spec-accurate B.3.3/B.3.4 block-level function semantics
- (nbvm) route
for awaitto the tree-walker (no bytecode await machinery) - (destructuring,with) array GetIterator honors Symbol.iterator; with-statement var initializer
- (operators,names) ToNumber via ToPrimitive for update/unary-plus; accessor & class property names
- (fn) scope %ThrowTypeError% caller/arguments poison to restricted functions
- (intl) spec-accurate useGrouping + currency/unit/fraction-digit validation
- (nbexec) computed property keys use ToPropertyKey (throws on uncoercible)
- (nbexec) computed-key method call on a primitive boxes the receiver
- (nbexec) with-binding call this + method-call nullish-base order
- (nbexec) arrow functions capture lexical this/new.target/home at definition
- (nbexec) object-literal proto primitive ignored + super getter receiver this
- (nbexec) BigInt operators unwrap object operands before type-mixing check
- (nbexec) spec evaluation order for compound assignment to member targets
- (nbexec) unresolvable compound-assignment / identifier read throws ReferenceError
- (nbexec) destructuring-assignment target reference evaluated before iterator step
- (nbexec) object-destructuring boxing + delete on globals/non-references
- (nbexec) spec-correct IteratorClose + array-destructuring iterator pro...
v0.0.4
Fixed
- (typed-array) validate view/DataView bounds + checked offset math
- (nbexec) L1 — ArrayBuffer.prototype.transfer(n) caps length via validate_alloc_len
- (nbexec) C2 — guard tree-walk recursion depth to avoid native stack overflow
- (arrays) C1 — throw RangeError on oversized array element write / length set
- (realm) C1 cap dense-array growth; M3 skip frozen-set probes
Other
- (typed-array) bulk byte ops for fill/copyWithin/set + alloc-free encode
- (regex) build the scalar adapter program lazily (RE-P2)
- (regex) cache the compiled Regex on the RegExp cell (RE-P1)
- (string) P1/P3/P5/P6 — stop double-flattening strings, borrow leaf bytes, run UTF-16 counts
- (wasm) cache decoded Module + cut per-call memory copies at JS↔wasm boundary
- (nbvm) M4 — borrow array backing for pure-scan builtins; tests
- (nbvm) H2 — gate regexp probe on key in GetProp hot path
- (realm) P4 byte-exact string comparison; add tests for C1/H3/P4/P2
- (realm) H3 truthy tests emptiness without materializing the string
- (rope/realm) P2 zero-copy leaf-byte borrow fast path
- (bytecode) verifier rejects LoadConst with a raw heap handle (M3)
v0.0.3
Added
- (strings) B5 — surrogate-aware case + normalize (#12)
- (strings) B4 — wire regex builtins to the UTF-16 code-unit engine (#12)
- (strings) B2/B3 — surrogate-correct string evaluation and UTF-16 ops
- (strings) B2 — carry string-literal cooked values as WTF-8 bytes
- (ffi) embedder buffer-creation API — owned + external (A6, #11)
- (wasm) WebAssembly.Memory shares one byte store with JS (A5, #11)
- (wtf8) WTF-8 string-storage foundation (B1)
- (cell) add Cell::Bytes byte store + TypedArray view variant (A1)
Fixed
- (typedarrays) stable/shared .buffer object + restore wasm_bytes over byte stores
Other
- (regex) fix broken intra-doc links in module docs
- (regex) match over UTF-16 code units with JS u-flag semantics [B4-engine]
- (wtf8) fix broken intra-doc links in rope/atom/wtf8 module docs
- (typedarrays) real byte-backed ArrayBuffer/TypedArray/DataView (A2/A3/A4)
v0.0.2
Added
- (object) dictionary-mode objects to bound shape-tree growth (MEM-3)
- (limits) add configurable Limits; migrate caps to read from Realm
- (math) drop fixed Math.random seed; entropy-mix the fallback
- (math) seed Math.random from purecrypto's OS CSPRNG
- (math) back Math.random with xorshift128+ (was xorshift64)
Fixed
- (wasm) configurable limits, fuel metering, multi-byte blocktype (WASM-6/7/9)
- (nbvm) collect subject chars once in regex match/split loops (RE-7)
- (regex) collect subject chars once per match/replace/split loop (RE-7)
- (rng) don't let OsRng panic abort Interp::new; fall back to entropy mix (RNG-1)
- (bigint) cap asUintN/asIntN/** bit-size to prevent allocation bomb (MEM-6)
- (regex) tighten backtracking budget + share it across starts; add char-slice match API (RE-8, RE-7)
- (regex) avoid exponential compile-time blowup for nested unbounded quantifiers (RE-9)
- (nbvm) cap repeat + guard compiler register overflow (NBVM-1/NBVM-2)
- (flatbc) read untrusted program via fs::read, drop mmap (VM-9)
- (bytecode) verify untrusted load paths, bound allocs, drop mmap (VM-7/8/9)
- (snapshot) SNAP-3 read snapshot file instead of mmap (SIGBUS hazard)
- (wasm) use checked_add for element-segment slot index (WASM-8)
- (heap) clamp free-path generation below compaction range (MEM-4)
- (parser) guard recursion in parse_new/parse_exponent/parse_class (PARSE-2/3/4)
- (date) parse_iso_date panics on malformed/non-ASCII input (EXEC-7)
- (lint) satisfy clippy + rustdoc + rustfmt gates
Other
- (limits) end-to-end config-override regression test
- (snapshot) validate restored func_id against a recorded bound (SNAP-2)
v0.0.1
chore: Release package kataan version 0.0.1