mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-21 10:19:03 +03:00
LibRegex: Fix compilation errors on my host machine
I have no idea *why*, but this stopped working suddenly:
return { { .code_point = '-', .is_character_class = false } };
Fails with:
error: could not convert ‘{{'-', false}}’ from
‘<brace-enclosed initializer list>’ to
‘AK::Optional<regex::CharClassRangeElement>
Might be related to 66f15c2
somehow, going one past that commit makes
the build work again, however reverting the commit doesn't. Not sure
what's up with that.
Consider this patch a band-aid until we can find the reason and an
actual fix...
Compiler version:
gcc (GCC) 11.1.1 20210531 (Red Hat 11.1.1-3)
This commit is contained in:
parent
0a7e91329f
commit
939da41fa1
Notes:
sideshowbarker
2024-07-18 12:46:50 +09:00
Author: https://github.com/linusg Commit: https://github.com/SerenityOS/serenity/commit/939da41fa18 Pull-request: https://github.com/SerenityOS/serenity/pull/7836
@ -1423,7 +1423,7 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
auto read_class_atom_no_dash = [&]() -> Optional<CharClassRangeElement> {
|
||||
if (match(TokenType::EscapeSequence)) {
|
||||
auto token = consume().value();
|
||||
return { { .code_point = (u32)token[1], .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = (u32)token[1], .is_character_class = false } };
|
||||
}
|
||||
|
||||
if (try_skip("\\")) {
|
||||
@ -1433,50 +1433,50 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
}
|
||||
|
||||
if (try_skip("f"))
|
||||
return { { .code_point = '\f', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\f', .is_character_class = false } };
|
||||
if (try_skip("n"))
|
||||
return { { .code_point = '\n', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\n', .is_character_class = false } };
|
||||
if (try_skip("r"))
|
||||
return { { .code_point = '\r', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\r', .is_character_class = false } };
|
||||
if (try_skip("t"))
|
||||
return { { .code_point = '\t', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\t', .is_character_class = false } };
|
||||
if (try_skip("v"))
|
||||
return { { .code_point = '\v', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\v', .is_character_class = false } };
|
||||
if (try_skip("b"))
|
||||
return { { .code_point = '\b', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\b', .is_character_class = false } };
|
||||
if (try_skip("/"))
|
||||
return { { .code_point = '/', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '/', .is_character_class = false } };
|
||||
|
||||
// CharacterEscape > ControlLetter
|
||||
if (try_skip("c")) {
|
||||
for (auto c = 'A'; c <= 'z'; ++c) {
|
||||
if (try_skip({ &c, 1 }))
|
||||
return { { .code_point = (u32)(c % 32), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = (u32)(c % 32), .is_character_class = false } };
|
||||
}
|
||||
if (m_should_use_browser_extended_grammar) {
|
||||
for (auto c = '0'; c <= '9'; ++c) {
|
||||
if (try_skip({ &c, 1 }))
|
||||
return { { .code_point = (u32)(c % 32), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = (u32)(c % 32), .is_character_class = false } };
|
||||
}
|
||||
if (try_skip("_"))
|
||||
return { { .code_point = (u32)('_' % 32), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = (u32)('_' % 32), .is_character_class = false } };
|
||||
|
||||
back(2);
|
||||
return { { .code_point = '\\', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '\\', .is_character_class = false } };
|
||||
}
|
||||
}
|
||||
|
||||
// '\0'
|
||||
if (try_skip("0"))
|
||||
return { { .code_point = 0, .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = 0, .is_character_class = false } };
|
||||
|
||||
// HexEscape
|
||||
if (try_skip("x")) {
|
||||
if (auto hex_escape = read_digits(ReadDigitsInitialZeroState::Allow, true, 2); hex_escape.has_value()) {
|
||||
return { { .code_point = hex_escape.value(), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = hex_escape.value(), .is_character_class = false } };
|
||||
} else if (!unicode) {
|
||||
// '\x' is allowed in non-unicode mode, just matches 'x'.
|
||||
return { { .code_point = 'x', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = 'x', .is_character_class = false } };
|
||||
} else {
|
||||
set_error(Error::InvalidPattern);
|
||||
return {};
|
||||
@ -1486,10 +1486,10 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
if (try_skip("u")) {
|
||||
if (auto code_point = read_digits(ReadDigitsInitialZeroState::Allow, true, 4); code_point.has_value()) {
|
||||
// FIXME: While code point ranges are supported, code point matches as "Char" are not!
|
||||
return { { .code_point = code_point.value(), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = code_point.value(), .is_character_class = false } };
|
||||
} else if (!unicode) {
|
||||
// '\u' is allowed in non-unicode mode, just matches 'u'.
|
||||
return { { .code_point = 'u', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = 'u', .is_character_class = false } };
|
||||
} else {
|
||||
set_error(Error::InvalidPattern);
|
||||
return {};
|
||||
@ -1498,7 +1498,7 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
|
||||
if (unicode) {
|
||||
if (try_skip("-"))
|
||||
return { { .code_point = '-', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '-', .is_character_class = false } };
|
||||
}
|
||||
|
||||
if (try_skip("p{") || try_skip("P{")) {
|
||||
@ -1507,21 +1507,21 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
}
|
||||
|
||||
if (try_skip("d"))
|
||||
return { { .character_class = CharClass::Digit, .is_character_class = true } };
|
||||
return { CharClassRangeElement { .character_class = CharClass::Digit, .is_character_class = true } };
|
||||
if (try_skip("s"))
|
||||
return { { .character_class = CharClass::Space, .is_character_class = true } };
|
||||
return { CharClassRangeElement { .character_class = CharClass::Space, .is_character_class = true } };
|
||||
if (try_skip("w"))
|
||||
return { { .character_class = CharClass::Word, .is_character_class = true } };
|
||||
return { CharClassRangeElement { .character_class = CharClass::Word, .is_character_class = true } };
|
||||
if (try_skip("D"))
|
||||
return { { .character_class = CharClass::Digit, .is_negated = true, .is_character_class = true } };
|
||||
return { CharClassRangeElement { .character_class = CharClass::Digit, .is_negated = true, .is_character_class = true } };
|
||||
if (try_skip("S"))
|
||||
return { { .character_class = CharClass::Space, .is_negated = true, .is_character_class = true } };
|
||||
return { CharClassRangeElement { .character_class = CharClass::Space, .is_negated = true, .is_character_class = true } };
|
||||
if (try_skip("W"))
|
||||
return { { .character_class = CharClass::Word, .is_negated = true, .is_character_class = true } };
|
||||
return { CharClassRangeElement { .character_class = CharClass::Word, .is_negated = true, .is_character_class = true } };
|
||||
|
||||
if (!unicode) {
|
||||
// Any unrecognised escape is allowed in non-unicode mode.
|
||||
return { { .code_point = (u32)skip(), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = (u32)skip(), .is_character_class = false } };
|
||||
}
|
||||
}
|
||||
|
||||
@ -1529,12 +1529,12 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
return {};
|
||||
|
||||
// Allow any (other) SourceCharacter.
|
||||
return { { .code_point = (u32)skip(), .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = (u32)skip(), .is_character_class = false } };
|
||||
};
|
||||
auto read_class_atom = [&]() -> Optional<CharClassRangeElement> {
|
||||
if (match(TokenType::HyphenMinus)) {
|
||||
consume();
|
||||
return { { .code_point = '-', .is_character_class = false } };
|
||||
return { CharClassRangeElement { .code_point = '-', .is_character_class = false } };
|
||||
}
|
||||
|
||||
return read_class_atom_no_dash();
|
||||
|
Loading…
Reference in New Issue
Block a user