X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fdecl_args.h;fp=src%2Ftypes%2Fdecl_args.h;h=5987520c01916f107d04b54ffe3f320f94825c1a;hb=5359ad5c181e5772f350fe1cba060cbed3a05b91;hp=0000000000000000000000000000000000000000;hpb=04a60b34fc18ea3a2638893eaf24514177692eeb;p=m6w6%2Fext-psi diff --git a/src/types/decl_args.h b/src/types/decl_args.h new file mode 100644 index 0000000..5987520 --- /dev/null +++ b/src/types/decl_args.h @@ -0,0 +1,36 @@ +#ifndef _PSI_TYPES_DECL_ARGS_H +#define _PSI_TYPES_DECL_ARGS_H + +typedef struct decl_args { + decl_arg **args; + size_t count; + unsigned varargs:1; +} decl_args; + +static inline decl_args *init_decl_args(decl_arg *arg) { + decl_args *args = calloc(1, sizeof(*args)); + if (arg) { + args->count = 1; + args->args = calloc(1, sizeof(*args->args)); + args->args[0] = arg; + } + return args; +} + +static inline decl_args *add_decl_arg(decl_args *args, decl_arg *arg) { + args->args = realloc(args->args, ++args->count * sizeof(*args->args)); + args->args[args->count-1] = arg; + return args; +} + +static inline void free_decl_args(decl_args *args) { + size_t i; + + for (i = 0; i < args->count; ++i) { + free_decl_arg(args->args[i]); + } + free(args->args); + free(args); +} + +#endif