| 567 | #define CASE_OP(op) case op: name = #op ; break; |
| 568 | |
| 569 | static void expr_dump_tree(const ap_expr_t *e, const server_rec *s, |
| 570 | int loglevel, int indent) |
| 571 | { |
| 572 | switch (e->node_op) { |
| 573 | /* no arg */ |
| 574 | case op_NOP: |
| 575 | case op_True: |
| 576 | case op_False: |
| 577 | { |
| 578 | char *name; |
| 579 | switch (e->node_op) { |
| 580 | CASE_OP(op_NOP); |
| 581 | CASE_OP(op_True); |
| 582 | CASE_OP(op_False); |
| 583 | default: |
| 584 | ap_assert(0); |
| 585 | } |
| 586 | ap_log_error(MARK, "%*s%s", indent, " ", name); |
| 587 | } |
| 588 | break; |
| 589 | |
| 590 | /* arg1: string, arg2: expr */ |
| 591 | case op_UnaryOpCall: |
| 592 | case op_BinaryOpCall: |
| 593 | case op_BinaryOpArgs: |
| 594 | { |
| 595 | char *name; |
| 596 | switch (e->node_op) { |
| 597 | CASE_OP(op_BinaryOpCall); |
| 598 | CASE_OP(op_UnaryOpCall); |
| 599 | CASE_OP(op_BinaryOpArgs); |
| 600 | default: |
| 601 | ap_assert(0); |
| 602 | } |
| 603 | DUMP_S_E(name, e->node_arg1, e->node_arg2); |
| 604 | } |
| 605 | break; |
| 606 | |
| 607 | /* arg1: expr, arg2: expr */ |
| 608 | case op_Comp: |
| 609 | case op_Not: |
| 610 | case op_Or: |
| 611 | case op_And: |
| 612 | case op_EQ: |
| 613 | case op_NE: |
| 614 | case op_LT: |
| 615 | case op_LE: |
| 616 | case op_GT: |
| 617 | case op_GE: |
| 618 | case op_STR_EQ: |
| 619 | case op_STR_NE: |
| 620 | case op_STR_LT: |
| 621 | case op_STR_LE: |
| 622 | case op_STR_GT: |
| 623 | case op_STR_GE: |
| 624 | case op_IN: |
| 625 | case op_REG: |
| 626 | case op_NRE: |
no test coverage detected