LibRegex: Use proper CharRange constructor instead of bit_casting

Otherwise the range order would be inverted.
This commit is contained in:
Ali Mohammad Pur 2022-07-05 04:56:21 +04:30 committed by Andreas Kling
parent c774790975
commit 7d01ee63d6
Notes: sideshowbarker 2024-07-17 09:42:17 +09:00
2 changed files with 3 additions and 2 deletions

View file

@ -922,6 +922,7 @@ TEST_CASE(optimizer_atomic_groups)
Tuple { "a+b"sv, "aaaaa"sv, false },
Tuple { "\\\\(\\d+)"sv, "\\\\"sv, false }, // Rewrite bug turning a+ to a*, see #10952.
Tuple { "[a-z.]+\\."sv, "..."sv, true }, // Rewrite bug, incorrect interpretation of Compare.
Tuple { "[.-]+\\."sv, ".-."sv, true },
// Alternative fuse
Tuple { "(abcfoo|abcbar|abcbaz).*x"sv, "abcbarx"sv, true },
Tuple { "(a|a)"sv, "a"sv, true },

View file

@ -187,7 +187,7 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa
lhs_negated_char_classes.set(static_cast<CharClass>(pair.value));
break;
case CharacterCompareType::CharRange: {
auto range = bit_cast<CharRange>(pair.value);
auto range = CharRange(pair.value);
if (!current_lhs_inversion_state())
lhs_ranges.insert(range.from, range.to);
else
@ -257,7 +257,7 @@ static bool has_overlap(Vector<CompareTypeAndValuePair> const& lhs, Vector<Compa
return true;
break;
case CharacterCompareType::CharRange: {
auto range = bit_cast<CharRange>(pair.value);
auto range = CharRange(pair.value);
if (!current_lhs_inversion_state() && range_contains(range))
return true;
break;