Shorten quantifier operations by using early returns
This commit is contained in:
parent
e338726cde
commit
8b28f3a8c4
1 changed files with 35 additions and 78 deletions
113
lib/src/query.c
113
lib/src/query.c
|
|
@ -467,192 +467,149 @@ static TSQuantifier quantifier_mul(
|
|||
TSQuantifier left,
|
||||
TSQuantifier right
|
||||
) {
|
||||
TSQuantifier result = TSQuantifierZero; // initialized to make compiler happy, but all cases should be covered below!
|
||||
switch (left)
|
||||
{
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZero;
|
||||
break;
|
||||
return TSQuantifierZero;
|
||||
case TSQuantifierZeroOrOne:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZero;
|
||||
break;
|
||||
return TSQuantifierZero;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierOne:
|
||||
result = TSQuantifierZeroOrOne;
|
||||
break;
|
||||
return TSQuantifierZeroOrOne;
|
||||
case TSQuantifierZeroOrMore:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierZeroOrMore:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZero;
|
||||
break;
|
||||
return TSQuantifierZero;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierZeroOrMore:
|
||||
case TSQuantifierOne:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierOne:
|
||||
result = right;
|
||||
break;
|
||||
return right;
|
||||
case TSQuantifierOneOrMore:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZero;
|
||||
break;
|
||||
return TSQuantifierZero;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierZeroOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierOne:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
};
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
return TSQuantifierZero; // to make compiler happy, but all cases should be covered above!
|
||||
}
|
||||
|
||||
static TSQuantifier quantifier_join(
|
||||
TSQuantifier left,
|
||||
TSQuantifier right
|
||||
) {
|
||||
TSQuantifier result = TSQuantifierZero; // initialized to make compiler happy, but all cases should be covered below!
|
||||
switch (left)
|
||||
{
|
||||
case TSQuantifierZero:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZero;
|
||||
break;
|
||||
return TSQuantifierZero;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierOne:
|
||||
result = TSQuantifierZeroOrOne;
|
||||
break;
|
||||
return TSQuantifierZeroOrOne;
|
||||
case TSQuantifierZeroOrMore:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierZeroOrOne:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierOne:
|
||||
result = TSQuantifierZeroOrOne;
|
||||
return TSQuantifierZeroOrOne;
|
||||
break;
|
||||
case TSQuantifierZeroOrMore:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
return TSQuantifierZeroOrMore;
|
||||
break;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierZeroOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierOne:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
case TSQuantifierZeroOrOne:
|
||||
result = TSQuantifierZeroOrOne;
|
||||
break;
|
||||
return TSQuantifierZeroOrOne;
|
||||
case TSQuantifierZeroOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierOne:
|
||||
result = TSQuantifierOne;
|
||||
break;
|
||||
return TSQuantifierOne;
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierOneOrMore:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierZeroOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierOne:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
};
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
return TSQuantifierZero; // to make compiler happy, but all cases should be covered above!
|
||||
}
|
||||
|
||||
static TSQuantifier quantifier_add(
|
||||
TSQuantifier left,
|
||||
TSQuantifier right
|
||||
) {
|
||||
TSQuantifier result = TSQuantifierZero; // initialized to make compiler happy, but all cases should be covered below!
|
||||
switch (left)
|
||||
{
|
||||
case TSQuantifierZero:
|
||||
result = right;
|
||||
break;
|
||||
return right;
|
||||
case TSQuantifierZeroOrOne:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZeroOrOne;
|
||||
break;
|
||||
return TSQuantifierZeroOrOne;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierZeroOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierOne:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierZeroOrMore:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierZeroOrMore:
|
||||
result = TSQuantifierZeroOrMore;
|
||||
break;
|
||||
return TSQuantifierZeroOrMore;
|
||||
case TSQuantifierOne:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierOne:
|
||||
switch (right) {
|
||||
case TSQuantifierZero:
|
||||
result = TSQuantifierOne;
|
||||
break;
|
||||
return TSQuantifierOne;
|
||||
case TSQuantifierZeroOrOne:
|
||||
case TSQuantifierZeroOrMore:
|
||||
case TSQuantifierOne:
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
};
|
||||
break;
|
||||
case TSQuantifierOneOrMore:
|
||||
result = TSQuantifierOneOrMore;
|
||||
break;
|
||||
return TSQuantifierOneOrMore;
|
||||
}
|
||||
return result;
|
||||
return TSQuantifierZero; // to make compiler happy, but all cases should be covered above!
|
||||
}
|
||||
|
||||
// Create new capture quantifiers structure
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue