Lines Matching refs:dcl

209 static void zend_ffi_finalize_type(zend_ffi_dcl *dcl);
3079 static int zend_ffi_subst_old_type(zend_ffi_type **dcl, zend_ffi_type *old, zend_ffi_type *type) /*… in zend_ffi_subst_old_type() argument
3084 if (ZEND_FFI_TYPE(*dcl) == type) { in zend_ffi_subst_old_type()
3085 *dcl = old; in zend_ffi_subst_old_type()
3088 dcl_type = *dcl; in zend_ffi_subst_old_type()
3471 static void zend_ffi_cleanup_dcl(zend_ffi_dcl *dcl) /* {{{ */ in zend_ffi_cleanup_dcl() argument
3473 if (dcl) { in zend_ffi_cleanup_dcl()
3474 zend_ffi_type_dtor(dcl->type); in zend_ffi_cleanup_dcl()
3475 dcl->type = NULL; in zend_ffi_cleanup_dcl()
3573 void zend_ffi_validate_type_name(zend_ffi_dcl *dcl) /* {{{ */ in zend_ffi_validate_type_name() argument
3575 zend_ffi_finalize_type(dcl); in zend_ffi_validate_type_name()
3576 if (zend_ffi_validate_var_type(ZEND_FFI_TYPE(dcl->type), 0) != SUCCESS) { in zend_ffi_validate_type_name()
3577 zend_ffi_cleanup_dcl(dcl); in zend_ffi_validate_type_name()
3583 static int zend_ffi_subst_type(zend_ffi_type **dcl, zend_ffi_type *type) /* {{{ */ in zend_ffi_subst_type() argument
3588 if (*dcl == type) { in zend_ffi_subst_type()
3589 *dcl = ZEND_FFI_TYPE_MAKE_OWNED(type); in zend_ffi_subst_type()
3592 dcl_type = *dcl; in zend_ffi_subst_type()
3625 static void zend_ffi_tags_cleanup(zend_ffi_dcl *dcl) /* {{{ */ in zend_ffi_tags_cleanup() argument
3631 zend_ffi_subst_type(&dcl->type, type); in zend_ffi_tags_cleanup()
3669 zend_ffi_dcl dcl = ZEND_FFI_ATTR_INIT; in ZEND_METHOD() local
3682 if (zend_ffi_parse_type(ZSTR_VAL(type_def), ZSTR_LEN(type_def), &dcl) != SUCCESS) { in ZEND_METHOD()
3683 zend_ffi_type_dtor(dcl.type); in ZEND_METHOD()
3699 type = ZEND_FFI_TYPE(dcl.type); in ZEND_METHOD()
3700 if (dcl.attr & ZEND_FFI_ATTR_CONST) { in ZEND_METHOD()
3706 zend_ffi_tags_cleanup(&dcl); in ZEND_METHOD()
3717 type_ptr = dcl.type; in ZEND_METHOD()
3813 zend_ffi_dcl dcl = ZEND_FFI_ATTR_INIT; in ZEND_METHOD() local
3826 if (zend_ffi_parse_type(ZSTR_VAL(type_def), ZSTR_LEN(type_def), &dcl) != SUCCESS) { in ZEND_METHOD()
3827 zend_ffi_type_dtor(dcl.type); in ZEND_METHOD()
3843 type = ZEND_FFI_TYPE(dcl.type); in ZEND_METHOD()
3844 if (dcl.attr & ZEND_FFI_ATTR_CONST) { in ZEND_METHOD()
3850 zend_ffi_tags_cleanup(&dcl); in ZEND_METHOD()
3861 type_ptr = dcl.type; in ZEND_METHOD()
3973 zend_ffi_dcl dcl = ZEND_FFI_ATTR_INIT; in ZEND_METHOD() local
3992 if (zend_ffi_parse_type(ZSTR_VAL(type_def), ZSTR_LEN(type_def), &dcl) != SUCCESS) { in ZEND_METHOD()
3993 zend_ffi_type_dtor(dcl.type); in ZEND_METHOD()
4011 zend_ffi_tags_cleanup(&dcl); in ZEND_METHOD()
4023 ctype->type = dcl.type; in ZEND_METHOD()
5272 static void zend_ffi_finalize_type(zend_ffi_dcl *dcl) /* {{{ */ argument
5274 if (!dcl->type) {
5275 switch (dcl->flags & ZEND_FFI_DCL_TYPE_SPECIFIERS) {
5277 dcl->type = (zend_ffi_type*)&zend_ffi_type_void;
5280 dcl->type = (zend_ffi_type*)&zend_ffi_type_char;
5283 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint8;
5287 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint8;
5293 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint16;
5297 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint16;
5302 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint32;
5306 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint32;
5313 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint32;
5315 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint64;
5321 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint32;
5323 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint64;
5330 dcl->type = (zend_ffi_type*)&zend_ffi_type_sint64;
5334 dcl->type = (zend_ffi_type*)&zend_ffi_type_uint64;
5337 dcl->type = (zend_ffi_type*)&zend_ffi_type_float;
5340 dcl->type = (zend_ffi_type*)&zend_ffi_type_double;
5344 dcl->type = (zend_ffi_type*)&zend_ffi_type_double;
5346 dcl->type = (zend_ffi_type*)&zend_ffi_type_long_double;
5358 dcl->flags &= ~ZEND_FFI_DCL_TYPE_SPECIFIERS;
5359 dcl->flags |= ZEND_FFI_DCL_TYPEDEF_NAME;
5383 void zend_ffi_resolve_typedef(const char *name, size_t name_len, zend_ffi_dcl *dcl) /* {{{ */ argument
5391 dcl->type = ZEND_FFI_TYPE(sym->type);;
5393 dcl->attr |= ZEND_FFI_ATTR_CONST;
5400 dcl->type = type;
5447 void zend_ffi_make_enum_type(zend_ffi_dcl *dcl) /* {{{ */ argument
5451 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_ENUM_ATTRS);
5462 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
5463 dcl->attr &= ~ZEND_FFI_ENUM_ATTRS;
5577 void zend_ffi_make_struct_type(zend_ffi_dcl *dcl) /* {{{ */ argument
5581 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_STRUCT_ATTRS);
5583 type->align = dcl->align > 1 ? dcl->align : 1;
5584 if (dcl->flags & ZEND_FFI_DCL_UNION) {
5587 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
5590 dcl->attr &= ~ZEND_FFI_STRUCT_ATTRS;
5591 dcl->align = 0;
5843 void zend_ffi_adjust_struct_size(zend_ffi_dcl *dcl) /* {{{ */ argument
5845 zend_ffi_type *struct_type = ZEND_FFI_TYPE(dcl->type);
5848 if (dcl->align > struct_type->align) {
5849 struct_type->align = dcl->align;
5854 dcl->align = 0;
5858 void zend_ffi_make_pointer_type(zend_ffi_dcl *dcl) /* {{{ */ argument
5862 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_POINTER_ATTRS);
5865 zend_ffi_finalize_type(dcl);
5866 if (zend_ffi_validate_vla(ZEND_FFI_TYPE(dcl->type)) != SUCCESS) {
5867 zend_ffi_cleanup_dcl(dcl);
5870 type->pointer.type = dcl->type;
5871 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
5872 dcl->flags &= ~ZEND_FFI_DCL_TYPE_QUALIFIERS;
5873 dcl->attr &= ~ZEND_FFI_POINTER_ATTRS;
5874 dcl->align = 0;
5891 void zend_ffi_make_array_type(zend_ffi_dcl *dcl, zend_ffi_val *len) /* {{{ */ argument
5897 zend_ffi_finalize_type(dcl);
5898 element_type = ZEND_FFI_TYPE(dcl->type);
5909 zend_ffi_cleanup_dcl(dcl);
5914 zend_ffi_cleanup_dcl(dcl);
5920 zend_ffi_cleanup_dcl(dcl);
5926 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_ARRAY_ATTRS);
5929 type->array.type = dcl->type;
5931 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
5932 dcl->flags &= ~ZEND_FFI_DCL_TYPE_QUALIFIERS;
5933 dcl->attr &= ~ZEND_FFI_ARRAY_ATTRS;
5934 dcl->align = 0;
5951 void zend_ffi_make_func_type(zend_ffi_dcl *dcl, HashTable *args, zend_ffi_dcl *nested_dcl) /* {{{ */ argument
5956 zend_ffi_finalize_type(dcl);
5957 ret_type = ZEND_FFI_TYPE(dcl->type);
5968 zend_ffi_cleanup_dcl(dcl);
5986 if (dcl->abi == ZEND_FFI_ABI_VECTORCALL && args) {
5998 zend_ffi_cleanup_dcl(dcl);
6010 zend_ffi_cleanup_dcl(dcl);
6020 type->attr = FFI_G(default_type_attr) | (dcl->attr & ZEND_FFI_FUNC_ATTRS);
6023 type->func.ret_type = dcl->type;
6024 switch (dcl->abi) {
6082 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6083 dcl->attr &= ~ZEND_FFI_FUNC_ATTRS;
6084 dcl->align = 0;
6085 dcl->abi = 0;
6132 void zend_ffi_declare(const char *name, size_t name_len, zend_ffi_dcl *dcl) /* {{{ */ argument
6140 zend_ffi_finalize_type(dcl);
6143 if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_TYPEDEF
6145 && zend_ffi_is_same_type(ZEND_FFI_TYPE(sym->type), ZEND_FFI_TYPE(dcl->type))
6146 && sym->is_const == (zend_bool)(dcl->attr & ZEND_FFI_ATTR_CONST)) {
6148 zend_ffi_type_dtor(dcl->type);
6150 } else if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == 0
6151 || (dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_EXTERN) {
6152 zend_ffi_type *type = ZEND_FFI_TYPE(dcl->type);
6158 zend_ffi_type_dtor(dcl->type);
6164 && sym->is_const == (zend_bool)(dcl->attr & ZEND_FFI_ATTR_CONST)) {
6166 zend_ffi_type_dtor(dcl->type);
6173 if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_TYPEDEF) {
6174 if (zend_ffi_validate_vla(ZEND_FFI_TYPE(dcl->type)) != SUCCESS) {
6175 zend_ffi_cleanup_dcl(dcl);
6178 if (dcl->align && dcl->align > ZEND_FFI_TYPE(dcl->type)->align) {
6179 if (ZEND_FFI_TYPE_IS_OWNED(dcl->type)) {
6180 ZEND_FFI_TYPE(dcl->type)->align = dcl->align;
6184 memcpy(type, ZEND_FFI_TYPE(dcl->type), sizeof(zend_ffi_type));
6186 type->align = dcl->align;
6187 dcl->type = ZEND_FFI_TYPE_MAKE_OWNED(type);
6192 sym->type = dcl->type;
6193 sym->is_const = (zend_bool)(dcl->attr & ZEND_FFI_ATTR_CONST);
6194 dcl->type = ZEND_FFI_TYPE(dcl->type); /* reset "owned" flag */
6199 type = ZEND_FFI_TYPE(dcl->type);
6200 …if (zend_ffi_validate_type(type, (dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_EXTERN,…
6201 zend_ffi_cleanup_dcl(dcl);
6204 if ((dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == 0 ||
6205 (dcl->flags & ZEND_FFI_DCL_STORAGE_CLASS) == ZEND_FFI_DCL_EXTERN) {
6208 sym->type = dcl->type;
6209 sym->is_const = (zend_bool)(dcl->attr & ZEND_FFI_ATTR_CONST);
6210 dcl->type = type; /* reset "owned" flag */
6214 zend_ffi_type_dtor(dcl->type);
6221 void zend_ffi_declare_tag(const char *name, size_t name_len, zend_ffi_dcl *dcl, zend_bool incomplet… argument
6234 if (dcl->flags & ZEND_FFI_DCL_STRUCT) {
6242 } else if (dcl->flags & ZEND_FFI_DCL_UNION) {
6250 } else if (dcl->flags & ZEND_FFI_DCL_ENUM) {
6262 dcl->type = type;
6270 if (dcl->flags & ZEND_FFI_DCL_STRUCT) {
6272 zend_ffi_make_struct_type(dcl);
6273 type = ZEND_FFI_TYPE(dcl->type);
6275 } else if (dcl->flags & ZEND_FFI_DCL_UNION) {
6277 zend_ffi_make_struct_type(dcl);
6278 type = ZEND_FFI_TYPE(dcl->type);
6280 } else if (dcl->flags & ZEND_FFI_DCL_ENUM) {
6282 zend_ffi_make_enum_type(dcl);
6283 type = ZEND_FFI_TYPE(dcl->type);
6288 tag->type = ZEND_FFI_TYPE_MAKE_OWNED(dcl->type);
6289 dcl->type = ZEND_FFI_TYPE(dcl->type);
6291 dcl->type->attr |= ZEND_FFI_ATTR_INCOMPLETE_TAG;
6299 void zend_ffi_set_abi(zend_ffi_dcl *dcl, uint16_t abi) /* {{{ */ argument
6301 if (dcl->abi != ZEND_FFI_ABI_DEFAULT) {
6304 dcl->abi = abi;
6333 void zend_ffi_add_attribute(zend_ffi_dcl *dcl, const char *name, size_t name_len) /* {{{ */ argument
6365 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_CDECL);
6368 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_FASTCALL);
6371 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_THISCALL);
6374 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_STDCALL);
6377 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_MS);
6380 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_SYSV);
6383 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_VECTORCALL);
6386 dcl->align = __BIGGEST_ALIGNMENT__;
6389 dcl->attr |= ZEND_FFI_ATTR_PACKED;
6392 dcl->attr |= ZEND_FFI_ATTR_MS_STRUCT;
6395 dcl->attr |= ZEND_FFI_ATTR_GCC_STRUCT;
6416 void zend_ffi_add_attribute_value(zend_ffi_dcl *dcl, const char *name, size_t name_len, int n, zend… argument
6451 zend_ffi_set_abi(dcl, ZEND_FFI_ABI_REGISTER);
6460 dcl->align = val->i64;
6481 …if (dcl->flags & (ZEND_FFI_DCL_TYPE_SPECIFIERS-(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_…
6484dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6485 dcl->flags |= ZEND_FFI_DCL_CHAR;
6488dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6489 dcl->flags |= ZEND_FFI_DCL_SHORT;
6492dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6493 dcl->flags |= ZEND_FFI_DCL_INT;
6496dcl->flags &= ~(ZEND_FFI_DCL_CHAR|ZEND_FFI_DCL_SHORT|ZEND_FFI_DCL_INT|ZEND_FFI_DCL_LONG|ZEND_FFI_D…
6498 dcl->flags |= ZEND_FFI_DCL_LONG;
6500 dcl->flags |= ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_LONG_LONG;
6505 …if (dcl->flags & (ZEND_FFI_DCL_TYPE_SPECIFIERS-(ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_…
6508 dcl->flags &= ~(ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_DOUBLE);
6509 dcl->flags |= ZEND_FFI_DCL_FLOAT;
6512 dcl->flags &= ~(ZEND_FFI_DCL_LONG|ZEND_FFI_DCL_FLOAT|ZEND_FFI_DCL_DOUBLE);
6513 dcl->flags |= ZEND_FFI_DCL_DOUBLE;
6531 void zend_ffi_add_msvc_attribute_value(zend_ffi_dcl *dcl, const char *name, size_t name_len, zend_f… argument
6536 dcl->align = val->i64;
6590 void zend_ffi_nested_declaration(zend_ffi_dcl *dcl, zend_ffi_dcl *nested_dcl) /* {{{ */ argument
6593 zend_ffi_finalize_type(dcl);
6595 nested_dcl->type = dcl->type;
6597 if (zend_ffi_nested_type(dcl->type, nested_dcl->type) != SUCCESS) {
6602 dcl->type = nested_dcl->type;
6606 void zend_ffi_align_as_type(zend_ffi_dcl *dcl, zend_ffi_dcl *align_dcl) /* {{{ */ argument
6609 dcl->align = MAX(align_dcl->align, ZEND_FFI_TYPE(align_dcl->type)->align);
6613 void zend_ffi_align_as_val(zend_ffi_dcl *dcl, zend_ffi_val *align_val) /* {{{ */ argument
6618 dcl->align = zend_ffi_type_uint32.align;
6622 dcl->align = zend_ffi_type_uint64.align;
6625 dcl->align = zend_ffi_type_float.align;
6628 dcl->align = zend_ffi_type_double.align;
6632 dcl->align = zend_ffi_type_long_double.align;
6637 dcl->align = zend_ffi_type_char.align;
6990 void zend_ffi_expr_cast(zend_ffi_val *val, zend_ffi_dcl *dcl) /* {{{ */ argument
6992 zend_ffi_finalize_type(dcl);
6993 switch (ZEND_FFI_TYPE(dcl->type)->kind) {
7120 zend_ffi_type_dtor(dcl->type);
7213 void zend_ffi_expr_sizeof_type(zend_ffi_val *val, zend_ffi_dcl *dcl) /* {{{ */ argument
7217 zend_ffi_finalize_type(dcl);
7218 type = ZEND_FFI_TYPE(dcl->type);
7221 zend_ffi_type_dtor(dcl->type);
7256 void zend_ffi_expr_alignof_type(zend_ffi_val *val, zend_ffi_dcl *dcl) /* {{{ */ argument
7258 zend_ffi_finalize_type(dcl);
7260 val->u64 = ZEND_FFI_TYPE(dcl->type)->align;
7261 zend_ffi_type_dtor(dcl->type);