| 51 | static bool db_logical_relation_expr(db_expr_t *valuep); |
| 52 | |
| 53 | static bool |
| 54 | db_term(db_expr_t *valuep) |
| 55 | { |
| 56 | int t; |
| 57 | |
| 58 | t = db_read_token(); |
| 59 | if (t == tIDENT) { |
| 60 | if (!db_value_of_name(db_tok_string, valuep) && |
| 61 | !db_value_of_name_pcpu(db_tok_string, valuep) && |
| 62 | !db_value_of_name_vnet(db_tok_string, valuep)) { |
| 63 | db_printf("Symbol '%s' not found\n", db_tok_string); |
| 64 | db_error(NULL); |
| 65 | /*NOTREACHED*/ |
| 66 | } |
| 67 | return (true); |
| 68 | } |
| 69 | if (t == tNUMBER) { |
| 70 | *valuep = (db_expr_t)db_tok_number; |
| 71 | return (true); |
| 72 | } |
| 73 | if (t == tDOT) { |
| 74 | *valuep = (db_expr_t)db_dot; |
| 75 | return (true); |
| 76 | } |
| 77 | if (t == tDOTDOT) { |
| 78 | *valuep = (db_expr_t)db_prev; |
| 79 | return (true); |
| 80 | } |
| 81 | if (t == tPLUS) { |
| 82 | *valuep = (db_expr_t) db_next; |
| 83 | return (true); |
| 84 | } |
| 85 | if (t == tDITTO) { |
| 86 | *valuep = (db_expr_t)db_last_addr; |
| 87 | return (true); |
| 88 | } |
| 89 | if (t == tDOLLAR) { |
| 90 | if (!db_get_variable(valuep)) |
| 91 | return (false); |
| 92 | return (true); |
| 93 | } |
| 94 | if (t == tLPAREN) { |
| 95 | if (!db_expression(valuep)) { |
| 96 | db_printf("Expression syntax error after '%c'\n", '('); |
| 97 | db_error(NULL); |
| 98 | /*NOTREACHED*/ |
| 99 | } |
| 100 | t = db_read_token(); |
| 101 | if (t != tRPAREN) { |
| 102 | db_printf("Expression syntax error -- expected '%c'\n", ')'); |
| 103 | db_error(NULL); |
| 104 | /*NOTREACHED*/ |
| 105 | } |
| 106 | return (true); |
| 107 | } |
| 108 | db_unread_token(t); |
| 109 | return (false); |
| 110 | } |
no test coverage detected