X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fdata.c;h=5d7be991a1a8ebde885f99277f2374cb3602e05c;hp=b1fbc49db6ddaaed164d6770c3567d400708b5e1;hb=1df8639baf324038edd00ad15501ea3abb502cac;hpb=216e7ac3b97aed5a5d65c511dc061c78be90e79d diff --git a/src/data.c b/src/data.c index b1fbc49..5d7be99 100644 --- a/src/data.c +++ b/src/data.c @@ -24,6 +24,7 @@ *******************************************************************************/ #include "php_psi_stdinc.h" +#include "php_psi.h" #include "data.h" #include "php_globals.h" @@ -31,6 +32,23 @@ #include #include +static void psi_data_ctor_internal(struct psi_data *data, + psi_error_cb error, unsigned flags) +{ + data->error = error; + data->flags = flags; + + if (data->flags & PSI_DEBUG) { + int fd = psi_fdopen(getenv("PSI_DEBUG")); + + if (fd > 0) { + data->debug_fd = fd; + } else { + data->debug_fd = STDERR_FILENO; + } + } +} + struct psi_data *psi_data_ctor_with_dtors(struct psi_data *data, psi_error_cb error, unsigned flags) { @@ -38,8 +56,8 @@ struct psi_data *psi_data_ctor_with_dtors(struct psi_data *data, data = pecalloc(1, sizeof(*data), 1); } - data->error = error; - data->flags = flags; + psi_data_ctor_internal(data, error, flags); + if (!data->file.libnames) { data->file.libnames = psi_plist_init((psi_plist_dtor) psi_names_free); } @@ -81,8 +99,7 @@ struct psi_data *psi_data_ctor(struct psi_data *data, psi_error_cb error, data = pecalloc(1, sizeof(*data), 1); } - data->error = error; - data->flags = flags; + psi_data_ctor_internal(data, error, flags); if (!data->file.libnames) { data->file.libnames = psi_plist_init(NULL); @@ -130,6 +147,9 @@ struct psi_data *psi_data_exchange(struct psi_data *dest, struct psi_data *src) void psi_data_dtor(struct psi_data *data) { + if (data->debug_fd) { + close(data->debug_fd); + } if (data->consts) { psi_plist_free(data->consts); } @@ -158,27 +178,27 @@ void psi_data_dtor(struct psi_data *data) psi_decl_file_dtor(&data->file); } -void psi_data_dump(int fd, struct psi_data *D) +void psi_data_dump(struct psi_dump *dump, struct psi_data *D) { size_t i = 0; char *libname; if (D->file.filename) { - dprintf(fd, "// filename=%s (%u errors)\n", D->file.filename->val, D->errors); + PSI_DUMP(dump, "// filename=%s (%u errors)\n", D->file.filename->val, D->errors); } while (psi_plist_get(D->file.libnames, i++, &libname)) { - dprintf(fd, "lib \"%s\";\n", libname); + PSI_DUMP(dump, "lib \"%s\";\n", libname); } if (psi_plist_count(D->types)) { size_t i = 0; struct psi_decl_arg *def; while (psi_plist_get(D->types, i++, &def)) { - dprintf(fd, "typedef "); - psi_decl_arg_dump(fd, def, 0); - dprintf(fd, ";\n"); + PSI_DUMP(dump, "typedef "); + psi_decl_arg_dump(dump, def, 0); + PSI_DUMP(dump, ";\n"); } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->unions)) { size_t i = 0; @@ -186,11 +206,11 @@ void psi_data_dump(int fd, struct psi_data *D) while (psi_plist_get(D->unions, i++, &unn)) { if (!psi_decl_type_is_anon(unn->name, "union")) { - psi_decl_union_dump(fd, unn); - dprintf(fd, "\n"); + psi_decl_union_dump(dump, unn); + PSI_DUMP(dump, "\n"); } } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->structs)) { size_t i = 0; @@ -198,33 +218,33 @@ void psi_data_dump(int fd, struct psi_data *D) while (psi_plist_get(D->structs, i++, &strct)) { if (!psi_decl_type_is_anon(strct->name, "struct")) { - psi_decl_struct_dump(fd, strct); - dprintf(fd, "\n"); + psi_decl_struct_dump(dump, strct); + PSI_DUMP(dump, "\n"); } } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->enums)) { size_t i = 0; struct psi_decl_enum *enm; while (psi_plist_get(D->enums, i++, &enm)) { - if (!psi_decl_type_is_anon(enm->name, "enum")) { - psi_decl_enum_dump(fd, enm, 0); - dprintf(fd, "\n"); + if (true || !psi_decl_type_is_anon(enm->name, "enum")) { + psi_decl_enum_dump(dump, enm, 0); + PSI_DUMP(dump, "\n"); } } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->consts)) { size_t i = 0; struct psi_const *c; while (psi_plist_get(D->consts, i++, &c)) { - psi_const_dump(fd, c); - dprintf(fd, "\n"); + psi_const_dump(dump, c); + PSI_DUMP(dump, "\n"); } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->decls)) { size_t i = 0; @@ -232,33 +252,33 @@ void psi_data_dump(int fd, struct psi_data *D) while (psi_plist_get(D->decls, i++, &decl)) { if (decl->extvar) { - dprintf(fd, "/* extvar accessor\n"); + PSI_DUMP(dump, "/* extvar accessor \n"); } - psi_decl_dump(fd, decl); - dprintf(fd, "\n"); + psi_decl_dump(dump, decl); if (decl->extvar) { - dprintf(fd, " extvar accessor */\n"); + PSI_DUMP(dump, " */"); } + PSI_DUMP(dump, "\n"); } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->vars)) { size_t i = 0; struct psi_decl_extvar *evar; while (psi_plist_get(D->vars, i++, &evar)) { - psi_decl_extvar_dump(fd, evar); + psi_decl_extvar_dump(dump, evar); } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } if (psi_plist_count(D->impls)) { size_t i = 0; struct psi_impl *impl; while (psi_plist_get(D->impls, i++, &impl)) { - psi_impl_dump(fd, impl); - dprintf(fd, "\n"); + psi_impl_dump(dump, impl); + PSI_DUMP(dump, "\n"); } - dprintf(fd, "\n"); + PSI_DUMP(dump, "\n"); } }