Suggestion: Do not fail the whole irep load on an unsupported integer literal - #308
Merged
HirohitoHigashi merged 1 commit intoAug 20, 2026
Conversation
load_irep_1() raised and returned NULL as soon as it saw an IREP_TT_INT64 or IREP_TT_BIGINT pool entry in a build without MRBC_INT64. That error propagates through load_irep() and mrbc_load_irep() up to mrbc_load_mrb(), so one literal the program may never evaluate aborts the load of the entire bytecode chunk and takes every class and method defined in it down with it. Skip the entry instead. Its size is known and does not depend on the integer width: 8 bytes for INT64, and for BIGINT the length byte plus the base byte plus that many digits, which is what conv_bigint() reads. The error moves to mrbc_irep_pool_value(), which runs only when the VM actually fetches the literal. A build that cannot represent the value still cannot use it. Only the code that touches it fails now, instead of everything around it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Background
load_irep_1()raised and returned NULL as soon as it saw anIREP_TT_INT64orIREP_TT_BIGINTpool entry in a build withoutMRBC_INT64.That error propagates through
load_irep()andmrbc_load_irep()up tomrbc_load_mrb(), so one literal the program may never evaluate aborts the load of the entire bytecode chunk and takes every class and method defined in it down with it.Suggestion
Skip the entry instead.
Its size is known and does not depend on the integer width: 8 bytes for INT64, and for BIGINT the length byte plus the base byte plus that many digits, which is what
conv_bigint()reads.The error moves to
mrbc_irep_pool_value(), which runs only when the VM actually fetches the literal.A build that cannot represent the value still cannot use it. Only the code that touches it fails now, instead of everything around it.