Skip to content

Commit abfdfc9

Browse files
committed
Add return types to FFI methods
The FFI class is final, so we can use proper return types.
1 parent 328903c commit abfdfc9

File tree

2 files changed

+49
-77
lines changed

2 files changed

+49
-77
lines changed

ext/ffi/ffi.stub.php

Lines changed: 27 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,62 @@
11
<?php
22

3-
class FFI
3+
final class FFI
44
{
5-
/** @return ?FFI */
6-
static function cdef(string $code = UNKNOWN, string $lib = UNKNOWN) {}
5+
static function cdef(string $code = UNKNOWN, string $lib = UNKNOWN): ?FFI {}
76

8-
/** @return ?FFI */
9-
static function load(string $filename) {}
7+
static function load(string $filename): ?FFI {}
108

11-
/** @return ?FFI */
12-
static function scope(string $scope_name) {}
9+
static function scope(string $scope_name): ?FFI {}
1310

14-
/**
15-
* @param FFI\CType|string $type
16-
* @return ?FFI\CData
17-
*/
18-
static function new($type, bool $owned = true, bool $persistent = false) {}
11+
/** @param FFI\CType|string $type */
12+
static function new($type, bool $owned = true, bool $persistent = false): ?FFI\CData {}
1913

20-
/**
21-
* @prefer-ref $ptr
22-
* @return void
23-
*/
24-
static function free(FFI\CData $ptr) {}
14+
/** @prefer-ref $ptr */
15+
static function free(FFI\CData $ptr): void {}
2516

2617
/**
2718
* @param FFI\CType|string $type
2819
* @prefer-ref $ptr
29-
* @return ?FFI\CData
3020
*/
31-
static function cast($type, $ptr) {}
21+
static function cast($type, $ptr): ?FFI\CData {}
3222

33-
/** @return ?FFI\CType */
34-
static function type(string $type) {}
23+
static function type(string $type): ?FFI\CType {}
3524

36-
/**
37-
* @prefer-ref $ptr
38-
* @return FFI\CType
39-
*/
40-
static function typeof(FFI\CData $ptr) {}
25+
/** @prefer-ref $ptr */
26+
static function typeof(FFI\CData $ptr): ?FFI\CType {}
4127

42-
/** @return ?FFI\CType */
43-
static function arrayType(FFI\CType $type, array $dims) {}
28+
static function arrayType(FFI\CType $type, array $dims): ?FFI\CType {}
4429

45-
/**
46-
* @prefer-ref $ptr
47-
* @return FFI\CData
48-
*/
49-
static function addr(FFI\CData $ptr) {}
30+
/** @prefer-ref $ptr */
31+
static function addr(FFI\CData $ptr): FFI\CData {}
5032

51-
/**
52-
* @prefer-ref $ptr
53-
* @return ?int
54-
*/
55-
static function sizeof(object $ptr) {}
33+
/** @prefer-ref $ptr */
34+
static function sizeof(object $ptr): ?int {}
5635

57-
/**
58-
* @prefer-ref $ptr
59-
* @return ?int
60-
*/
61-
static function alignof(object $ptr) {}
36+
/** @prefer-ref $ptr */
37+
static function alignof(object $ptr): ?int {}
6238

6339
/**
6440
* @prefer-ref $dst
6541
* @prefer-ref $src
6642
* @param string|FFI\CData $dst
67-
* @return void
6843
*/
69-
static function memcpy(FFI\CData $dst, $src, int $size) {}
44+
static function memcpy(FFI\CData $dst, $src, int $size): void {}
7045

7146
/**
7247
* @prefer-ref $ptr1
7348
* @param string|FFI\CData $ptr1
7449
* @prefer-ref $ptr2
7550
* @param string|FFI\CData $ptr2
76-
* @return ?int
7751
*/
78-
static function memcmp($ptr1, $ptr2, int $size) {}
52+
static function memcmp($ptr1, $ptr2, int $size): ?int {}
7953

80-
/**
81-
* @prefer-ref $ptr
82-
* @return void
83-
*/
84-
static function memset(FFI\CData $ptr, int $ch, int $size) {}
54+
/** @prefer-ref $ptr */
55+
static function memset(FFI\CData $ptr, int $ch, int $size): void {}
8556

86-
/**
87-
* @prefer-ref $ptr
88-
* @return ?string
89-
*/
90-
static function string(FFI\CData $ptr, int $size = UNKNOWN) {}
57+
/** @prefer-ref $ptr */
58+
static function string(FFI\CData $ptr, int $size = UNKNOWN): ?string {}
9159

92-
/**
93-
* @prefer-ref $ptr
94-
*/
95-
static function isNull(FFI\CData $ptr) {}
60+
/** @prefer-ref $ptr */
61+
static function isNull(FFI\CData $ptr): bool {}
9662
}

ext/ffi/ffi_arginfo.h

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,79 @@
11
/* This is a generated file, edit the .stub.php file instead. */
22

3-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_cdef, 0, 0, 0)
3+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 1)
44
ZEND_ARG_TYPE_INFO(0, code, IS_STRING, 0)
55
ZEND_ARG_TYPE_INFO(0, lib, IS_STRING, 0)
66
ZEND_END_ARG_INFO()
77

8-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_load, 0, 0, 1)
8+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_load, 0, 1, FFI, 1)
99
ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
1010
ZEND_END_ARG_INFO()
1111

12-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_scope, 0, 0, 1)
12+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_scope, 0, 1, FFI, 1)
1313
ZEND_ARG_TYPE_INFO(0, scope_name, IS_STRING, 0)
1414
ZEND_END_ARG_INFO()
1515

16-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_new, 0, 0, 1)
16+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_new, 0, 1, FFI\\CData, 1)
1717
ZEND_ARG_INFO(0, type)
1818
ZEND_ARG_TYPE_INFO(0, owned, _IS_BOOL, 0)
1919
ZEND_ARG_TYPE_INFO(0, persistent, _IS_BOOL, 0)
2020
ZEND_END_ARG_INFO()
2121

22-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_free, 0, 0, 1)
22+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_free, 0, 1, IS_VOID, 0)
2323
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
2424
ZEND_END_ARG_INFO()
2525

26-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_cast, 0, 0, 2)
26+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cast, 0, 2, FFI\\CData, 1)
2727
ZEND_ARG_INFO(0, type)
2828
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr)
2929
ZEND_END_ARG_INFO()
3030

31-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_type, 0, 0, 1)
31+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_type, 0, 1, FFI\\CType, 1)
3232
ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0)
3333
ZEND_END_ARG_INFO()
3434

35-
#define arginfo_class_FFI_typeof arginfo_class_FFI_free
35+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_typeof, 0, 1, FFI\\CType, 1)
36+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
37+
ZEND_END_ARG_INFO()
3638

37-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_arrayType, 0, 0, 2)
39+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_arrayType, 0, 2, FFI\\CType, 1)
3840
ZEND_ARG_OBJ_INFO(0, type, FFI\\CType, 0)
3941
ZEND_ARG_TYPE_INFO(0, dims, IS_ARRAY, 0)
4042
ZEND_END_ARG_INFO()
4143

42-
#define arginfo_class_FFI_addr arginfo_class_FFI_free
44+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_addr, 0, 1, FFI\\CData, 0)
45+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
46+
ZEND_END_ARG_INFO()
4347

44-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_sizeof, 0, 0, 1)
48+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_sizeof, 0, 1, IS_LONG, 1)
4549
ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, ptr, IS_OBJECT, 0)
4650
ZEND_END_ARG_INFO()
4751

4852
#define arginfo_class_FFI_alignof arginfo_class_FFI_sizeof
4953

50-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcpy, 0, 0, 3)
54+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memcpy, 0, 3, IS_VOID, 0)
5155
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, dst, FFI\\CData, 0)
5256
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, src)
5357
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
5458
ZEND_END_ARG_INFO()
5559

56-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memcmp, 0, 0, 3)
60+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memcmp, 0, 3, IS_LONG, 1)
5761
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr1)
5862
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, ptr2)
5963
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
6064
ZEND_END_ARG_INFO()
6165

62-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_memset, 0, 0, 3)
66+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_memset, 0, 3, IS_VOID, 0)
6367
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
6468
ZEND_ARG_TYPE_INFO(0, ch, IS_LONG, 0)
6569
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
6670
ZEND_END_ARG_INFO()
6771

68-
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_FFI_string, 0, 0, 1)
72+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_string, 0, 1, IS_STRING, 1)
6973
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
7074
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
7175
ZEND_END_ARG_INFO()
7276

73-
#define arginfo_class_FFI_isNull arginfo_class_FFI_free
77+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_FFI_isNull, 0, 1, _IS_BOOL, 0)
78+
ZEND_ARG_OBJ_INFO(ZEND_SEND_PREFER_REF, ptr, FFI\\CData, 0)
79+
ZEND_END_ARG_INFO()

0 commit comments

Comments
 (0)