You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
test262 class tail — ~211 language/statements + expressions class fails #5345
The largest language gap. language/statements/class = 211 fails (+ a parallel cluster in language/expressions/class).
Reasons (statements)
45× Expected a ReferenceError (TDZ / binding-resolution in class bodies)
37× Expected a TypeError (missed validation negatives)
19× async class-method test failures
12× (no output), 11× missed-negatives
Likely areas
Class static/instance field TDZ, private-field brand checks, super edge cases, async-generator methods, decorator-adjacent semantics. Deep semantics — diminishing returns per fix, but the single biggest language bucket.
Deep semantics with diminishing returns per fix, but the single biggest language bucket. Keeping open as the class tracker; authoritative numbers from scripts/test262_subset.py --dir language/statements/class language/expressions/class.
Opened #5508 for one concrete cluster from the compile-fail bucket: duplicate static field names (static f = …; static f = …;) emitted a redefined @perry_static_…__C__f LLVM global, so clang rejected the whole module. That sank elements/static-field-redeclaration and contributed to static-init-sequence. Fixed by deduping the defining-global emission while still running every initializer in order; added a parity gap test.
Remaining buckets (unchanged, deep semantics):
runtime-fail 199 — top reasons: Expected a TypeError … not thrown (29, missed validation negatives), value is not a function (12), TDZ Expected a ReferenceError (5+), private brand-check negatives, async-method ordering.
compile-fail 16 — also: SWC parse rejections of valid grammar (grammar-static-ctor-*-valid, class x extends x TDZ), name-binding/in-extends-expression* codegen.
Re-measured 2026-06-23 on an internal Linux sweep host (perry 0.5.1204): the persistent class tail is 260 (statements 161, expressions 99). ⚠️ A separate regression (#5579) re-broke ~313 more class tests on current main () — that is tracked in #5579, not here. The true standing gap is refiled concretely as #5592 (accessor-name computed-in, async-gen static methods, private brand checks). Closing in favor of #5592 + #5579.
Correction to the note above: the regression signature in #5579 is the test262 message "m descriptor should be configurable" (class-method property descriptor).
Activity
codegen: enforce derived-ctor this-TDZ on the standalone constructor-…
fix(runtime): hasOwnProperty recognizes class accessors/methods on th…
fix(runtime): class accessor deletion + static-accessor hasOwnProperty (
style: rustfmt the class-reflection fixes (#5345)
fix(class): super-in-static resolution + accessor .name reflection (#…
proggeramlug commentedon Jun 18, 2026
Status update (2026-06-18)
Progress on the class tail since this was filed:
super-in-static resolution + accessor.namereflection.this-TDZ on the standalone constructor-symbol path.No class-tail PR is currently in flight.
Remaining, unchanged:
Expected a ReferenceError 45— TDZ / binding-resolution in class bodiesExpected a TypeError 37— missed validation negativessuperedge cases, async-generator methods, decorator-adjacent semanticsDeep semantics with diminishing returns per fix, but the single biggest language bucket. Keeping open as the class tracker; authoritative numbers from
scripts/test262_subset.py --dir language/statements/class language/expressions/class.proggeramlug commentedon Jun 21, 2026
Re-measured the class tail (
scripts/test262_subset.py --dir language/statements/class language/expressions/class --jobs 7, test2624249661): parity 95.0% — 5099 pass, 56 diff, 199 runtime-fail, 16 compile-fail.Opened #5508 for one concrete cluster from the compile-fail bucket: duplicate static field names (
static f = …; static f = …;) emitted a redefined@perry_static_…__C__fLLVM global, so clang rejected the whole module. That sankelements/static-field-redeclarationand contributed tostatic-init-sequence. Fixed by deduping the defining-global emission while still running every initializer in order; added a parity gap test.Remaining buckets (unchanged, deep semantics):
Expected a TypeError … not thrown(29, missed validation negatives),value is not a function(12), TDZExpected a ReferenceError(5+), private brand-check negatives, async-method ordering.grammar-static-ctor-*-valid,class x extends xTDZ),name-binding/in-extends-expression*codegen.static-init-sequenceneeds interleaved field/static-block ordering (currently all fields then all blocks) — a separate, larger change, not in fix(codegen): #5345 — dedup duplicate static-field LLVM global emission #5508.fix(codegen): #5345 — dedup duplicate static-field LLVM global emissi…
proggeramlug commentedon Jun 23, 2026
Re-measured 2026-06-23 on an internal Linux sweep host (perry 0.5.1204): the persistent class tail is 260 (statements 161, expressions 99).⚠️ A separate regression (#5579) re-broke ~313 more class tests on current main () — that is tracked in #5579, not here. The true standing gap is refiled concretely as #5592 (accessor-name computed-
in, async-gen static methods, private brand checks). Closing in favor of #5592 + #5579.proggeramlug commentedon Jun 23, 2026
Correction to the note above: the regression signature in #5579 is the test262 message "m descriptor should be configurable" (class-method property descriptor).