X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fdecl_arg.h;fp=src%2Ftypes%2Fdecl_arg.h;h=22eb0f0d2f7620d70f6efee13c230d19edd76cbe;hp=0000000000000000000000000000000000000000;hb=5359ad5c181e5772f350fe1cba060cbed3a05b91;hpb=04a60b34fc18ea3a2638893eaf24514177692eeb diff --git a/src/types/decl_arg.h b/src/types/decl_arg.h new file mode 100644 index 0000000..22eb0f0 --- /dev/null +++ b/src/types/decl_arg.h @@ -0,0 +1,38 @@ +#ifndef _PSI_TYPES_DECL_ARG_H +#define _PSI_TYPES_DECL_ARG_H + +typedef struct decl_arg { + struct psi_token *token; + decl_type *type; + decl_var *var; + decl_struct_layout *layout; + impl_val val; + void *ptr; + void *let; + void *mem; +} decl_arg; + +static inline decl_arg *init_decl_arg(decl_type *type, decl_var *var) { + decl_arg *arg = calloc(1, sizeof(*arg)); + arg->token = var->token; + arg->type = type; + arg->var = var; + var->arg = arg; + arg->ptr = &arg->val; + arg->let = arg->ptr; + return arg; +} + +static inline void free_decl_arg(decl_arg *arg) { + if (arg->token && arg->token != arg->var->token) { + free(arg->token); + } + free_decl_type(arg->type); + free_decl_var(arg->var); + if (arg->layout) { + free_decl_struct_layout(arg->layout); + } + free(arg); +} + +#endif