MORE
#define SEE(c) (MORE() && PEEK() == (c))
while (MORE() && (c = PEEK()) != '|' && c != stop)
assert(!MORE() || SEE(stop));
assert(MORE()); /* caller should have ensured this */
REQUIRE(MORE(), REG_EPAREN);
REQUIRE(MORE() && GETNEXT() == ')', REG_EPAREN);
REQUIRE(MORE(), REG_EESCAPE);
REQUIRE(!MORE() || !isdigit((uch)PEEK()), REG_BADRPT);
if (!MORE())
while (MORE() && PEEK() != '}')
REQUIRE(MORE(), REG_EBRACE);
if (!MORE())
REQUIRE(MORE(), REG_EMPTY);
while (MORE())
while (MORE() && !SEETWO(end1, end2)) {
assert(MORE()); /* caller should have ensured this */
REQUIRE(MORE(), REG_EESCAPE);
if (MORE() && !SEETWO('\\', ')'))
if (MORE() && isdigit((uch)PEEK())) {
while (MORE() && !SEETWO('\\', '}'))
REQUIRE(MORE(), REG_EBRACE);
while (MORE() && isdigit((uch)PEEK()) && count <= DUPMAX) {
while (MORE() && PEEK() != ']' && !SEETWO('-', ']'))
REQUIRE(MORE() && GETNEXT() == ']', REG_EBRACK);
switch ((MORE()) ? PEEK() : '\0') {
REQUIRE(MORE(), REG_EBRACK);
REQUIRE(MORE(), REG_EBRACK);
REQUIRE(MORE(), REG_EBRACK);
REQUIRE(MORE(), REG_EBRACK);
while (MORE() && isalpha((uch)PEEK()))
REQUIRE(MORE(), REG_EBRACK);
while (MORE() && !SEETWO(endc, ']'))
if (!MORE()) {
if (xmtfs & MORE)