Skip to content

Merge train: #9944, #9945, #9946, #9947, #9948 - #9959

Merged
proggeramlug merged 9 commits into
mainfrom
train141
Sep 7, 2026
Merged

Merge train: #9944, #9945, #9946, #9947, #9948#9959
proggeramlug merged 9 commits into
mainfrom
train141

Conversation

@proggeramlug

Copy link
Copy Markdown
Contributor

Merge train: #9944, #9945, #9946, #9947, #9948. All five cherry-picked without a conflict.

#9946 — a class-identity bug with a real victim

A function-local class Definition extends Error {} produces a fresh class object on every evaluation but shares a single compile-time class id. The class registry is keyed by that id and is necessarily last-wins, so a constructor factory that later evaluates the same declaration with an Object parent retroactively broke instanceof Error for instances created earlier. Zod's $constructor has exactly that shape: a ZodError failed instanceof Error while getPrototypeOf still reported ZodError → Error → Object.

Two prototype-resolution paths disagreeing about one chain is a known weak area here, and the fix takes the right side of it — the instance's recorded evaluation prototype is authoritative over the shared-id registry entry.

The rest

Validation

run_lint_gates: all 67 gates passed; 2 CI-only skipped (67 — #9947 adds one)

suite passed failed
perry-runtime 3265 0
perry-codegen 1941 0
perry-hir 630 0
perry-stdlib 132 0

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.

2 participants