X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fengine.c;h=37f99766acd63dfda8817084efd173084067703c;hp=38cdb0e09193c1cf6d314ca2e76d798446cfad12;hb=b25cb3852e3c6ef6da608001585218015aaf5d3e;hpb=e5103bb1ce17ef734e1329da9a13d9a2cbc40ad9 diff --git a/src/engine.c b/src/engine.c index 38cdb0e..37f9976 100644 --- a/src/engine.c +++ b/src/engine.c @@ -207,12 +207,6 @@ static inline void *psi_do_calloc(let_calloc *alloc) return mem; } -static inline impl_val *psi_let_val(token_t let_func, impl_arg *iarg, impl_val *arg_val, decl_struct *strct, void **to_free) -{ - abort(); - return arg_val; -} - static inline impl_val *psi_let_func(let_func *func, decl_arg *darg) { return darg->ptr = func->handler(darg->ptr, darg->type, func->var->arg, &darg->mem); } @@ -293,6 +287,12 @@ static inline void psi_clean_array_struct(let_stmt *let, decl_arg *darg) { while (*ptr) { efree(*ptr++); } + } else if (type->type == PSI_T_STRUCT) { + void **ptr = (void **) ((char *) darg->mem + type->real.unn->size); + + if (*ptr) { + efree(*ptr); + } } } } @@ -378,6 +378,9 @@ static inline void psi_do_args(impl *impl) { case PSI_T_STRUCT: impl->decl->func->ptr = psi_array_to_struct(real->real.strct, NULL); break; + case PSI_T_UNION: + impl->decl->func->ptr = psi_array_to_union(real->real.unn, NULL); + break; } } }