db: fix bug handling ':' character
[smatch.git] / smatch_expressions.c
blobcc06dd8fe7bca10772b70b387d9747563e8e4e41
1 #include "smatch.h"
3 static struct position pos;
5 struct expression *zero_expr()
7 static struct expression *zero;
9 if (zero)
10 return zero;
12 zero = alloc_expression(pos, EXPR_VALUE);
13 zero->value = 0;
14 return zero;
17 struct expression *value_expr(long long val)
19 struct expression *expr;
21 if (!val)
22 return zero_expr();
24 expr = alloc_expression(pos, EXPR_VALUE);
25 expr->value = val;
26 return expr;
29 struct expression *member_expression(struct expression *deref, int op, struct ident *member)
31 struct expression *expr;
33 expr = alloc_expression(deref->pos, EXPR_DEREF);
34 expr->op = op;
35 expr->deref = deref;
36 expr->member = member;
37 return expr;
40 struct expression *deref_expression(struct expression *expr)
42 struct expression *preop;
44 preop = alloc_expression(expr->pos, EXPR_PREOP);
45 preop->unop = expr;
46 preop->op = '*';
47 return preop;
50 struct expression *assign_expression(struct expression *left, struct expression *right)
52 struct expression *expr;
54 expr = alloc_expression(right->pos, EXPR_ASSIGNMENT);
55 expr->op = '=';
56 expr->left = left;
57 expr->right = right;
58 return expr;
61 struct expression *binop_expression(struct expression *left, int op, struct expression *right)
63 struct expression *expr;
65 expr = alloc_expression(right->pos, EXPR_BINOP);
66 expr->op = op;
67 expr->left = left;
68 expr->right = right;
69 return expr;
72 struct expression *symbol_expression(struct symbol *sym)
74 struct expression *expr;
76 expr = alloc_expression(sym->pos, EXPR_SYMBOL);
77 expr->symbol = sym;
78 expr->symbol_name = sym->ident;
79 return expr;