Skip to content

Build TABLESWITCH from sorted arrays in SWITCH#518

Open
rootvector2 wants to merge 1 commit into
apache:masterfrom
rootvector2:switch-tableswitch-sorted-arrays
Open

Build TABLESWITCH from sorted arrays in SWITCH#518
rootvector2 wants to merge 1 commit into
apache:masterfrom
rootvector2:switch-tableswitch-sorted-arrays

Conversation

@rootvector2

Copy link
Copy Markdown
Contributor

SWITCH clones the caller's match/targets arrays and sorts only the clones, but the TABLESWITCH branch fills the table from the original unsorted match/targets, while the LOOKUPSWITCH branch uses matchClone/targetsClone. When the match array is passed unsorted (the class javadoc documents unsorted input and promises to leave the caller's arrays unaltered) and its sorted form is gap-free, the fill loop runs over unsorted keys, so the generated TABLESWITCH gets out-of-order case values padded with default entries. TABLESWITCH.dump then writes low = match[0] and high = match[last] that disagree with the count of offset words emitted, and re-reading the dumped instruction consumes only high - low + 1 offsets, reinterpreting the surplus words as the next instructions.

Fill the table from matchClone/targetsClone to match the LOOKUPSWITCH branch. Found while auditing the switch-generation paths.

  • Read the contribution guidelines for this project.
  • Read the ASF Generative Tooling Guidance if you use Artificial Intelligence (AI).
  • I used AI to create any part of, or all of, this pull request. Which AI tool was used to create this pull request, and to what extent did it contribute?
  • Run a successful build using the default Maven goal with mvn; that's mvn on the command line by itself.
  • Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible, but it is a best practice.
  • Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • Each commit in the pull request should have a meaningful subject line and body. Note that a maintainer may squash commits during the merge process.

The TABLESWITCH branch filled the table from the caller's unsorted match/targets arrays instead of the sorted clones the LOOKUPSWITCH branch uses, so an unsorted match array produced a table with out-of-order case values and a low/high header that disagrees with the emitted offset count.
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