api refactoring
[m6w6/ext-psi] / src / types / decl_args.h
1 #ifndef _PSI_TYPES_DECL_ARGS_H
2 #define _PSI_TYPES_DECL_ARGS_H
3
4 typedef struct decl_args {
5 decl_arg **args;
6 size_t count;
7 unsigned varargs:1;
8 } decl_args;
9
10 static inline decl_args *init_decl_args(decl_arg *arg) {
11 decl_args *args = calloc(1, sizeof(*args));
12 if (arg) {
13 args->count = 1;
14 args->args = calloc(1, sizeof(*args->args));
15 args->args[0] = arg;
16 }
17 return args;
18 }
19
20 static inline decl_args *add_decl_arg(decl_args *args, decl_arg *arg) {
21 args->args = realloc(args->args, ++args->count * sizeof(*args->args));
22 args->args[args->count-1] = arg;
23 return args;
24 }
25
26 static inline void free_decl_args(decl_args *args) {
27 size_t i;
28
29 for (i = 0; i < args->count; ++i) {
30 free_decl_arg(args->args[i]);
31 }
32 free(args->args);
33 free(args);
34 }
35
36 #endif