Skip to content

Re-run the calls of Struct.[] when its builtin is set or removed - #498

Merged
mame merged 2 commits into
ruby:masterfrom
mame:fix-struct-aref-builtin-rerun
Sep 28, 2026
Merged

mame merged 2 commits into
ruby:masterfrom
mame:fix-struct-aref-builtin-rerun

Conversation

@mame

@mame mame commented Sep 28, 2026

Copy link
Copy Markdown
Member

Follow-up to #491.

Struct.[] is now a builtin set on the method entity rather than a method definition. Unlike adding or removing a definition, setting or removing a builtin does not notify the calls that depend on it. So after an edit like this, Pt[1, 2] kept using the removed builtin:

Pt = Struct.new(:x, :y)   # edited into
Pt = Data.define(:x, :y)
Pt[1, 2]                  # "wrong number of arguments (2 for 0)" instead of an undefined method

This re-runs the calls when the builtin is set or removed.

mame and others added 2 commits September 28, 2026 21:24
Struct.[] is a builtin set on the method entity rather than a method
definition, and assigning a builtin does not notify the calls that
depend on the entity. After editing `Pt = Struct.new(:x, :y)` into
`Pt = Data.define(:x, :y)`, `Pt[1, 2]` still used the removed builtin
and reported "wrong number of arguments (2 for 0)" instead of an
undefined method.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mame
mame enabled auto-merge (rebase) September 28, 2026 13:25
@mame
mame merged commit f3b635a into ruby:master Sep 28, 2026
6 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