22eb0f0d2f7620d70f6efee13c230d19edd76cbe
[m6w6/ext-psi] / src / types / decl_arg.h
1 #ifndef _PSI_TYPES_DECL_ARG_H
2 #define _PSI_TYPES_DECL_ARG_H
3
4 typedef struct decl_arg {
5 struct psi_token *token;
6 decl_type *type;
7 decl_var *var;
8 decl_struct_layout *layout;
9 impl_val val;
10 void *ptr;
11 void *let;
12 void *mem;
13 } decl_arg;
14
15 static inline decl_arg *init_decl_arg(decl_type *type, decl_var *var) {
16 decl_arg *arg = calloc(1, sizeof(*arg));
17 arg->token = var->token;
18 arg->type = type;
19 arg->var = var;
20 var->arg = arg;
21 arg->ptr = &arg->val;
22 arg->let = arg->ptr;
23 return arg;
24 }
25
26 static inline void free_decl_arg(decl_arg *arg) {
27 if (arg->token && arg->token != arg->var->token) {
28 free(arg->token);
29 }
30 free_decl_type(arg->type);
31 free_decl_var(arg->var);
32 if (arg->layout) {
33 free_decl_struct_layout(arg->layout);
34 }
35 free(arg);
36 }
37
38 #endif