| 620 | |
| 621 | |
| 622 | double te_eval(const te_expr *n) { |
| 623 | if (!n) return NAN; |
| 624 | |
| 625 | switch(TYPE_MASK(n->type)) { |
| 626 | case TE_CONSTANT: return n->value; |
| 627 | case TE_VARIABLE: return *n->bound; |
| 628 | |
| 629 | case TE_FUNCTION0: case TE_FUNCTION1: case TE_FUNCTION2: case TE_FUNCTION3: |
| 630 | case TE_FUNCTION4: case TE_FUNCTION5: case TE_FUNCTION6: case TE_FUNCTION7: |
| 631 | switch(ARITY(n->type)) { |
| 632 | case 0: return TE_FUN(void)(); |
| 633 | case 1: return TE_FUN(double)(M(0)); |
| 634 | case 2: return TE_FUN(double, double)(M(0), M(1)); |
| 635 | case 3: return TE_FUN(double, double, double)(M(0), M(1), M(2)); |
| 636 | case 4: return TE_FUN(double, double, double, double)(M(0), M(1), M(2), M(3)); |
| 637 | case 5: return TE_FUN(double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4)); |
| 638 | case 6: return TE_FUN(double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5)); |
| 639 | case 7: return TE_FUN(double, double, double, double, double, double, double)(M(0), M(1), M(2), M(3), M(4), M(5), M(6)); |
| 640 | default: return NAN; |
| 641 | } |
| 642 | |
| 643 | case TE_CLOSURE0: case TE_CLOSURE1: case TE_CLOSURE2: case TE_CLOSURE3: |
| 644 | case TE_CLOSURE4: case TE_CLOSURE5: case TE_CLOSURE6: case TE_CLOSURE7: |
| 645 | switch(ARITY(n->type)) { |
| 646 | case 0: return TE_FUN(void*)(n->parameters[0]); |
| 647 | case 1: return TE_FUN(void*, double)(n->parameters[1], M(0)); |
| 648 | case 2: return TE_FUN(void*, double, double)(n->parameters[2], M(0), M(1)); |
| 649 | case 3: return TE_FUN(void*, double, double, double)(n->parameters[3], M(0), M(1), M(2)); |
| 650 | case 4: return TE_FUN(void*, double, double, double, double)(n->parameters[4], M(0), M(1), M(2), M(3)); |
| 651 | case 5: return TE_FUN(void*, double, double, double, double, double)(n->parameters[5], M(0), M(1), M(2), M(3), M(4)); |
| 652 | case 6: return TE_FUN(void*, double, double, double, double, double, double)(n->parameters[6], M(0), M(1), M(2), M(3), M(4), M(5)); |
| 653 | case 7: return TE_FUN(void*, double, double, double, double, double, double, double)(n->parameters[7], M(0), M(1), M(2), M(3), M(4), M(5), M(6)); |
| 654 | default: return NAN; |
| 655 | } |
| 656 | |
| 657 | default: return NAN; |
| 658 | } |
| 659 | |
| 660 | } |
| 661 | |
| 662 | #undef TE_FUN |
| 663 | #undef M |
no outgoing calls
no test coverage detected