api refactoring
[m6w6/ext-psi] / src / types / decl_var.h
1 #ifndef _PSI_TYPES_DECL_VAR_H
2 #define _PSI_TYPES_DECL_VAR_H
3
4 typedef struct decl_var {
5 struct psi_token *token;
6 char *name;
7 unsigned pointer_level;
8 unsigned array_size;
9 struct decl_arg *arg;
10 } decl_var;
11
12 static inline decl_var *init_decl_var(const char *name, unsigned pl, unsigned as) {
13 decl_var *v = calloc(1, sizeof(*v));
14 v->name = (char *) strdup((const char *) name);
15 v->pointer_level = pl;
16 v->array_size = as;
17 return v;
18 }
19
20 static inline decl_var *copy_decl_var(decl_var *src) {
21 decl_var *dest = calloc(1, sizeof(*dest));
22
23 memcpy(dest, src, sizeof(*dest));
24 dest->name = strdup(dest->name);
25 if (dest->token) {
26 dest->token = psi_token_copy(dest->token);
27 }
28 return dest;
29 }
30
31 static inline void free_decl_var(decl_var *var) {
32 if (var->token) {
33 free(var->token);
34 }
35 free(var->name);
36 free(var);
37 }
38
39 #endif