Lines Matching refs:dcl

222 static void zend_ffi_finalize_type(zend_ffi_dcl *dcl);
3186 static bool zend_ffi_subst_old_type(zend_ffi_type **dcl, zend_ffi_type *old, zend_ffi_type *type) /… in zend_ffi_subst_old_type() argument
3191 if (ZEND_FFI_TYPE(*dcl) == type) { in zend_ffi_subst_old_type()
3192 *dcl = old; in zend_ffi_subst_old_type()
3195 dcl_type = *dcl; in zend_ffi_subst_old_type()
3593 void zend_ffi_cleanup_dcl(zend_ffi_dcl *dcl) /* {{{ */ in zend_ffi_cleanup_dcl() argument
3595 if (dcl) { in zend_ffi_cleanup_dcl()
3596 zend_ffi_type_dtor(dcl->type); in zend_ffi_cleanup_dcl()
3597 dcl->type = NULL; in zend_ffi_cleanup_dcl()
3695 void zend_ffi_validate_type_name(zend_ffi_dcl *dcl) /* {{{ */ in zend_ffi_validate_type_name() argument
3697 zend_ffi_finalize_type(dcl); in zend_ffi_validate_type_name()
3698 if (zend_ffi_validate_var_type(ZEND_FFI_TYPE(dcl->type), 0) == FAILURE) { in zend_ffi_validate_type_name()
3699 zend_ffi_cleanup_dcl(dcl); in zend_ffi_validate_type_name()
3705 static bool zend_ffi_subst_type(zend_ffi_type **dcl, zend_ffi_type *type) /* {{{ */ in zend_ffi_subst_type() argument
3710 if (*dcl == type) { in zend_ffi_subst_type()
3711 *dcl = ZEND_FFI_TYPE_MAKE_OWNED(type); in zend_ffi_subst_type()
3714 dcl_type = *dcl; in zend_ffi_subst_type()
3747 static void zend_ffi_tags_cleanup(zend_ffi_dcl *dcl) /* {{{ */ in zend_ffi_tags_cleanup() argument
3753 zend_ffi_subst_type(&dcl->type, type); in zend_ffi_tags_cleanup()
3799 zend_ffi_dcl dcl = ZEND_FFI_ATTR_INIT; in ZEND_METHOD() local
3814 if (zend_ffi_parse_type(ZSTR_VAL(type_def), ZSTR_LEN(type_def), &dcl) == FAILURE) { in ZEND_METHOD()
3815 zend_ffi_type_dtor(dcl.type); in ZEND_METHOD()
3829 type = ZEND_FFI_TYPE(dcl.type); in ZEND_METHOD()
3830 if (dcl.attr & ZEND_FFI_ATTR_CONST) { in ZEND_METHOD()
3835 zend_ffi_tags_cleanup(&dcl); in ZEND_METHOD()
3845 type_ptr = dcl.type; in ZEND_METHOD()
3949 zend_ffi_dcl dcl = ZEND_FFI_ATTR_INIT; in ZEND_METHOD() local
3964 if (zend_ffi_parse_type(ZSTR_VAL(type_def), ZSTR_LEN(type_def), &dcl) == FAILURE) { in ZEND_METHOD()
3965 zend_ffi_type_dtor(dcl.type); in ZEND_METHOD()
3979 type = ZEND_FFI_TYPE(dcl.type); in ZEND_METHOD()
3980 if (dcl.attr & ZEND_FFI_ATTR_CONST) { in ZEND_METHOD()
3985 zend_ffi_tags_cleanup(&dcl); in ZEND_METHOD()
3995 type_ptr = dcl.type; in ZEND_METHOD()
4107 zend_ffi_dcl dcl = ZEND_FFI_ATTR_INIT; in ZEND_METHOD() local
4136 if (zend_ffi_parse_type(ZSTR_VAL(type_def), ZSTR_LEN(type_def), &dcl) == FAILURE) { in ZEND_METHOD()
4137 zend_ffi_type_dtor(dcl.type); in ZEND_METHOD()
4152 zend_ffi_tags_cleanup(&dcl); in ZEND_METHOD()
4163 ctype->type = dcl.type; in ZEND_METHOD()
5739 static void zend_ffi_finalize_type(zend_ffi_dcl *dcl) /* {{{ */ argument
5741 if (!dcl->type) {
5742 switch (dcl->flags & ZEND_FFI_DCL_TYPE_SPECIFIERS) {
5744 dcl->type = (zend_ffi_type*)&zend_ffi_type_void;
5747 dcl->type = (zend_ffi_type*)&zend_ffi_type_char;
5750 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint8;
5754 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint8;
5760 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint16;
5764 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint16;
5769 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint32;
5773 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint32;
5780 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint32;
5782 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint64;
5788 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint32;
5790 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint64;
5797 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint64;
5801 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint64;
5804 dcl->type = (zend_ffi_type*)&zend_ffi_type_float;
5807 dcl->type = (zend_ffi_type*)&zend_ffi_type_double;
5811 dcl->type = (zend_ffi_type*)&zend_ffi_type_double;
5813 dcl->type = (zend_ffi_type*)&zend_ffi_type_long_double;
5825 dcl->flags &= ~ZEND_FFI_DCL_TYPE_SPECIFIERS;
5826 dcl->flags |= ZEND_FFI_DCL_TYPEDEF_NAME;
5850 void zend_ffi_resolve_typedef(const char *name, size_t name_len, zend_ffi_dcl *dcl) /* {{{ */ argument
5858 dcl->type = ZEND_FFI_TYPE(sym->type);
5860 dcl->attr |= ZEND_FFI_ATTR_CONST;
5867 dcl->type = type;
5914 void zend_ffi_make_enum_type(zend_ffi_dcl *dcl) /* {{{ */ argument
5918 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_ENUM_ATTRS);
5929 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
5930 dcl->attr &= ~ZEND_FFI_ENUM_ATTRS;
6044 void zend_ffi_make_struct_type(zend_ffi_dcl *dcl) /* {{{ */ argument
6048 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_STRUCT_ATTRS);
6050 type->align = dcl->align > 1 ? dcl->align : 1;
6051 if (dcl->flags & ZEND_FFI_DCL_UNION) {
6054 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6057 dcl->attr &= ~ZEND_FFI_STRUCT_ATTRS;
6058 dcl->align = 0;
6310 void zend_ffi_adjust_struct_size(zend_ffi_dcl *dcl) /* {{{ */ argument
6312 zend_ffi_type *struct_type = ZEND_FFI_TYPE(dcl->type);
6315 if (dcl->align > struct_type->align) {
6316 struct_type->align = dcl->align;
6321 dcl->align = 0;
6325 void zend_ffi_make_pointer_type(zend_ffi_dcl *dcl) /* {{{ */ argument
6329 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_POINTER_ATTRS);
6332 zend_ffi_finalize_type(dcl);
6333 if (zend_ffi_validate_vla(ZEND_FFI_TYPE(dcl->type)) == FAILURE) {
6334 zend_ffi_cleanup_dcl(dcl);
6337 type->pointer.type = dcl->type;
6338 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6339 dcl->flags &= ~ZEND_FFI_DCL_TYPE_QUALIFIERS;
6340 dcl->attr &= ~ZEND_FFI_POINTER_ATTRS;
6341 dcl->align = 0;
6358 void zend_ffi_make_array_type(zend_ffi_dcl *dcl, zend_ffi_val *len) /* {{{ */ argument
6364 zend_ffi_finalize_type(dcl);
6365 element_type = ZEND_FFI_TYPE(dcl->type);
6376 zend_ffi_cleanup_dcl(dcl);
6381 zend_ffi_cleanup_dcl(dcl);
6387 zend_ffi_cleanup_dcl(dcl);
6393 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_ARRAY_ATTRS);
6396 type->array.type = dcl->type;
6398 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6399 dcl->flags &= ~ZEND_FFI_DCL_TYPE_QUALIFIERS;
6400 dcl->attr &= ~ZEND_FFI_ARRAY_ATTRS;
6401 dcl->align = 0;
6418 void zend_ffi_make_func_type(zend_ffi_dcl *dcl, HashTable *args, zend_ffi_dcl *nested_dcl) /* {{{ */ argument
6423 zend_ffi_finalize_type(dcl);
6424 ret_type = ZEND_FFI_TYPE(dcl->type);
6435 zend_ffi_cleanup_dcl(dcl);
6453 if (dcl->abi == ZEND_FFI_ABI_VECTORCALL && args) {
6465 zend_ffi_cleanup_dcl(dcl);
6477 zend_ffi_cleanup_dcl(dcl);
6487 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_FUNC_ATTRS);
6490 type->func.ret_type = dcl->type;
6491 switch (dcl->abi) {
6549 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6550 dcl->attr &= ~ZEND_FFI_FUNC_ATTRS;
6551 dcl->align = 0;
6552 dcl->abi = 0;
6599 void zend_ffi_declare(const char *name, size_t name_len, zend_ffi_dcl *dcl) /* {{{ */ argument
6607 zend_ffi_finalize_type(dcl);
6610 if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_TYPEDEF
6612 && zend_ffi_is_same_type(ZEND_FFI_TYPE(sym->type), ZEND_FFI_TYPE(dcl->type))
6613 && sym->is_const == (bool)(dcl->attr & ZEND_FFI_ATTR_CONST)) {
6615 zend_ffi_type_dtor(dcl->type);
6617 } else if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == 0
6618 || (dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_EXTERN) {
6619 zend_ffi_type *type = ZEND_FFI_TYPE(dcl->type);
6625 zend_ffi_type_dtor(dcl->type);
6631 && sym->is_const == (bool)(dcl->attr & ZEND_FFI_ATTR_CONST)) {
6633 zend_ffi_type_dtor(dcl->type);
6640 if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_TYPEDEF) {
6641 if (zend_ffi_validate_vla(ZEND_FFI_TYPE(dcl->type)) == FAILURE) {
6642 zend_ffi_cleanup_dcl(dcl);
6645 if (dcl->align && dcl->align > ZEND_FFI_TYPE(dcl->type)->align) {
6646 if (ZEND_FFI_TYPE_IS_OWNED(dcl->type)) {
6647 ZEND_FFI_TYPE(dcl->type)->align = dcl->align;
6651 memcpy(type, ZEND_FFI_TYPE(dcl->type), sizeof(zend_ffi_type));
6653 type->align = dcl->align;
6654 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6659 sym->type = dcl->type;
6660 sym->is_const = (bool)(dcl->attr & ZEND_FFI_ATTR_CONST);
6661 dcl->type = ZEND_FFI_TYPE(dcl->type); /* reset "owned" flag */
6666 type = ZEND_FFI_TYPE(dcl->type);
6667 …if (zend_ffi_validate_type(type, (dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_EXTERN,…
6668 zend_ffi_cleanup_dcl(dcl);
6671 if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == 0 ||
6672 (dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_EXTERN) {
6675 sym->type = dcl->type;
6676 sym->is_const = (bool)(dcl->attr & ZEND_FFI_ATTR_CONST);
6677 dcl->type = type; /* reset "owned" flag */
6681 zend_ffi_type_dtor(dcl->type);
6688 void zend_ffi_declare_tag(const char *name, size_t name_len, zend_ffi_dcl *dcl, bool incomplete) /*… argument
6701 if (dcl->flags & ZEND_FFI_DCL_STRUCT) {
6709 } else if (dcl->flags & ZEND_FFI_DCL_UNION) {
6717 } else if (dcl->flags & ZEND_FFI_DCL_ENUM) {
6729 dcl->type = type;
6737 if (dcl->flags & ZEND_FFI_DCL_STRUCT) {
6739 zend_ffi_make_struct_type(dcl);
6740 type = ZEND_FFI_TYPE(dcl->type);
6742 } else if (dcl->flags & ZEND_FFI_DCL_UNION) {
6744 zend_ffi_make_struct_type(dcl);
6745 type = ZEND_FFI_TYPE(dcl->type);
6747 } else if (dcl->flags & ZEND_FFI_DCL_ENUM) {
6749 zend_ffi_make_enum_type(dcl);
6750 type = ZEND_FFI_TYPE(dcl->type);
6755 tag->type = ZEND_FFI_TYPE_MAKE_OWNED(dcl->type);
6756 dcl->type = ZEND_FFI_TYPE(dcl->type);
6758 dcl->type->attr |= ZEND_FFI_ATTR_INCOMPLETE_TAG;
6766 void zend_ffi_set_abi(zend_ffi_dcl *dcl, uint16_t abi) /* {{{ */ argument
6768 if (dcl->abi != ZEND_FFI_ABI_DEFAULT) {
6771 dcl->abi = abi;
6800 void zend_ffi_add_attribute(zend_ffi_dcl *dcl, const char *name, size_t name_len) /* {{{ */ argument
6832 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_CDECL);
6835 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_FASTCALL);
6838 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_THISCALL);
6841 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_STDCALL);
6844 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_MS);
6847 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_SYSV);
6850 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_VECTORCALL);
6853 dcl->align = __BIGGEST_ALIGNMENT__;
6856 dcl->attr |= ZEND_FFI_ATTR_PACKED;
6859 dcl->attr |= ZEND_FFI_ATTR_MS_STRUCT;
6862 dcl->attr |= ZEND_FFI_ATTR_GCC_STRUCT;
6883 void zend_ffi_add_attribute_value(zend_ffi_dcl *dcl, const char *name, size_t name_len, int n, zend… argument
6918 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_REGISTER);
6927 dcl->align = val->i64;
6948 …if (dcl->flags & (ZEND_FFI_DCL_TYPE_SPECIFIERS-(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_…
6951dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6952 dcl->flags |= ZEND_FFI_DCL_CHAR;
6955dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6956 dcl->flags |= ZEND_FFI_DCL_SHORT;
6959dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6960 dcl->flags |= ZEND_FFI_DCL_INT;
6963dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6965 dcl->flags |= ZEND_FFI_DCL_LONG;
6967 dcl->flags |= ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_LONG_LONG;
6972 …if (dcl->flags & (ZEND_FFI_DCL_TYPE_SPECIFIERS-(ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_…
6975 dcl->flags &= ~(ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_DOUBLE);
6976 dcl->flags |= ZEND_FFI_DCL_FLOAT;
6979 dcl->flags &= ~(ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_DOUBLE);
6980 dcl->flags |= ZEND_FFI_DCL_DOUBLE;
6998 void zend_ffi_add_msvc_attribute_value(zend_ffi_dcl *dcl, const char *name, size_t name_len, zend_f… argument
7003 dcl->align = val->i64;
7057 void zend_ffi_nested_declaration(zend_ffi_dcl *dcl, zend_ffi_dcl *nested_dcl) /* {{{ */ argument
7060 zend_ffi_finalize_type(dcl);
7062 nested_dcl->type = dcl->type;
7064 if (zend_ffi_nested_type(dcl->type, nested_dcl->type) == FAILURE) {
7069 dcl->type = nested_dcl->type;
7073 void zend_ffi_align_as_type(zend_ffi_dcl *dcl, zend_ffi_dcl *align_dcl) /* {{{ */ argument
7076 dcl->align = MAX(align_dcl->align, ZEND_FFI_TYPE(align_dcl->type)->align);
7080 void zend_ffi_align_as_val(zend_ffi_dcl *dcl, zend_ffi_val *align_val) /* {{{ */ argument
7085 dcl->align = zend_ffi_type_uint32.align;
7089 dcl->align = zend_ffi_type_uint64.align;
7092 dcl->align = zend_ffi_type_float.align;
7095 dcl->align = zend_ffi_type_double.align;
7099 dcl->align = zend_ffi_type_long_double.align;
7104 dcl->align = zend_ffi_type_char.align;
7457 void zend_ffi_expr_cast(zend_ffi_val *val, zend_ffi_dcl *dcl) /* {{{ */ argument
7459 zend_ffi_finalize_type(dcl);
7460 switch (ZEND_FFI_TYPE(dcl->type)->kind) {
7587 zend_ffi_type_dtor(dcl->type);
7680 void zend_ffi_expr_sizeof_type(zend_ffi_val *val, zend_ffi_dcl *dcl) /* {{{ */ argument
7684 zend_ffi_finalize_type(dcl);
7685 type = ZEND_FFI_TYPE(dcl->type);
7688 zend_ffi_type_dtor(dcl->type);
7723 void zend_ffi_expr_alignof_type(zend_ffi_val *val, zend_ffi_dcl *dcl) /* {{{ */ argument
7725 zend_ffi_finalize_type(dcl);
7727 val->u64 = ZEND_FFI_TYPE(dcl->type)->align;
7728 zend_ffi_type_dtor(dcl->type);