X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fdata.c;h=f9e0e5f70500402bd6033dcba9b132347f4bc6b4;hp=7e52be5543a3e186034b8e12576782add2665ab7;hb=2fa436074ca9a5e87f39b696de832fa2188fcfc6;hpb=c9384515a81cb64d345b299908b2852f51bb8e6e diff --git a/src/data.c b/src/data.c index 7e52be5..f9e0e5f 100644 --- a/src/data.c +++ b/src/data.c @@ -40,6 +40,12 @@ struct psi_data *psi_data_ctor_with_dtors(struct psi_data *data, data->error = error; data->flags = flags; + if (!data->file.libnames) { + data->file.libnames = psi_plist_init((psi_plist_dtor) psi_names_free); + } + if (!data->file.dlopened) { + data->file.dlopened = psi_plist_init((psi_plist_dtor) psi_libs_free); + } if (!data->consts) { data->consts = psi_plist_init((psi_plist_dtor) psi_const_free); @@ -65,9 +71,6 @@ struct psi_data *psi_data_ctor_with_dtors(struct psi_data *data, if (!data->impls) { data->impls = psi_plist_init((psi_plist_dtor) psi_impl_free); } - if (!data->libs) { - data->libs = psi_plist_init((psi_plist_dtor) psi_libs_free); - } return data; } @@ -81,6 +84,13 @@ struct psi_data *psi_data_ctor(struct psi_data *data, psi_error_cb error, data->error = error; data->flags = flags; + if (!data->file.libnames) { + data->file.libnames = psi_plist_init(NULL); + } + if (!data->file.dlopened) { + data->file.dlopened = psi_plist_init(NULL); + } + if (!data->consts) { data->consts = psi_plist_init(NULL); } @@ -105,9 +115,6 @@ struct psi_data *psi_data_ctor(struct psi_data *data, psi_error_cb error, if (!data->impls) { data->impls = psi_plist_init(NULL); } - if (!data->libs) { - data->libs = psi_plist_init(NULL); - } return data; } @@ -147,22 +154,20 @@ void psi_data_dtor(struct psi_data *data) if (data->impls) { psi_plist_free(data->impls); } - if (data->libs) { - psi_plist_free(data->libs); - } psi_decl_file_dtor(&data->file); } void psi_data_dump(int fd, struct psi_data *D) { - if (D->file.fn) { - dprintf(fd, "// filename=%s (%u errors)\n", D->file.fn, D->errors); - if (D->file.ln) { - dprintf(fd, "lib \"%s\";\n", D->file.ln); - } - } else { - dprintf(fd, "// builtin predef\n"); + size_t i = 0; + char *libname; + + if (D->file.filename) { + dprintf(fd, "// 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); } if (psi_plist_count(D->types)) { size_t i = 0; @@ -226,8 +231,14 @@ void psi_data_dump(int fd, struct psi_data *D) struct psi_decl *decl; while (psi_plist_get(D->decls, i++, &decl)) { + if (decl->extvar) { + dprintf(fd, "/* extvar accessor\n"); + } psi_decl_dump(fd, decl); dprintf(fd, "\n"); + if (decl->extvar) { + dprintf(fd, " extvar accessor */\n"); + } } dprintf(fd, "\n"); }