| 1506 | } |
| 1507 | |
| 1508 | void* fxDisjunctionParse(txPatternParser* parser, txInteger character) |
| 1509 | { |
| 1510 | txDisjunction* result = NULL; |
| 1511 | txTerm* left = NULL; |
| 1512 | txTerm* right = NULL; |
| 1513 | txCapture** leftNamedCaptureAddress = (parser->lastNamedCapture) ? &(parser->lastNamedCapture->nextNamedCapture) : &(parser->firstNamedCapture); |
| 1514 | result = fxSequenceParse(parser, character); |
| 1515 | if (parser->character == '|') { |
| 1516 | txCapture** rightNamedCaptureAddress = (parser->lastNamedCapture) ? &(parser->lastNamedCapture->nextNamedCapture) : &(parser->firstNamedCapture); |
| 1517 | txCapture* leftNamedCapture = *leftNamedCaptureAddress; |
| 1518 | *leftNamedCaptureAddress = C_NULL; |
| 1519 | |
| 1520 | fxPatternParserNext(parser); |
| 1521 | left = (txTerm*)result; |
| 1522 | right = fxDisjunctionParse(parser, character); |
| 1523 | result = fxPatternParserCreateTerm(parser, sizeof(txDisjunction), fxDisjunctionMeasure); |
| 1524 | result->left = left; |
| 1525 | result->right = right; |
| 1526 | |
| 1527 | *rightNamedCaptureAddress = *leftNamedCaptureAddress; |
| 1528 | *leftNamedCaptureAddress = leftNamedCapture; |
| 1529 | } |
| 1530 | if (parser->character != character) |
| 1531 | fxPatternParserError(parser, gxErrors[mxInvalidSequence]); |
| 1532 | return result; |
| 1533 | } |
| 1534 | |
| 1535 | void* fxModifiersParse(txPatternParser* parser) |
| 1536 | { |
no test coverage detected