| 203 | } |
| 204 | |
| 205 | static bool |
| 206 | db_add_expr(db_expr_t *valuep) |
| 207 | { |
| 208 | db_expr_t lhs, rhs; |
| 209 | int t; |
| 210 | |
| 211 | if (!db_mult_expr(&lhs)) |
| 212 | return (false); |
| 213 | |
| 214 | t = db_read_token(); |
| 215 | while (t == tPLUS || t == tMINUS || t == tBIT_OR) { |
| 216 | if (!db_mult_expr(&rhs)) { |
| 217 | db_printf("Expression syntax error after '%c'\n", |
| 218 | t == tPLUS ? '+' : t == tMINUS ? '-' : '|'); |
| 219 | db_error(NULL); |
| 220 | /*NOTREACHED*/ |
| 221 | } |
| 222 | switch (t) { |
| 223 | case tPLUS: |
| 224 | lhs += rhs; |
| 225 | break; |
| 226 | case tMINUS: |
| 227 | lhs -= rhs; |
| 228 | break; |
| 229 | case tBIT_OR: |
| 230 | lhs |= rhs; |
| 231 | break; |
| 232 | default: |
| 233 | __assert_unreachable(); |
| 234 | } |
| 235 | t = db_read_token(); |
| 236 | } |
| 237 | db_unread_token(t); |
| 238 | *valuep = lhs; |
| 239 | return (true); |
| 240 | } |
| 241 | |
| 242 | static bool |
| 243 | db_shift_expr(db_expr_t *valuep) |
no test coverage detected