travis: update
[m6w6/ext-psi] / src / libffi.c
index 6f808d4ce2360c4d1ba49079682e247a6fa72417..84f019b7e0720284832252541c3f1333d279bd9b 100644 (file)
  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/
 
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#else
+# include "php_config.h"
+#endif
 #include "context.h"
 #include "call.h"
 #include "php.h"
@@ -31,6 +35,7 @@
 #ifdef HAVE_LIBFFI
 
 #include "libffi_compat.h"
+#include "libffi.h"
 
 #if HAVE_INT128
 static ffi_type *ffi_type_sint128;
@@ -229,10 +234,15 @@ static bool psi_ffi_init(struct psi_context *C)
 {
        ffi_status rc;
        struct psi_ffi_context *context = pecalloc(1, sizeof(*context), 1);
+       ffi_abi abi = FFI_DEFAULT_ABI;
+
+#if HAVE_FFI_FASTCALL
+       abi = FFI_FASTCALL;
+#endif
 
        context->params[0] = &ffi_type_pointer;
        context->params[1] = &ffi_type_pointer;
-       rc = ffi_prep_cif(&context->signature, FFI_DEFAULT_ABI, 2, &ffi_type_void,
+       rc = ffi_prep_cif(&context->signature, abi, 2, &ffi_type_void,
                        context->params);
 
        if (FFI_OK != rc) {
@@ -292,22 +302,6 @@ static void psi_ffi_composite_dtor(struct psi_context *C,
                darg->engine.info = NULL;
                darg->engine.type = NULL;
 
-               struct psi_plist *args = NULL;
-               struct psi_decl_type *dtype = psi_decl_type_get_real(darg->type);
-
-               if (dtype->type == PSI_T_STRUCT) {
-                       args = dtype->real.strct->args;
-               } else if (dtype->type == PSI_T_UNION) {
-                       args = dtype->real.unn->args;
-               }
-
-               size_t i = 0;
-               struct psi_decl_arg *tmp;
-
-               while (psi_plist_get(args, i++, &tmp)) {
-                       psi_ffi_composite_dtor(C, tmp);
-               }
-
                psi_plist_free(info->eles);
                pefree(info, 1);
        }