From 65aa72c2180c604470f52036c60afdab326800fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Fri, 3 Jun 2022 09:17:10 +0200 Subject: [PATCH] Declare ext/ffi constants in stubs --- ext/ffi/ffi.c | 49 +-------- ext/ffi/ffi.stub.php | 195 +++++++++++++++++++++++++++++++++++ ext/ffi/ffi_arginfo.h | 232 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 428 insertions(+), 48 deletions(-) diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index 44cce8227ea68..d7f7f902b9d11 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -25,7 +25,6 @@ #include "zend_exceptions.h" #include "zend_closures.h" #include "main/SAPI.h" -#include "ffi_arginfo.h" #include @@ -86,6 +85,8 @@ typedef enum _zend_ffi_type_kind { ZEND_FFI_TYPE_STRUCT, } zend_ffi_type_kind; +#include "ffi_arginfo.h" + typedef enum _zend_ffi_flags { ZEND_FFI_FLAG_CONST = (1 << 0), ZEND_FFI_FLAG_OWNED = (1 << 1), @@ -5237,9 +5238,6 @@ static zend_result zend_ffi_preload(char *preload) /* {{{ */ } /* }}} */ -#define REGISTER_FFI_TYPE_CONSTANT(name) \ - zend_declare_class_constant_long(zend_ffi_ctype_ce, #name, sizeof(#name) - 1, ZEND_FFI_ ## name) - /* {{{ ZEND_MINIT_FUNCTION */ ZEND_MINIT_FUNCTION(ffi) { @@ -5384,49 +5382,6 @@ ZEND_MINIT_FUNCTION(ffi) zend_ffi_ctype_handlers.get_properties = zend_fake_get_properties; zend_ffi_ctype_handlers.get_gc = zend_fake_get_gc; - REGISTER_FFI_TYPE_CONSTANT(TYPE_VOID); - REGISTER_FFI_TYPE_CONSTANT(TYPE_FLOAT); - REGISTER_FFI_TYPE_CONSTANT(TYPE_DOUBLE); -#ifdef HAVE_LONG_DOUBLE - REGISTER_FFI_TYPE_CONSTANT(TYPE_LONGDOUBLE); -#endif - REGISTER_FFI_TYPE_CONSTANT(TYPE_UINT8); - REGISTER_FFI_TYPE_CONSTANT(TYPE_SINT8); - REGISTER_FFI_TYPE_CONSTANT(TYPE_UINT16); - REGISTER_FFI_TYPE_CONSTANT(TYPE_SINT16); - REGISTER_FFI_TYPE_CONSTANT(TYPE_UINT32); - REGISTER_FFI_TYPE_CONSTANT(TYPE_SINT32); - REGISTER_FFI_TYPE_CONSTANT(TYPE_UINT64); - REGISTER_FFI_TYPE_CONSTANT(TYPE_SINT64); - REGISTER_FFI_TYPE_CONSTANT(TYPE_ENUM); - REGISTER_FFI_TYPE_CONSTANT(TYPE_BOOL); - REGISTER_FFI_TYPE_CONSTANT(TYPE_CHAR); - REGISTER_FFI_TYPE_CONSTANT(TYPE_POINTER); - REGISTER_FFI_TYPE_CONSTANT(TYPE_FUNC); - REGISTER_FFI_TYPE_CONSTANT(TYPE_ARRAY); - REGISTER_FFI_TYPE_CONSTANT(TYPE_STRUCT); - - REGISTER_FFI_TYPE_CONSTANT(ATTR_CONST); - REGISTER_FFI_TYPE_CONSTANT(ATTR_INCOMPLETE_TAG); - REGISTER_FFI_TYPE_CONSTANT(ATTR_VARIADIC); - REGISTER_FFI_TYPE_CONSTANT(ATTR_INCOMPLETE_ARRAY); - REGISTER_FFI_TYPE_CONSTANT(ATTR_VLA); - REGISTER_FFI_TYPE_CONSTANT(ATTR_UNION); - REGISTER_FFI_TYPE_CONSTANT(ATTR_PACKED); - REGISTER_FFI_TYPE_CONSTANT(ATTR_MS_STRUCT); - REGISTER_FFI_TYPE_CONSTANT(ATTR_GCC_STRUCT); - - REGISTER_FFI_TYPE_CONSTANT(ABI_DEFAULT); - REGISTER_FFI_TYPE_CONSTANT(ABI_CDECL); - REGISTER_FFI_TYPE_CONSTANT(ABI_FASTCALL); - REGISTER_FFI_TYPE_CONSTANT(ABI_THISCALL); - REGISTER_FFI_TYPE_CONSTANT(ABI_STDCALL); - REGISTER_FFI_TYPE_CONSTANT(ABI_PASCAL); - REGISTER_FFI_TYPE_CONSTANT(ABI_REGISTER); - REGISTER_FFI_TYPE_CONSTANT(ABI_MS); - REGISTER_FFI_TYPE_CONSTANT(ABI_SYSV); - REGISTER_FFI_TYPE_CONSTANT(ABI_VECTORCALL); - if (FFI_G(preload)) { return zend_ffi_preload(FFI_G(preload)); } diff --git a/ext/ffi/ffi.stub.php b/ext/ffi/ffi.stub.php index 6ba7b542ef97d..b010653977f3f 100644 --- a/ext/ffi/ffi.stub.php +++ b/ext/ffi/ffi.stub.php @@ -75,6 +75,201 @@ final class CData { /** @not-serializable */ final class CType { + /** + * @var int + * @cname ZEND_FFI_TYPE_VOID + */ + public const TYPE_VOID = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_FLOAT + */ + public const TYPE_FLOAT = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_DOUBLE + */ + public const TYPE_DOUBLE = UNKNOWN; +#ifdef HAVE_LONG_DOUBLE + /** + * @var int + * @cname ZEND_FFI_TYPE_LONGDOUBLE + */ + public const TYPE_LONGDOUBLE = UNKNOWN; +#endif + /** + * @var int + * @cname ZEND_FFI_TYPE_UINT8 + */ + public const TYPE_UINT8 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_SINT8 + */ + public const TYPE_SINT8 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_UINT16 + */ + public const TYPE_UINT16 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_SINT16 + */ + public const TYPE_SINT16 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_UINT32 + */ + public const TYPE_UINT32 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_SINT32 + */ + public const TYPE_SINT32 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_UINT64 + */ + public const TYPE_UINT64 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_SINT64 + */ + public const TYPE_SINT64 = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_ENUM + */ + public const TYPE_ENUM = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_BOOL + */ + public const TYPE_BOOL = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_CHAR + */ + public const TYPE_CHAR = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_POINTER + */ + public const TYPE_POINTER = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_FUNC + */ + public const TYPE_FUNC = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_ARRAY + */ + public const TYPE_ARRAY = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_TYPE_STRUCT + */ + public const TYPE_STRUCT = UNKNOWN; + + /** + * @var int + * @cname ZEND_FFI_ATTR_CONST + */ + public const ATTR_CONST = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_INCOMPLETE_TAG + */ + public const ATTR_INCOMPLETE_TAG = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_VARIADIC + */ + public const ATTR_VARIADIC = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_INCOMPLETE_ARRAY + */ + public const ATTR_INCOMPLETE_ARRAY = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_VLA + */ + public const ATTR_VLA = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_UNION + */ + public const ATTR_UNION = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_PACKED + */ + public const ATTR_PACKED = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_MS_STRUCT + */ + public const ATTR_MS_STRUCT = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ATTR_GCC_STRUCT + */ + public const ATTR_GCC_STRUCT = UNKNOWN; + + /** + * @var int + * @cname ZEND_FFI_ABI_DEFAULT + */ + public const ABI_DEFAULT = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_CDECL + */ + public const ABI_CDECL = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_FASTCALL + */ + public const ABI_FASTCALL = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_THISCALL + */ + public const ABI_THISCALL = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_STDCALL + */ + public const ABI_STDCALL = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_PASCAL + */ + public const ABI_PASCAL = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_REGISTER + */ + public const ABI_REGISTER = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_MS + */ + public const ABI_MS = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_SYSV + */ + public const ABI_SYSV = UNKNOWN; + /** + * @var int + * @cname ZEND_FFI_ABI_VECTORCALL + */ + public const ABI_VECTORCALL = UNKNOWN; + public function getName(): string {} public function getKind(): int {} diff --git a/ext/ffi/ffi_arginfo.h b/ext/ffi/ffi_arginfo.h index 1438c0283badc..a5029c05d1664 100644 --- a/ext/ffi/ffi_arginfo.h +++ b/ext/ffi/ffi_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d9dd3b93c0d1623fe61ea0bd8ee9d4c3a359bf78 */ + * Stub hash: ec471e9638aa6b7b46b6e2cf8dd7232daa6d1525 */ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_FFI_cdef, 0, 0, FFI, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, code, IS_STRING, 0, "\"\"") @@ -244,6 +244,236 @@ static zend_class_entry *register_class_FFI_CType(void) class_entry = zend_register_internal_class_ex(&ce, NULL); class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NOT_SERIALIZABLE; + zval const_TYPE_VOID_value; + ZVAL_LONG(&const_TYPE_VOID_value, ZEND_FFI_TYPE_VOID); + zend_string *const_TYPE_VOID_name = zend_string_init_interned("TYPE_VOID", sizeof("TYPE_VOID") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_VOID_name, &const_TYPE_VOID_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_VOID_name); + + zval const_TYPE_FLOAT_value; + ZVAL_LONG(&const_TYPE_FLOAT_value, ZEND_FFI_TYPE_FLOAT); + zend_string *const_TYPE_FLOAT_name = zend_string_init_interned("TYPE_FLOAT", sizeof("TYPE_FLOAT") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_FLOAT_name, &const_TYPE_FLOAT_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_FLOAT_name); + + zval const_TYPE_DOUBLE_value; + ZVAL_LONG(&const_TYPE_DOUBLE_value, ZEND_FFI_TYPE_DOUBLE); + zend_string *const_TYPE_DOUBLE_name = zend_string_init_interned("TYPE_DOUBLE", sizeof("TYPE_DOUBLE") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_DOUBLE_name, &const_TYPE_DOUBLE_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_DOUBLE_name); +#if defined(HAVE_LONG_DOUBLE) + + zval const_TYPE_LONGDOUBLE_value; + ZVAL_LONG(&const_TYPE_LONGDOUBLE_value, ZEND_FFI_TYPE_LONGDOUBLE); + zend_string *const_TYPE_LONGDOUBLE_name = zend_string_init_interned("TYPE_LONGDOUBLE", sizeof("TYPE_LONGDOUBLE") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_LONGDOUBLE_name, &const_TYPE_LONGDOUBLE_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_LONGDOUBLE_name); +#endif + + zval const_TYPE_UINT8_value; + ZVAL_LONG(&const_TYPE_UINT8_value, ZEND_FFI_TYPE_UINT8); + zend_string *const_TYPE_UINT8_name = zend_string_init_interned("TYPE_UINT8", sizeof("TYPE_UINT8") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_UINT8_name, &const_TYPE_UINT8_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_UINT8_name); + + zval const_TYPE_SINT8_value; + ZVAL_LONG(&const_TYPE_SINT8_value, ZEND_FFI_TYPE_SINT8); + zend_string *const_TYPE_SINT8_name = zend_string_init_interned("TYPE_SINT8", sizeof("TYPE_SINT8") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_SINT8_name, &const_TYPE_SINT8_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_SINT8_name); + + zval const_TYPE_UINT16_value; + ZVAL_LONG(&const_TYPE_UINT16_value, ZEND_FFI_TYPE_UINT16); + zend_string *const_TYPE_UINT16_name = zend_string_init_interned("TYPE_UINT16", sizeof("TYPE_UINT16") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_UINT16_name, &const_TYPE_UINT16_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_UINT16_name); + + zval const_TYPE_SINT16_value; + ZVAL_LONG(&const_TYPE_SINT16_value, ZEND_FFI_TYPE_SINT16); + zend_string *const_TYPE_SINT16_name = zend_string_init_interned("TYPE_SINT16", sizeof("TYPE_SINT16") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_SINT16_name, &const_TYPE_SINT16_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_SINT16_name); + + zval const_TYPE_UINT32_value; + ZVAL_LONG(&const_TYPE_UINT32_value, ZEND_FFI_TYPE_UINT32); + zend_string *const_TYPE_UINT32_name = zend_string_init_interned("TYPE_UINT32", sizeof("TYPE_UINT32") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_UINT32_name, &const_TYPE_UINT32_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_UINT32_name); + + zval const_TYPE_SINT32_value; + ZVAL_LONG(&const_TYPE_SINT32_value, ZEND_FFI_TYPE_SINT32); + zend_string *const_TYPE_SINT32_name = zend_string_init_interned("TYPE_SINT32", sizeof("TYPE_SINT32") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_SINT32_name, &const_TYPE_SINT32_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_SINT32_name); + + zval const_TYPE_UINT64_value; + ZVAL_LONG(&const_TYPE_UINT64_value, ZEND_FFI_TYPE_UINT64); + zend_string *const_TYPE_UINT64_name = zend_string_init_interned("TYPE_UINT64", sizeof("TYPE_UINT64") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_UINT64_name, &const_TYPE_UINT64_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_UINT64_name); + + zval const_TYPE_SINT64_value; + ZVAL_LONG(&const_TYPE_SINT64_value, ZEND_FFI_TYPE_SINT64); + zend_string *const_TYPE_SINT64_name = zend_string_init_interned("TYPE_SINT64", sizeof("TYPE_SINT64") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_SINT64_name, &const_TYPE_SINT64_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_SINT64_name); + + zval const_TYPE_ENUM_value; + ZVAL_LONG(&const_TYPE_ENUM_value, ZEND_FFI_TYPE_ENUM); + zend_string *const_TYPE_ENUM_name = zend_string_init_interned("TYPE_ENUM", sizeof("TYPE_ENUM") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_ENUM_name, &const_TYPE_ENUM_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_ENUM_name); + + zval const_TYPE_BOOL_value; + ZVAL_LONG(&const_TYPE_BOOL_value, ZEND_FFI_TYPE_BOOL); + zend_string *const_TYPE_BOOL_name = zend_string_init_interned("TYPE_BOOL", sizeof("TYPE_BOOL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_BOOL_name, &const_TYPE_BOOL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_BOOL_name); + + zval const_TYPE_CHAR_value; + ZVAL_LONG(&const_TYPE_CHAR_value, ZEND_FFI_TYPE_CHAR); + zend_string *const_TYPE_CHAR_name = zend_string_init_interned("TYPE_CHAR", sizeof("TYPE_CHAR") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_CHAR_name, &const_TYPE_CHAR_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_CHAR_name); + + zval const_TYPE_POINTER_value; + ZVAL_LONG(&const_TYPE_POINTER_value, ZEND_FFI_TYPE_POINTER); + zend_string *const_TYPE_POINTER_name = zend_string_init_interned("TYPE_POINTER", sizeof("TYPE_POINTER") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_POINTER_name, &const_TYPE_POINTER_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_POINTER_name); + + zval const_TYPE_FUNC_value; + ZVAL_LONG(&const_TYPE_FUNC_value, ZEND_FFI_TYPE_FUNC); + zend_string *const_TYPE_FUNC_name = zend_string_init_interned("TYPE_FUNC", sizeof("TYPE_FUNC") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_FUNC_name, &const_TYPE_FUNC_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_FUNC_name); + + zval const_TYPE_ARRAY_value; + ZVAL_LONG(&const_TYPE_ARRAY_value, ZEND_FFI_TYPE_ARRAY); + zend_string *const_TYPE_ARRAY_name = zend_string_init_interned("TYPE_ARRAY", sizeof("TYPE_ARRAY") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_ARRAY_name, &const_TYPE_ARRAY_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_ARRAY_name); + + zval const_TYPE_STRUCT_value; + ZVAL_LONG(&const_TYPE_STRUCT_value, ZEND_FFI_TYPE_STRUCT); + zend_string *const_TYPE_STRUCT_name = zend_string_init_interned("TYPE_STRUCT", sizeof("TYPE_STRUCT") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_TYPE_STRUCT_name, &const_TYPE_STRUCT_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_TYPE_STRUCT_name); + + zval const_ATTR_CONST_value; + ZVAL_LONG(&const_ATTR_CONST_value, ZEND_FFI_ATTR_CONST); + zend_string *const_ATTR_CONST_name = zend_string_init_interned("ATTR_CONST", sizeof("ATTR_CONST") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_CONST_name, &const_ATTR_CONST_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_CONST_name); + + zval const_ATTR_INCOMPLETE_TAG_value; + ZVAL_LONG(&const_ATTR_INCOMPLETE_TAG_value, ZEND_FFI_ATTR_INCOMPLETE_TAG); + zend_string *const_ATTR_INCOMPLETE_TAG_name = zend_string_init_interned("ATTR_INCOMPLETE_TAG", sizeof("ATTR_INCOMPLETE_TAG") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_INCOMPLETE_TAG_name, &const_ATTR_INCOMPLETE_TAG_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_INCOMPLETE_TAG_name); + + zval const_ATTR_VARIADIC_value; + ZVAL_LONG(&const_ATTR_VARIADIC_value, ZEND_FFI_ATTR_VARIADIC); + zend_string *const_ATTR_VARIADIC_name = zend_string_init_interned("ATTR_VARIADIC", sizeof("ATTR_VARIADIC") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_VARIADIC_name, &const_ATTR_VARIADIC_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_VARIADIC_name); + + zval const_ATTR_INCOMPLETE_ARRAY_value; + ZVAL_LONG(&const_ATTR_INCOMPLETE_ARRAY_value, ZEND_FFI_ATTR_INCOMPLETE_ARRAY); + zend_string *const_ATTR_INCOMPLETE_ARRAY_name = zend_string_init_interned("ATTR_INCOMPLETE_ARRAY", sizeof("ATTR_INCOMPLETE_ARRAY") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_INCOMPLETE_ARRAY_name, &const_ATTR_INCOMPLETE_ARRAY_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_INCOMPLETE_ARRAY_name); + + zval const_ATTR_VLA_value; + ZVAL_LONG(&const_ATTR_VLA_value, ZEND_FFI_ATTR_VLA); + zend_string *const_ATTR_VLA_name = zend_string_init_interned("ATTR_VLA", sizeof("ATTR_VLA") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_VLA_name, &const_ATTR_VLA_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_VLA_name); + + zval const_ATTR_UNION_value; + ZVAL_LONG(&const_ATTR_UNION_value, ZEND_FFI_ATTR_UNION); + zend_string *const_ATTR_UNION_name = zend_string_init_interned("ATTR_UNION", sizeof("ATTR_UNION") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_UNION_name, &const_ATTR_UNION_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_UNION_name); + + zval const_ATTR_PACKED_value; + ZVAL_LONG(&const_ATTR_PACKED_value, ZEND_FFI_ATTR_PACKED); + zend_string *const_ATTR_PACKED_name = zend_string_init_interned("ATTR_PACKED", sizeof("ATTR_PACKED") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_PACKED_name, &const_ATTR_PACKED_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_PACKED_name); + + zval const_ATTR_MS_STRUCT_value; + ZVAL_LONG(&const_ATTR_MS_STRUCT_value, ZEND_FFI_ATTR_MS_STRUCT); + zend_string *const_ATTR_MS_STRUCT_name = zend_string_init_interned("ATTR_MS_STRUCT", sizeof("ATTR_MS_STRUCT") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_MS_STRUCT_name, &const_ATTR_MS_STRUCT_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_MS_STRUCT_name); + + zval const_ATTR_GCC_STRUCT_value; + ZVAL_LONG(&const_ATTR_GCC_STRUCT_value, ZEND_FFI_ATTR_GCC_STRUCT); + zend_string *const_ATTR_GCC_STRUCT_name = zend_string_init_interned("ATTR_GCC_STRUCT", sizeof("ATTR_GCC_STRUCT") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ATTR_GCC_STRUCT_name, &const_ATTR_GCC_STRUCT_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ATTR_GCC_STRUCT_name); + + zval const_ABI_DEFAULT_value; + ZVAL_LONG(&const_ABI_DEFAULT_value, ZEND_FFI_ABI_DEFAULT); + zend_string *const_ABI_DEFAULT_name = zend_string_init_interned("ABI_DEFAULT", sizeof("ABI_DEFAULT") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_DEFAULT_name, &const_ABI_DEFAULT_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_DEFAULT_name); + + zval const_ABI_CDECL_value; + ZVAL_LONG(&const_ABI_CDECL_value, ZEND_FFI_ABI_CDECL); + zend_string *const_ABI_CDECL_name = zend_string_init_interned("ABI_CDECL", sizeof("ABI_CDECL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_CDECL_name, &const_ABI_CDECL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_CDECL_name); + + zval const_ABI_FASTCALL_value; + ZVAL_LONG(&const_ABI_FASTCALL_value, ZEND_FFI_ABI_FASTCALL); + zend_string *const_ABI_FASTCALL_name = zend_string_init_interned("ABI_FASTCALL", sizeof("ABI_FASTCALL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_FASTCALL_name, &const_ABI_FASTCALL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_FASTCALL_name); + + zval const_ABI_THISCALL_value; + ZVAL_LONG(&const_ABI_THISCALL_value, ZEND_FFI_ABI_THISCALL); + zend_string *const_ABI_THISCALL_name = zend_string_init_interned("ABI_THISCALL", sizeof("ABI_THISCALL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_THISCALL_name, &const_ABI_THISCALL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_THISCALL_name); + + zval const_ABI_STDCALL_value; + ZVAL_LONG(&const_ABI_STDCALL_value, ZEND_FFI_ABI_STDCALL); + zend_string *const_ABI_STDCALL_name = zend_string_init_interned("ABI_STDCALL", sizeof("ABI_STDCALL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_STDCALL_name, &const_ABI_STDCALL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_STDCALL_name); + + zval const_ABI_PASCAL_value; + ZVAL_LONG(&const_ABI_PASCAL_value, ZEND_FFI_ABI_PASCAL); + zend_string *const_ABI_PASCAL_name = zend_string_init_interned("ABI_PASCAL", sizeof("ABI_PASCAL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_PASCAL_name, &const_ABI_PASCAL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_PASCAL_name); + + zval const_ABI_REGISTER_value; + ZVAL_LONG(&const_ABI_REGISTER_value, ZEND_FFI_ABI_REGISTER); + zend_string *const_ABI_REGISTER_name = zend_string_init_interned("ABI_REGISTER", sizeof("ABI_REGISTER") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_REGISTER_name, &const_ABI_REGISTER_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_REGISTER_name); + + zval const_ABI_MS_value; + ZVAL_LONG(&const_ABI_MS_value, ZEND_FFI_ABI_MS); + zend_string *const_ABI_MS_name = zend_string_init_interned("ABI_MS", sizeof("ABI_MS") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_MS_name, &const_ABI_MS_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_MS_name); + + zval const_ABI_SYSV_value; + ZVAL_LONG(&const_ABI_SYSV_value, ZEND_FFI_ABI_SYSV); + zend_string *const_ABI_SYSV_name = zend_string_init_interned("ABI_SYSV", sizeof("ABI_SYSV") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_SYSV_name, &const_ABI_SYSV_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_SYSV_name); + + zval const_ABI_VECTORCALL_value; + ZVAL_LONG(&const_ABI_VECTORCALL_value, ZEND_FFI_ABI_VECTORCALL); + zend_string *const_ABI_VECTORCALL_name = zend_string_init_interned("ABI_VECTORCALL", sizeof("ABI_VECTORCALL") - 1, 1); + zend_declare_class_constant_ex(class_entry, const_ABI_VECTORCALL_name, &const_ABI_VECTORCALL_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(const_ABI_VECTORCALL_name); + return class_entry; }