Propagate predicate types to pattern variables#110
Merged
Conversation
78e2a66 to
cf6d2cf
Compare
Previously, all pattern variables (e.g., `in x`, `in [x, y]`) were assigned `Type::Bot`, losing the predicate's type information. Now the predicate VertexId is threaded through the pattern processing chain so variables inherit the correct type. Why: enables type error detection in pattern match bodies (e.g., `case 42; in x; x.upcase; end` now correctly reports an error). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
cf6d2cf to
5c86bba
Compare
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.
Motivation
Pattern variables in
case...inwere always assignedType::Bot, discarding the predicate's type information. This meant type errors inside pattern match bodies went undetected.Changes
predicate_vtxfromprocess_case_match_nodethrough pattern processing chainArray[T]/Hash[K, V]predicates for array/hash/find patternsType::hash()instead ofType::instance("Hash")for consistencyChecked
cargo test --libbundle exec ruby -Ilib -Itest test/pattern_matching_test.rb🤖 Generated with Claude Code