21#define phpext_ffi_ptr &ffi_module_entry
50 unsigned const
char *
buf;
51 unsigned const
char *
end;
52 unsigned const
char *
pos;
66# define PHP_FFI_API __declspec(dllexport)
67#elif defined(__GNUC__) && __GNUC__ >= 4
68# define PHP_FFI_API __attribute__ ((visibility("default")))
73#define FFI_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(ffi, v)
75#define ZEND_FFI_DCL_VOID (1<<0)
76#define ZEND_FFI_DCL_CHAR (1<<1)
77#define ZEND_FFI_DCL_SHORT (1<<2)
78#define ZEND_FFI_DCL_INT (1<<3)
79#define ZEND_FFI_DCL_LONG (1<<4)
80#define ZEND_FFI_DCL_LONG_LONG (1<<5)
81#define ZEND_FFI_DCL_FLOAT (1<<6)
82#define ZEND_FFI_DCL_DOUBLE (1<<7)
83#define ZEND_FFI_DCL_SIGNED (1<<8)
84#define ZEND_FFI_DCL_UNSIGNED (1<<9)
85#define ZEND_FFI_DCL_BOOL (1<<10)
86#define ZEND_FFI_DCL_COMPLEX (1<<11)
88#define ZEND_FFI_DCL_STRUCT (1<<12)
89#define ZEND_FFI_DCL_UNION (1<<13)
90#define ZEND_FFI_DCL_ENUM (1<<14)
91#define ZEND_FFI_DCL_TYPEDEF_NAME (1<<15)
93#define ZEND_FFI_DCL_TYPE_SPECIFIERS \
94 (ZEND_FFI_DCL_VOID|ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT \
95 |ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_LONG_LONG \
96 |ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_DOUBLE|ZEND_FFI_DCL_SIGNED \
97 |ZEND_FFI_DCL_UNSIGNED|ZEND_FFI_DCL_BOOL|ZEND_FFI_DCL_COMPLEX \
98 |ZEND_FFI_DCL_STRUCT|ZEND_FFI_DCL_UNION|ZEND_FFI_DCL_ENUM \
99 |ZEND_FFI_DCL_TYPEDEF_NAME)
101#define ZEND_FFI_DCL_TYPEDEF (1<<16)
102#define ZEND_FFI_DCL_EXTERN (1<<17)
103#define ZEND_FFI_DCL_STATIC (1<<18)
104#define ZEND_FFI_DCL_AUTO (1<<19)
105#define ZEND_FFI_DCL_REGISTER (1<<20)
107#define ZEND_FFI_DCL_STORAGE_CLASS \
108 (ZEND_FFI_DCL_TYPEDEF|ZEND_FFI_DCL_EXTERN|ZEND_FFI_DCL_STATIC \
109 |ZEND_FFI_DCL_AUTO|ZEND_FFI_DCL_REGISTER)
111#define ZEND_FFI_DCL_CONST (1<<21)
112#define ZEND_FFI_DCL_RESTRICT (1<<22)
113#define ZEND_FFI_DCL_VOLATILE (1<<23)
114#define ZEND_FFI_DCL_ATOMIC (1<<24)
116#define ZEND_FFI_DCL_TYPE_QUALIFIERS \
117 (ZEND_FFI_DCL_CONST|ZEND_FFI_DCL_RESTRICT|ZEND_FFI_DCL_VOLATILE \
118 |ZEND_FFI_DCL_ATOMIC)
120#define ZEND_FFI_DCL_INLINE (1<<25)
121#define ZEND_FFI_DCL_NO_RETURN (1<<26)
123#define ZEND_FFI_ABI_DEFAULT 0
125#define ZEND_FFI_ABI_CDECL 1
126#define ZEND_FFI_ABI_FASTCALL 2
127#define ZEND_FFI_ABI_THISCALL 3
128#define ZEND_FFI_ABI_STDCALL 4
129#define ZEND_FFI_ABI_PASCAL 5
130#define ZEND_FFI_ABI_REGISTER 6
131#define ZEND_FFI_ABI_MS 7
132#define ZEND_FFI_ABI_SYSV 8
133#define ZEND_FFI_ABI_VECTORCALL 9
135#define ZEND_FFI_ATTR_CONST (1<<0)
136#define ZEND_FFI_ATTR_INCOMPLETE_TAG (1<<1)
137#define ZEND_FFI_ATTR_VARIADIC (1<<2)
138#define ZEND_FFI_ATTR_INCOMPLETE_ARRAY (1<<3)
139#define ZEND_FFI_ATTR_VLA (1<<4)
140#define ZEND_FFI_ATTR_UNION (1<<5)
141#define ZEND_FFI_ATTR_PACKED (1<<6)
142#define ZEND_FFI_ATTR_MS_STRUCT (1<<7)
143#define ZEND_FFI_ATTR_GCC_STRUCT (1<<8)
145#define ZEND_FFI_ATTR_PERSISTENT (1<<9)
146#define ZEND_FFI_ATTR_STORED (1<<10)
148#define ZEND_FFI_STRUCT_ATTRS \
149 (ZEND_FFI_ATTR_UNION|ZEND_FFI_ATTR_PACKED|ZEND_FFI_ATTR_MS_STRUCT \
150 |ZEND_FFI_ATTR_GCC_STRUCT)
152#define ZEND_FFI_ENUM_ATTRS \
153 (ZEND_FFI_ATTR_PACKED)
155#define ZEND_FFI_ARRAY_ATTRS \
156 (ZEND_FFI_ATTR_CONST|ZEND_FFI_ATTR_VLA|ZEND_FFI_ATTR_INCOMPLETE_ARRAY)
158#define ZEND_FFI_FUNC_ATTRS \
159 (ZEND_FFI_ATTR_VARIADIC)
161#define ZEND_FFI_POINTER_ATTRS \
162 (ZEND_FFI_ATTR_CONST)
172#define ZEND_FFI_ATTR_INIT {0, 0, 0, 0, NULL}
189#ifdef HAVE_LONG_DOUBLE
zend_module_entry ffi_module_entry
zend_ffi_ctype_name_buf buf
void zend_ffi_resolve_typedef(const char *name, size_t name_len, zend_ffi_dcl *dcl)
void zend_ffi_add_arg(HashTable **args, const char *name, size_t name_len, zend_ffi_dcl *arg_dcl)
void zend_ffi_expr_cast(zend_ffi_val *val, zend_ffi_dcl *dcl)
bool zend_ffi_is_typedef_name(const char *name, size_t name_len)
void zend_ffi_expr_plus(zend_ffi_val *val)
void zend_ffi_expr_sizeof_val(zend_ffi_val *val)
uint32_t default_type_attr
void zend_ffi_cleanup_dcl(zend_ffi_dcl *dcl)
void zend_ffi_align_as_val(zend_ffi_dcl *dcl, zend_ffi_val *align_val)
@ ZEND_FFI_VAL_LONG_DOUBLE
void zend_ffi_add_enum_val(zend_ffi_dcl *enum_dcl, const char *name, size_t name_len, zend_ffi_val *val, int64_t *min, int64_t *max, int64_t *last)
zend_result zend_ffi_parse_decl(const char *str, size_t len)
enum _zend_ffi_val_kind zend_ffi_val_kind
void zend_ffi_expr_alignof_val(zend_ffi_val *val)
zend_result zend_ffi_parse_type(const char *str, size_t len, zend_ffi_dcl *dcl)
void zend_ffi_expr_neg(zend_ffi_val *val)
void zend_ffi_expr_alignof_type(zend_ffi_val *val, zend_ffi_dcl *dcl)
_zend_ffi_api_restriction
void zend_ffi_expr_bool_or(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_add_bit_field(zend_ffi_dcl *struct_dcl, const char *name, size_t name_len, zend_ffi_dcl *field_dcl, zend_ffi_val *bits)
void zend_ffi_adjust_struct_size(zend_ffi_dcl *dcl)
void zend_ffi_expr_div(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_shift_left(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_bw_or(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_is_less_or_equal(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_make_pointer_type(zend_ffi_dcl *dcl)
struct _zend_ffi_val zend_ffi_val
unsigned const char * end
void ZEND_NORETURN zend_ffi_parser_error(const char *msg,...)
void zend_ffi_add_anonymous_field(zend_ffi_dcl *struct_dcl, zend_ffi_dcl *field_dcl)
void zend_ffi_expr_is_not_equal(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_bw_not(zend_ffi_val *val)
void zend_ffi_declare(const char *name, size_t name_len, zend_ffi_dcl *dcl)
unsigned const char * pos
void zend_ffi_nested_declaration(zend_ffi_dcl *dcl, zend_ffi_dcl *nested_dcl)
void zend_ffi_expr_is_greater_or_equal(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_sizeof_type(zend_ffi_val *val, zend_ffi_dcl *dcl)
void zend_ffi_expr_mul(zend_ffi_val *val, zend_ffi_val *op2)
struct _zend_ffi_type zend_ffi_type
void zend_ffi_add_attribute_value(zend_ffi_dcl *dcl, const char *name, size_t name_len, int n, zend_ffi_val *val)
void zend_ffi_expr_mod(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_bool_and(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_shift_right(zend_ffi_val *val, zend_ffi_val *op2)
struct _zend_ffi_dcl zend_ffi_dcl
void zend_ffi_make_struct_type(zend_ffi_dcl *dcl)
void zend_ffi_expr_is_less(zend_ffi_val *val, zend_ffi_val *op2)
unsigned const char * text
void zend_ffi_expr_bw_xor(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_make_func_type(zend_ffi_dcl *dcl, HashTable *args, zend_ffi_dcl *nested_dcl)
void zend_ffi_val_character(zend_ffi_val *val, const char *str, size_t str_len)
void zend_ffi_validate_type_name(zend_ffi_dcl *dcl)
void zend_ffi_expr_bw_and(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_set_abi(zend_ffi_dcl *dcl, uint16_t abi)
void zend_ffi_make_enum_type(zend_ffi_dcl *dcl)
void zend_ffi_resolve_const(const char *name, size_t name_len, zend_ffi_val *val)
void zend_ffi_declare_tag(const char *name, size_t name_len, zend_ffi_dcl *dcl, bool incomplete)
void zend_ffi_val_number(zend_ffi_val *val, int base, const char *str, size_t str_len)
void zend_ffi_add_field(zend_ffi_dcl *struct_dcl, const char *name, size_t name_len, zend_ffi_dcl *field_dcl)
void zend_ffi_val_float_number(zend_ffi_val *val, const char *str, size_t str_len)
void zend_ffi_expr_is_greater(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_expr_bool_not(zend_ffi_val *val)
void zend_ffi_val_string(zend_ffi_val *val, const char *str, size_t str_len)
void zend_ffi_add_msvc_attribute_value(zend_ffi_dcl *dcl, const char *name, size_t name_len, zend_ffi_val *val)
void zend_ffi_expr_sub(zend_ffi_val *val, zend_ffi_val *op2)
zend_ffi_api_restriction restriction
void zend_ffi_add_attribute(zend_ffi_dcl *dcl, const char *name, size_t name_len)
void zend_ffi_make_array_type(zend_ffi_dcl *dcl, zend_ffi_val *len)
void zend_ffi_expr_conditional(zend_ffi_val *val, zend_ffi_val *op2, zend_ffi_val *op3)
enum _zend_ffi_api_restriction zend_ffi_api_restriction
void zend_ffi_expr_is_equal(zend_ffi_val *val, zend_ffi_val *op2)
void zend_ffi_align_as_type(zend_ffi_dcl *dcl, zend_ffi_dcl *align_dcl)
void zend_ffi_expr_add(zend_ffi_val *val, zend_ffi_val *op2)
#define ZEND_END_MODULE_GLOBALS(module_name)
#define ZEND_EXTERN_MODULE_GLOBALS(module_name)
#define ZEND_BEGIN_MODULE_GLOBALS(module_name)
struct _zend_module_entry zend_module_entry
#define zend_always_inline
struct _zend_array HashTable
ZEND_RESULT_CODE zend_result