| 1663 |
{ |
{ |
| 1664 |
BOOL empty_branch; |
BOOL empty_branch; |
| 1665 |
if (GET(code, 1) == 0) return TRUE; /* Hit unclosed bracket */ |
if (GET(code, 1) == 0) return TRUE; /* Hit unclosed bracket */ |
| 1666 |
|
|
| 1667 |
/* If a conditional group has only one branch, there is a second, implied, |
/* If a conditional group has only one branch, there is a second, implied, |
| 1668 |
empty branch, so just skip over the conditional, because it could be empty. |
empty branch, so just skip over the conditional, because it could be empty. |
| 1669 |
Otherwise, scan the individual branches of the group. */ |
Otherwise, scan the individual branches of the group. */ |
| 1670 |
|
|
| 1671 |
if (c == OP_COND && code[GET(code, 1)] != OP_ALT) |
if (c == OP_COND && code[GET(code, 1)] != OP_ALT) |
| 1672 |
code += GET(code, 1); |
code += GET(code, 1); |
| 1673 |
else |
else |
| 1674 |
{ |
{ |
| 1675 |
empty_branch = FALSE; |
empty_branch = FALSE; |
| 1676 |
do |
do |
| 1677 |
{ |
{ |
| 1682 |
while (*code == OP_ALT); |
while (*code == OP_ALT); |
| 1683 |
if (!empty_branch) return FALSE; /* All branches are non-empty */ |
if (!empty_branch) return FALSE; /* All branches are non-empty */ |
| 1684 |
} |
} |
| 1685 |
|
|
| 1686 |
c = *code; |
c = *code; |
| 1687 |
continue; |
continue; |
| 1688 |
} |
} |