]> granicus.if.org Git - php/commitdiff
Add return types to FFI methods
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 18 Feb 2020 09:28:43 +0000 (10:28 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 18 Feb 2020 09:28:43 +0000 (10:28 +0100)
The FFI class is final, so we can use proper return types.

ext/ffi/ffi.stub.php
ext/ffi/ffi_arginfo.h

index ff73d2e12464f4fcec53d41e65d8c890182fd606..5819443f06b56c755982a25739d029a8c9001e96 100644 (file)
@@ -1,96 +1,62 @@
 <?php
 
-class FFI
+final class FFI
 {
-    /** @return ?FFI */
-    static function cdef(string $code = UNKNOWN, string $lib = UNKNOWN) {}
+    static function cdef(string $code = UNKNOWN, string $lib = UNKNOWN): ?FFI {}
 
-    /** @return ?FFI */
-    static function load(string $filename) {}
+    static function load(string $filename): ?FFI {}
 
-    /** @return ?FFI */
-    static function scope(string $scope_name) {}
+    static function scope(string $scope_name): ?FFI {}
 
-    /**
-     * @param FFI\CType|string $type
-     * @return ?FFI\CData
-     */
-    static function new($type, bool $owned = true, bool $persistent = false) {}
+    /** @param FFI\CType|string $type */
+    static function new($type, bool $owned = true, bool $persistent = false): ?FFI\CData {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return void
-     */
-    static function free(FFI\CData $ptr) {}
+    /** @prefer-ref $ptr */
+    static function free(FFI\CData $ptr): void {}
 
     /**
      * @param FFI\CType|string $type
      * @prefer-ref $ptr
-     * @return ?FFI\CData
      */
-    static function cast($type, $ptr) {}
+    static function cast($type, $ptr): ?FFI\CData {}
 
-    /** @return ?FFI\CType */
-    static function type(string $type) {}
+    static function type(string $type): ?FFI\CType {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return FFI\CType
-     */
-    static function typeof(FFI\CData $ptr) {}
+    /** @prefer-ref $ptr */
+    static function typeof(FFI\CData $ptr): ?FFI\CType {}
 
-    /** @return ?FFI\CType */
-    static function arrayType(FFI\CType $type, array $dims) {}
+    static function arrayType(FFI\CType $type, array $dims): ?FFI\CType {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return FFI\CData
-     */
-    static function addr(FFI\CData $ptr) {}
+    /** @prefer-ref $ptr */
+    static function addr(FFI\CData $ptr): FFI\CData {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return ?int
-     */
-    static function sizeof(object $ptr) {}
+    /** @prefer-ref $ptr */
+    static function sizeof(object $ptr): ?int {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return ?int
-     */
-    static function alignof(object $ptr) {}
+    /** @prefer-ref $ptr */
+    static function alignof(object $ptr): ?int {}
 
     /**
      * @prefer-ref $dst
      * @prefer-ref $src
      * @param string|FFI\CData $dst
-     * @return void
      */
-    static function memcpy(FFI\CData $dst, $src, int $size) {}
+    static function memcpy(FFI\CData $dst, $src, int $size): void {}
 
     /**
      * @prefer-ref $ptr1
      * @param string|FFI\CData $ptr1
      * @prefer-ref $ptr2
      * @param string|FFI\CData $ptr2
-     * @return ?int
      */
-    static function memcmp($ptr1, $ptr2, int $size) {}
+    static function memcmp($ptr1, $ptr2, int $size): ?int {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return void
-     */
-    static function memset(FFI\CData $ptr, int $ch, int $size) {}
+    /** @prefer-ref $ptr */
+    static function memset(FFI\CData $ptr, int $ch, int $size): void {}
 
-    /**
-     * @prefer-ref $ptr
-     * @return ?string
-     */
-    static function string(FFI\CData $ptr, int $size = UNKNOWN) {}
+    /** @prefer-ref $ptr */
+    static function string(FFI\CData $ptr, int $size = UNKNOWN): ?string {}
 
-    /**
-     * @prefer-ref $ptr
-     */
-    static function isNull(FFI\CData $ptr) {}
+    /** @prefer-ref $ptr */
+    static function isNull(FFI\CData $ptr): bool {}
 }
index 48fc90c2cd7a8f196a9ee3619600ddacca4d9eed..bcfce179d5c056397f3441b2d483369c8364c5f8 100644 (file)
@@ -1,73 +1,79 @@
 /* This is a generated file, edit the .stub.php file instead. */
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_cdef, 0, 0, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 1)
        ZEND_ARG_TYPE_INFO(0, code, IS_STRING, 0)
        ZEND_ARG_TYPE_INFO(0, lib, IS_STRING, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_load, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 1)
        ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_scope, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_scope, 0, 1, FFI, 1)
        ZEND_ARG_TYPE_INFO(0, scope_name, IS_STRING, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_new, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_new, 0, 1, FFI\\CData, 1)
        ZEND_ARG_INFO(0, type)
        ZEND_ARG_TYPE_INFO(0, owned, _IS_BOOL, 0)
        ZEND_ARG_TYPE_INFO(0, persistent, _IS_BOOL, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_free, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_free, 0, 1, IS_VOID, 0)
        ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_cast, 0, 0, 2)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cast, 0, 2, FFI\\CData, 1)
        ZEND_ARG_INFO(0, type)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_type, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_type, 0, 1, FFI\\CType, 1)
        ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_FFI_typeof arginfo_class_FFI_free
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_typeof, 0, 1, FFI\\CType, 1)
+       ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
+ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_arrayType, 0, 0, 2)
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_arrayType, 0, 2, FFI\\CType, 1)
        ZEND_ARG_OBJ_INFO(0, type, FFI\\CType, 0)
        ZEND_ARG_TYPE_INFO(0, dims, IS_ARRAY, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_FFI_addr arginfo_class_FFI_free
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_addr, 0, 1, FFI\\CData, 0)
+       ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
+ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_sizeof, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_sizeof, 0, 1, IS_LONG, 1)
        ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, ptr, IS_OBJECT, 0)
 ZEND_END_ARG_INFO()
 
 #define arginfo_class_FFI_alignof arginfo_class_FFI_sizeof
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcpy, 0, 0, 3)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memcpy, 0, 3, IS_VOID, 0)
        ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, dst, FFI\\CData, 0)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, src)
        ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcmp, 0, 0, 3)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memcmp, 0, 3, IS_LONG, 1)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr1)
        ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr2)
        ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memset, 0, 0, 3)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memset, 0, 3, IS_VOID, 0)
        ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
        ZEND_ARG_TYPE_INFO(0, ch, IS_LONG, 0)
        ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_string, 0, 0, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_string, 0, 1, IS_STRING, 1)
        ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
        ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_FFI_isNull arginfo_class_FFI_free
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_isNull, 0, 1, _IS_BOOL, 0)
+       ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
+ZEND_END_ARG_INFO()