api refactoring
[m6w6/ext-psi] / src / types / impl_var.h
1 #ifndef _PSI_TYPES_IMPL_VAR_H
2 #define _PSI_TYPES_IMPL_VAR_H
3
4 typedef struct impl_var {
5 struct psi_token *token;
6 char *name;
7 struct impl_arg *arg;
8 unsigned reference:1;
9 } impl_var;
10
11 static inline impl_var *init_impl_var(const char *name, int is_reference) {
12 impl_var *var = calloc(1, sizeof(*var));
13 var->name = strdup(name);
14 var->reference = is_reference;
15 return var;
16 }
17
18 static inline impl_var *copy_impl_var(impl_var *var) {
19 impl_var *cpy = malloc(sizeof(*cpy));
20
21 memcpy(cpy, var, sizeof(*cpy));
22 cpy->name = strdup(cpy->name);
23 if (cpy->token) {
24 cpy->token = psi_token_copy(cpy->token);
25 }
26 return cpy;
27 }
28
29 static inline void free_impl_var(impl_var *var) {
30 if (var->token) {
31 free(var->token);
32 }
33 free(var->name);
34 free(var);
35 }
36
37 #endif