TOKEN_NE,
TOKEN_RBRACE,
TOKEN_LBRACE,
+ TOKEN_GROUP,
TOKEN_GE,
TOKEN_LE,
TOKEN_GT,
continue;
case TOKEN_NOT:
+ case TOKEN_GROUP:
case TOKEN_RBRACE:
case TOKEN_LBRACE:
if (!current->dump_done) {
break;
case TOKEN_RE:
- case TOKEN_RBRACE: /* cannot happen */
+ case TOKEN_RBRACE:
+ case TOKEN_GROUP:
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"Invalid expression \"%s\" in file %s",
expr, r->filename);
return retval;
}
- /* empty groups return TRUE (backwards compat) */
- if (!current->right) {
- CREATE_NODE(ctx, current->right);
- TYPE_TOKEN(¤t->right->token, TOKEN_STRING);
- current->right->token.value = "()";
- }
-
- current->right->parent = current->parent;
- if (!current->parent) {
- current = root = current->right;
- }
- else if (current->parent->left == current) {
- current = current->parent->left = current->right;
- }
- else {
- current = current->parent->right = current->right;
- }
+ TYPE_TOKEN(¤t->token, TOKEN_GROUP);
break;
case TOKEN_NOT:
switch (current->token.type) {
case TOKEN_STRING:
case TOKEN_RE:
- case TOKEN_RBRACE: /* cannot happen */
+ case TOKEN_RBRACE:
+ case TOKEN_GROUP:
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"Invalid expression \"%s\" in file %s",
expr, r->filename);
new->parent = current;
current = new;
break;
+
+ default:
+ break;
}
}
current = current->parent;
break;
+ case TOKEN_GROUP:
+ if (current->right) {
+ if (!current->right->done) {
+ current = current->right;
+ continue;
+ }
+ current->value = current->right->value;
+ }
+ else {
+ current->value = 1;
+ }
+
+ DEBUG_DUMP_EVAL(ctx, current);
+ current->done = 1;
+ current = current->parent;
+ break;
+
case TOKEN_LBRACE:
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
"Unmatched '(' in \"%s\" in file %s",