mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:47:35 +00:00
LibRegex: Make the bytecode transformation functions static
They were pretty confusing when compared with other non-transforming functions.
This commit is contained in:
parent
f670adb298
commit
addfa1e82e
2 changed files with 12 additions and 13 deletions
|
@ -347,7 +347,7 @@ public:
|
||||||
// LABEL _END = alterantive_bytecode.size
|
// LABEL _END = alterantive_bytecode.size
|
||||||
}
|
}
|
||||||
|
|
||||||
void insert_bytecode_repetition_min_max(ByteCode& bytecode_to_repeat, size_t minimum, Optional<size_t> maximum, bool greedy = true)
|
static void transform_bytecode_repetition_min_max(ByteCode& bytecode_to_repeat, size_t minimum, Optional<size_t> maximum, bool greedy = true)
|
||||||
{
|
{
|
||||||
ByteCode new_bytecode;
|
ByteCode new_bytecode;
|
||||||
new_bytecode.insert_bytecode_repetition_n(bytecode_to_repeat, minimum);
|
new_bytecode.insert_bytecode_repetition_n(bytecode_to_repeat, minimum);
|
||||||
|
@ -381,7 +381,7 @@ public:
|
||||||
extend(bytecode_to_repeat);
|
extend(bytecode_to_repeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void insert_bytecode_repetition_min_one(ByteCode& bytecode_to_repeat, bool greedy)
|
static void transform_bytecode_repetition_min_one(ByteCode& bytecode_to_repeat, bool greedy)
|
||||||
{
|
{
|
||||||
// LABEL _START = -bytecode_to_repeat.size()
|
// LABEL _START = -bytecode_to_repeat.size()
|
||||||
// REGEXP
|
// REGEXP
|
||||||
|
@ -395,7 +395,7 @@ public:
|
||||||
bytecode_to_repeat.empend(-(bytecode_to_repeat.size() + 1)); // Jump to the _START label
|
bytecode_to_repeat.empend(-(bytecode_to_repeat.size() + 1)); // Jump to the _START label
|
||||||
}
|
}
|
||||||
|
|
||||||
void insert_bytecode_repetition_any(ByteCode& bytecode_to_repeat, bool greedy)
|
static void transform_bytecode_repetition_any(ByteCode& bytecode_to_repeat, bool greedy)
|
||||||
{
|
{
|
||||||
// LABEL _START
|
// LABEL _START
|
||||||
// FORKJUMP _END (FORKSTAY -> Greedy)
|
// FORKJUMP _END (FORKSTAY -> Greedy)
|
||||||
|
@ -423,7 +423,7 @@ public:
|
||||||
bytecode_to_repeat = move(bytecode);
|
bytecode_to_repeat = move(bytecode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void insert_bytecode_repetition_zero_or_one(ByteCode& bytecode_to_repeat, bool greedy)
|
static void transform_bytecode_repetition_zero_or_one(ByteCode& bytecode_to_repeat, bool greedy)
|
||||||
{
|
{
|
||||||
// FORKJUMP _END (FORKSTAY -> Greedy)
|
// FORKJUMP _END (FORKSTAY -> Greedy)
|
||||||
// REGEXP
|
// REGEXP
|
||||||
|
|
|
@ -232,7 +232,7 @@ ALWAYS_INLINE bool PosixExtendedParser::parse_repetition_symbol(ByteCode& byteco
|
||||||
maybe_maximum = value.value();
|
maybe_maximum = value.value();
|
||||||
}
|
}
|
||||||
|
|
||||||
bytecode_to_repeat.insert_bytecode_repetition_min_max(bytecode_to_repeat, minimum, maybe_maximum);
|
ByteCode::transform_bytecode_repetition_min_max(bytecode_to_repeat, minimum, maybe_maximum);
|
||||||
|
|
||||||
consume(TokenType::RightCurly, Error::MismatchingBrace);
|
consume(TokenType::RightCurly, Error::MismatchingBrace);
|
||||||
return !has_error();
|
return !has_error();
|
||||||
|
@ -245,7 +245,7 @@ ALWAYS_INLINE bool PosixExtendedParser::parse_repetition_symbol(ByteCode& byteco
|
||||||
consume();
|
consume();
|
||||||
|
|
||||||
// Note: don't touch match_length_minimum, it's already correct
|
// Note: don't touch match_length_minimum, it's already correct
|
||||||
bytecode_to_repeat.insert_bytecode_repetition_min_one(bytecode_to_repeat, !nongreedy);
|
ByteCode::transform_bytecode_repetition_min_one(bytecode_to_repeat, !nongreedy);
|
||||||
return !has_error();
|
return !has_error();
|
||||||
|
|
||||||
} else if (match(TokenType::Asterisk)) {
|
} else if (match(TokenType::Asterisk)) {
|
||||||
|
@ -256,7 +256,7 @@ ALWAYS_INLINE bool PosixExtendedParser::parse_repetition_symbol(ByteCode& byteco
|
||||||
if (nongreedy)
|
if (nongreedy)
|
||||||
consume();
|
consume();
|
||||||
|
|
||||||
bytecode_to_repeat.insert_bytecode_repetition_any(bytecode_to_repeat, !nongreedy);
|
ByteCode::transform_bytecode_repetition_any(bytecode_to_repeat, !nongreedy);
|
||||||
|
|
||||||
return !has_error();
|
return !has_error();
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ ALWAYS_INLINE bool PosixExtendedParser::parse_repetition_symbol(ByteCode& byteco
|
||||||
if (nongreedy)
|
if (nongreedy)
|
||||||
consume();
|
consume();
|
||||||
|
|
||||||
bytecode_to_repeat.insert_bytecode_repetition_zero_or_one(bytecode_to_repeat, !nongreedy);
|
ByteCode::transform_bytecode_repetition_zero_or_one(bytecode_to_repeat, !nongreedy);
|
||||||
return !has_error();
|
return !has_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -956,21 +956,20 @@ bool ECMA262Parser::parse_quantifier(ByteCode& stack, size_t& match_length_minim
|
||||||
ungreedy = true;
|
ungreedy = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteCode new_bytecode;
|
|
||||||
switch (repetition_mark) {
|
switch (repetition_mark) {
|
||||||
case Repetition::OneOrMore:
|
case Repetition::OneOrMore:
|
||||||
new_bytecode.insert_bytecode_repetition_min_one(stack, !ungreedy);
|
ByteCode::transform_bytecode_repetition_min_one(stack, !ungreedy);
|
||||||
break;
|
break;
|
||||||
case Repetition::ZeroOrMore:
|
case Repetition::ZeroOrMore:
|
||||||
new_bytecode.insert_bytecode_repetition_any(stack, !ungreedy);
|
ByteCode::transform_bytecode_repetition_any(stack, !ungreedy);
|
||||||
match_length_minimum = 0;
|
match_length_minimum = 0;
|
||||||
break;
|
break;
|
||||||
case Repetition::Optional:
|
case Repetition::Optional:
|
||||||
new_bytecode.insert_bytecode_repetition_zero_or_one(stack, !ungreedy);
|
ByteCode::transform_bytecode_repetition_zero_or_one(stack, !ungreedy);
|
||||||
match_length_minimum = 0;
|
match_length_minimum = 0;
|
||||||
break;
|
break;
|
||||||
case Repetition::Explicit:
|
case Repetition::Explicit:
|
||||||
new_bytecode.insert_bytecode_repetition_min_max(stack, repeat_min.value(), repeat_max, !ungreedy);
|
ByteCode::transform_bytecode_repetition_min_max(stack, repeat_min.value(), repeat_max, !ungreedy);
|
||||||
match_length_minimum *= repeat_min.value();
|
match_length_minimum *= repeat_min.value();
|
||||||
break;
|
break;
|
||||||
case Repetition::None:
|
case Repetition::None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue