| 613 | } |
| 614 | |
| 615 | static void |
| 616 | db_fncall(db_expr_t dummy1, bool dummy2, db_expr_t dummy3, char *dummy4) |
| 617 | { |
| 618 | db_expr_t fn_addr; |
| 619 | db_expr_t args[DB_MAXARGS]; |
| 620 | int nargs = 0; |
| 621 | db_expr_t retval; |
| 622 | int t; |
| 623 | |
| 624 | if (!db_expression(&fn_addr)) { |
| 625 | db_printf("Bad function\n"); |
| 626 | db_flush_lex(); |
| 627 | return; |
| 628 | } |
| 629 | |
| 630 | t = db_read_token(); |
| 631 | if (t == tLPAREN) { |
| 632 | if (db_expression(&args[0])) { |
| 633 | nargs++; |
| 634 | while ((t = db_read_token()) == tCOMMA) { |
| 635 | if (nargs == DB_MAXARGS) { |
| 636 | db_printf("Too many arguments (max %d)\n", DB_MAXARGS); |
| 637 | db_flush_lex(); |
| 638 | return; |
| 639 | } |
| 640 | if (!db_expression(&args[nargs])) { |
| 641 | db_printf("Argument missing\n"); |
| 642 | db_flush_lex(); |
| 643 | return; |
| 644 | } |
| 645 | nargs++; |
| 646 | } |
| 647 | db_unread_token(t); |
| 648 | } |
| 649 | if (db_read_token() != tRPAREN) { |
| 650 | db_printf("Mismatched parens\n"); |
| 651 | db_flush_lex(); |
| 652 | return; |
| 653 | } |
| 654 | } |
| 655 | db_skip_to_eol(); |
| 656 | db_disable_pager(); |
| 657 | |
| 658 | if (DB_CALL(fn_addr, &retval, nargs, args)) |
| 659 | db_printf("= %#lr\n", (long)retval); |
| 660 | } |
| 661 | |
| 662 | static void |
| 663 | db_halt(db_expr_t dummy, bool dummy2, db_expr_t dummy3, char *dummy4) |
no test coverage detected