X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fdecl_type.c;h=c7b19b68c4a53c067d84ecc475309138b965ec7e;hb=a107dfcca2dfd0fc5a2779a8d679f778cb8f3290;hp=8e5f9e6183b6669e9884d87291674e688a342232;hpb=dfc032e7e195fc09c5ad2cda81d00a8958b80a66;p=m6w6%2Fext-psi diff --git a/src/types/decl_type.c b/src/types/decl_type.c index 8e5f9e6..c7b19b6 100644 --- a/src/types/decl_type.c +++ b/src/types/decl_type.c @@ -71,6 +71,23 @@ decl_args *extract_decl_type_args(decl_type *dtyp, decl_type **real_typ_ptr) { } } +size_t extract_decl_type_size(decl_type *dtyp, decl_type **real_typ_ptr) { + decl_type *var_typ; + var_typ = real_decl_type(dtyp); + if (real_typ_ptr) { + *real_typ_ptr = var_typ; + } + switch (var_typ->type) { + case PSI_T_STRUCT: + return var_typ->real.strct->size; + case PSI_T_UNION: + return var_typ->real.unn->size; + default: + return psi_t_size(var_typ->type); + } +} + + int locate_decl_type_alias(decl_typedefs *defs, decl_type *type) { size_t i; @@ -244,7 +261,7 @@ int weak_decl_type(decl_type *type) { } decl_type *real_decl_type(decl_type *type) { - while (weak_decl_type(type)) { + while (weak_decl_type(type) && type->real.def) { type = type->real.def->type; } return type;