Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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*)