db: take static vs global into consideration wit function pointers
[smatch.git] / smatch_expressions.c
blob90f567ee03a7e2afa89c19d418c075a85236c824
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 *symbol_expression(struct symbol *sym)
63 struct expression *expr;
65 expr = alloc_expression(sym->pos, EXPR_SYMBOL);
66 expr->symbol = sym;
67 expr->symbol_name = sym->ident;
68 return expr;