static boolean_t db_term(db_expr_t *valuep) { int t; t = db_read_token(); if (t == tIDENT) { if (!db_value_of_name(db_tok_string, valuep) && !db_value_of_name_pcpu(db_tok_string, valuep) && !db_value_of_name_vnet(db_tok_string, valuep)) { db_error("Symbol not found\n"); /*NOTREACHED*/ } return (TRUE); } if (t == tNUMBER) { *valuep = (db_expr_t)db_tok_number; return (TRUE); } if (t == tDOT) { *valuep = (db_expr_t)db_dot; return (TRUE); } if (t == tDOTDOT) { *valuep = (db_expr_t)db_prev; return (TRUE); } if (t == tPLUS) { *valuep = (db_expr_t) db_next; return (TRUE); } if (t == tDITTO) { *valuep = (db_expr_t)db_last_addr; return (TRUE); } if (t == tDOLLAR) { if (!db_get_variable(valuep)) return (FALSE); return (TRUE); } if (t == tLPAREN) { if (!db_expression(valuep)) { db_error("Syntax error\n"); /*NOTREACHED*/ } t = db_read_token(); if (t != tRPAREN) { db_error("Syntax error\n"); /*NOTREACHED*/ } return (TRUE); } db_unread_token(t); return (FALSE); }
static bool db_term(db_expr_t *valuep) { int t; t = db_read_token(); if (t == tIDENT) { if (!db_value_of_name(db_tok_string, valuep)) { db_expr_t v = 0; int i, c, byte; /* See if we can make a number out of all of it */ for (i = 0; (c = db_tok_string[i]) != '\0'; i++) { byte = 0; if (c >= '0' && c <= '9') byte = c - '0'; else if (db_radix == 16 && c >= 'a' && c <= 'f') byte = c - 'a' + 10; else if (db_radix == 16 && c >= 'A' && c <= 'F') byte = c - 'A' + 10; else db_error("Symbol not found\n"); /*NOTREACHED*/ v = v * db_radix + byte; } *valuep = (db_expr_t)v; } return (true); } if (t == tNUMBER) { *valuep = (db_expr_t)db_tok_number; return (true); } if (t == tDOT) { *valuep = (db_expr_t)db_dot; return (true); } if (t == tDOTDOT) { *valuep = (db_expr_t)db_prev; return (true); } if (t == tPLUS) { *valuep = (db_expr_t) db_next; return (true); } if (t == tDITTO) { *valuep = (db_expr_t)db_last_addr; return (true); } if (t == tDOLLAR) { if (!db_get_variable(valuep)) return (false); return (true); } if (t == tLPAREN) { if (!db_expression(valuep)) { db_error("Syntax error\n"); /*NOTREACHED*/ } t = db_read_token(); if (t != tRPAREN) { db_error("Syntax error\n"); /*NOTREACHED*/ } return (true); } db_unread_token(t); return (false); }