Skip to content

[TS] Preserve independent bodies of classes with unsupported definitions - #446

Merged
CaelmBleidd merged 2 commits into
neofrom
caelmbleidd/ts-class-admission
Oct 16, 2026
Merged

CaelmBleidd merged 2 commits into
neofrom
caelmbleidd/ts-class-admission

Conversation

@CaelmBleidd

@CaelmBleidd CaelmBleidd commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Class definitions with computed names or unresolved runtime bases currently remove the entire class DTO, including independent method bodies. This became reachable through unsupportedClassDeclarationReason in #443 and rejected 23 previously admitted TS200 targets.

Retain ordinary named bodies and fields for analysis on an existing symbolic receiver. Keep the module declaration, runtime class value/exports, constructor and instance/static lifecycle explicitly unsupported. Computed members never become %computed storage. Initializer closures retain body metadata while their executable initialization and captured-environment construction remain blocked.

Dependent member/prototype operations produce explicit unsupported values. Receiver checks cover union/intersection types, apparent types, generic constraints, nullable receivers and transparent casts. Own data fields remain accessible when unevaluated computed string keys cannot redefine them.

Validation:

  • 53 focused frontend regressions passed (classes.spec.ts and partial-class-bodies.spec.ts), including a concrete TypeScript comparison for an independently entered pure body.
  • Two production generateEtsIR → JSON → JacoDB model integration regressions passed.
  • Frontend checks on all 23 unchanged original acquisition sources restored 23 class declarations with explicit unsupported lifecycle barriers. Twenty targets have ordinary method bodies: 15 have at least one body without a frontend raw fallback, while five retain prefix/barrier bodies only. Neither category establishes successful symbolic execution. GridCollection, ReturnRunCommandNode and WithClass are closure-only: retained metadata does not establish standalone symbolic startup or a valid captured environment. The initial three negative checks remain saved separately.
  • Frontend typecheck/build and git diff --check passed. No full test suite or new TS200 campaign was run; no concrete coverage or constructor lifecycle support is claimed.

This PR targets neo independently and changes no USVM code. It does not duplicate the runtime closure-owner fix in #444.

@github-actions

Copy link
Copy Markdown
Contributor

Test Results

  249 files  +1    249 suites  +1   16m 27s ⏱️ -15s
  902 tests +2    890 ✅ +2  12 💤 ±0  0 ❌ ±0 
2 172 runs  +2  2 122 ✅ +2  50 💤 ±0  0 ❌ ±0 

Results for commit 844a6cd. ± Comparison against base commit 7db549e.

@CaelmBleidd
CaelmBleidd merged commit 8316e19 into neo Oct 16, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant