X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Ftypes%2Fimpl_var.h;fp=src%2Ftypes%2Fimpl_var.h;h=9b8b39bde47928a1b181eecaa6d889e0ad02343a;hp=0000000000000000000000000000000000000000;hb=5359ad5c181e5772f350fe1cba060cbed3a05b91;hpb=04a60b34fc18ea3a2638893eaf24514177692eeb diff --git a/src/types/impl_var.h b/src/types/impl_var.h new file mode 100644 index 0000000..9b8b39b --- /dev/null +++ b/src/types/impl_var.h @@ -0,0 +1,37 @@ +#ifndef _PSI_TYPES_IMPL_VAR_H +#define _PSI_TYPES_IMPL_VAR_H + +typedef struct impl_var { + struct psi_token *token; + char *name; + struct impl_arg *arg; + unsigned reference:1; +} impl_var; + +static inline impl_var *init_impl_var(const char *name, int is_reference) { + impl_var *var = calloc(1, sizeof(*var)); + var->name = strdup(name); + var->reference = is_reference; + return var; +} + +static inline impl_var *copy_impl_var(impl_var *var) { + impl_var *cpy = malloc(sizeof(*cpy)); + + memcpy(cpy, var, sizeof(*cpy)); + cpy->name = strdup(cpy->name); + if (cpy->token) { + cpy->token = psi_token_copy(cpy->token); + } + return cpy; +} + +static inline void free_impl_var(impl_var *var) { + if (var->token) { + free(var->token); + } + free(var->name); + free(var); +} + +#endif