#include "php_psi.h"
#include "libffi.h"
+#include "engine.h"
#undef PACKAGE
#undef PACKAGE_BUGREPORT
case PSI_T_BOOL:
return &ffi_type_uchar;
case PSI_T_INT:
+ case PSI_T_ENUM:
return &ffi_type_sint;
case PSI_T_LONG:
return &ffi_type_slong;
return &ffi_type_longdouble;
#endif
case PSI_T_POINTER:
+ case PSI_T_FUNCTION:
return &ffi_type_pointer;
}
}
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));
}
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) {