X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Flibffi.c;h=301995e5903d9bc377c3d2630f1be48fed9e0513;hp=369fe3367ba5d46b3c24398e19ed6168503ab8c4;hb=d3171526ab7658114cac4ebe1098af4b038e576e;hpb=ed5ebb3caac1ac8bf6a4b32eabfb523f23de8576 diff --git a/src/libffi.c b/src/libffi.c index 369fe33..301995e 100644 --- a/src/libffi.c +++ b/src/libffi.c @@ -192,7 +192,8 @@ static ffi_type **psi_ffi_struct_type_elements(decl_struct *strct) { static inline ffi_type *psi_ffi_decl_type(decl_type *type) { decl_type *real = real_decl_type(type); - if (real->type == PSI_T_STRUCT) { + switch (real->type) { + case PSI_T_STRUCT: if (!real->strct->engine.type) { ffi_type *strct = calloc(1, sizeof(ffi_type)); @@ -205,8 +206,13 @@ static inline ffi_type *psi_ffi_decl_type(decl_type *type) { } return real->strct->engine.type; + + case PSI_T_UNION: + return psi_ffi_decl_arg_type(real->unn->args->args[0]); + + default: + return psi_ffi_token_type(real->type); } - return psi_ffi_token_type(real->type); } static inline ffi_type *psi_ffi_decl_arg_type(decl_arg *darg) { if (darg->var->pointer_level) {