X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fdecl_type.c;h=932475faea785f275b744c9ca2d971d53a073bc7;hb=698841dfdd4d70d24e0b7af25ac7100bc2cb26a4;hp=31c49b4b9449f19b7be7f6347b227084f03cd92b;hpb=2fa436074ca9a5e87f39b696de832fa2188fcfc6;p=m6w6%2Fext-psi diff --git a/src/types/decl_type.c b/src/types/decl_type.c index 31c49b4..932475f 100644 --- a/src/types/decl_type.c +++ b/src/types/decl_type.c @@ -23,16 +23,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ -#include "php_psi_stdinc.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#else +# include "php_config.h" +#endif #include "token.h" #include "data.h" #define PSI_STD_TYPES -#include "php_psi_posix.h" +#include "php_psi_predef.h" struct psi_decl_type *psi_decl_type_init(token_t type, zend_string *name) { - struct psi_decl_type *t = calloc(1, sizeof(*t)); + struct psi_decl_type *t = pecalloc(1, sizeof(*t), 1); t->type = type; t->name = zend_string_copy(name); return t; @@ -55,7 +59,7 @@ void psi_decl_type_free(struct psi_decl_type **type_ptr) struct psi_decl_type *psi_decl_type_copy(struct psi_decl_type *src) { - struct psi_decl_type *dst = calloc(1, sizeof(*dst)); + struct psi_decl_type *dst = pecalloc(1, sizeof(*dst), 1); dst->type = src->type; if (src->name) { @@ -289,88 +293,77 @@ bool psi_decl_type_validate(struct psi_data *data, struct psi_decl_type *type, return true; } -void psi_decl_type_dump_args_with_layout(int fd, struct psi_plist *args, +void psi_decl_type_dump_args_with_layout(struct psi_dump *dump, struct psi_plist *args, unsigned level) { size_t i = 0; - dprintf(fd, " {\n"); + PSI_DUMP(dump, " {\n"); if (args) { struct psi_decl_arg *sarg; ++level; while (psi_plist_get(args, i++, &sarg)) { - dprintf(fd, "%s", psi_t_indent(level)); - psi_decl_arg_dump(fd, sarg, level); + PSI_DUMP(dump, "%s", psi_t_indent(level)); + psi_decl_arg_dump(dump, sarg, level); if (sarg->layout) { if (sarg->layout->bfw) { - dprintf(fd, ":%zu", sarg->layout->bfw->len); + PSI_DUMP(dump, ":%zu", sarg->layout->bfw->len); } - dprintf(fd, "::(%zu, %zu);\n", sarg->layout->pos, + PSI_DUMP(dump, "::(%zu, %zu);\n", sarg->layout->pos, sarg->layout->len); } else { - dprintf(fd, ";\n"); + PSI_DUMP(dump, ";\n"); } } --level; } - dprintf(fd, "%s", psi_t_indent(level)); - dprintf(fd, "}"); + PSI_DUMP(dump, "%s", psi_t_indent(level)); + PSI_DUMP(dump, "}"); } -void psi_decl_type_dump(int fd, struct psi_decl_type *t, unsigned level) +void psi_decl_type_dump(struct psi_dump *dump, struct psi_decl_type *t, unsigned level) { switch (t->type) { case PSI_T_POINTER: - dprintf(fd, "%s *", t->name->val); + PSI_DUMP(dump, "%s *", t->name->val); return; case PSI_T_ENUM: - dprintf(fd, "enum "); if (psi_decl_type_is_anon(t->name, "enum")) { - size_t i = 0, c = psi_plist_count(t->real.enm->items); - struct psi_decl_enum_item *item; - - dprintf(fd, "{\n"); - ++level; - while (psi_plist_get(t->real.enm->items, i++, &item)) { - dprintf(fd, "%s", psi_t_indent(level)); - psi_decl_enum_item_dump(fd, item); - if (i < c) { - dprintf(fd, "%s\n", i < c ? "," : ""); - } - } - --level; - dprintf(fd, "%s\n} ", psi_t_indent(level)); + psi_decl_enum_dump(dump, t->real.enm, level); return; } + PSI_DUMP(dump, "enum "); break; case PSI_T_STRUCT: - dprintf(fd, "struct "); + PSI_DUMP(dump, "struct "); if (psi_decl_type_is_anon(t->name, "struct")) { - psi_decl_type_dump_args_with_layout(fd, t->real.strct->args, level); + PSI_DUMP(dump, "/*::(%zu, %zu)*/", t->real.strct->align, t->real.strct->size); + psi_decl_type_dump_args_with_layout(dump, t->real.strct->args, level); return; } break; case PSI_T_UNION: - dprintf(fd, "union "); + PSI_DUMP(dump, "union "); if (psi_decl_type_is_anon(t->name, "union")) { - psi_decl_type_dump_args_with_layout(fd, t->real.unn->args, level); + PSI_DUMP(dump, "/*::(%zu, %zu)*/", t->real.unn->align, t->real.unn->size); + psi_decl_type_dump_args_with_layout(dump, t->real.unn->args, level); return; } break; case PSI_T_FUNCTION: - psi_decl_type_dump(fd, t->real.func->func->type, level); + psi_decl_type_dump(dump, t->real.func->func->type, level); return; default: break; } - dprintf(fd, "%s", t->name->val); + PSI_DUMP(dump, "%s", t->name->val); } int psi_decl_type_is_weak(struct psi_decl_type *type)