- regbranch - one alternative of an | operator * * Implements the concatenation operator. */
| 375 | * Implements the concatenation operator. |
| 376 | */ |
| 377 | static char * |
| 378 | regbranch( int *flagp ) |
| 379 | { |
| 380 | register char *ret; |
| 381 | register char *chain; |
| 382 | register char *latest; |
| 383 | int flags; |
| 384 | |
| 385 | *flagp = WORST; /* Tentatively. */ |
| 386 | |
| 387 | ret = regnode(BRANCH); |
| 388 | chain = NULL; |
| 389 | while (*regparse != '\0' && *regparse != ')' && |
| 390 | *regparse != '\n' && *regparse != '|') { |
| 391 | latest = regpiece(&flags); |
| 392 | if (latest == NULL) |
| 393 | return(NULL); |
| 394 | *flagp |= flags&HASWIDTH; |
| 395 | if (chain == NULL) /* First piece. */ |
| 396 | *flagp |= flags&SPSTART; |
| 397 | else |
| 398 | regtail(chain, latest); |
| 399 | chain = latest; |
| 400 | } |
| 401 | if (chain == NULL) /* Loop ran zero times. */ |
| 402 | (void) regnode(NOTHING); |
| 403 | |
| 404 | return(ret); |
| 405 | } |
| 406 | |
| 407 | /* |
| 408 | - regpiece - something followed by possible [*+?] |