Skip to content

Jp/send local fix#142

Merged
melkyades merged 2 commits intomainfrom
jp/send-local-fix
May 6, 2026
Merged

Jp/send local fix#142
melkyades merged 2 commits intomainfrom
jp/send-local-fix

Conversation

@melkyades
Copy link
Copy Markdown
Contributor

fix for a hard vm crash when the module loaded by egg does not have a main:. It should just fail with a dnu, but in sending #main: the vm was assuming the #main: symbol always existed and corrupt the state. This PR fixes it (for any sendLocal*)

melkyades added 2 commits May 5, 2026 21:37
Sending a selector that wasn't already interned in the kernel symbol table caused a crash instead of a MessageNotUnderstood, because Runtime::sendLocal_to_* and Evaluator::messageNotUnderstood_ used existingSymbolFrom_, which returns null for unknown selectors. The null was then dispatched as a real symbol and crashed in the lookup machinery.

Switch sendLocal_to_* and the DNU lookup to addSymbol_ so the symbol is created on demand.

ProtoObject>>doesNotUnderstand: now passes the receiver into MessageNotUnderstood so the error has a proper description and isResumable behaves correctly. Main wraps the launcher in a try/catch so a top-level error_ surfaces as a clean "Error: ..." message.

Reproduces with `./egg Tonel`, which previously crashed and now prints `Error: #main: not understood by a TonelModule`.
Evaluator::addUndermessage previously stored entries keyed by null when the corresponding selector wasn't yet interned, so any send whose selector resolved to null collided with a stale undermessage entry (e.g. _remainderTowardZero:). Skip registration in that case.

This is a temporary safeguard; the proper fix is to ensure all undermessage selectors are present in the kernel symbol table at Evaluator construction time.
@melkyades melkyades merged commit a000a4e into main May 6, 2026
4 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