fix leaks
authorMichael Wallner <mike@php.net>
Thu, 19 Apr 2018 11:38:55 +0000 (13:38 +0200)
committerMichael Wallner <mike@php.net>
Thu, 19 Apr 2018 11:38:55 +0000 (13:38 +0200)
src/data.c
src/parser.c
src/types/decl_file.c
src/validate.c

index 193f49c94fbf68f1b67650dd7e04323b9126f1e2..4f7168facd6a822bdf2d508a7cad845bc58fadd4 100644 (file)
@@ -160,16 +160,17 @@ void psi_data_dtor(struct psi_data *data)
 
 void psi_data_dump(int fd, struct psi_data *D)
 {
+       size_t i = 0;
+       char *libname;
+
        if (D->file.filename) {
                size_t i = 0;
                char *libname;
 
                dprintf(fd, "// filename=%s (%u errors)\n", D->file.filename, D->errors);
-               while (psi_plist_get(D->file.libnames, i++, &libname)) {
-                       dprintf(fd, "lib \"%s\";\n", libname);
-               }
-       } else {
-               dprintf(fd, "// builtin predef\n");
+       }
+       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;
@@ -234,7 +235,7 @@ void psi_data_dump(int fd, struct psi_data *D)
 
                while (psi_plist_get(D->decls, i++, &decl)) {
                        psi_decl_dump(fd, decl);
-                       dprintf(fd, "\n");
+                       dprintf(fd, "// %p \n", decl->sym);
                }
                dprintf(fd, "\n");
        }
index 07e3dfc1a6f0ebd27f6fe7f9c869531a8f37a708..148d74c4dc8a38bbdefbc03107c773e78c16d924 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 1.0.3 on Wed Apr 18 08:03:43 2018 */
+/* Generated by re2c 1.0.3 on Wed Apr 18 08:08:41 2018 */
 #line 1 "src/parser.re"
 /*******************************************************************************
  Copyright (c) 2016, Michael Wallner <mike@php.net>.
index c8622dba590cf0b95cfbb20b76570f0d9c17284b..df0757961179465c29bd91ce170ec4137008d98e 100644 (file)
@@ -79,7 +79,6 @@ bool psi_decl_file_validate(struct psi_data *dst, struct psi_data *src)
                        return false;
                }
 
-               libname = strdup(libname);
                dst->file.libnames = psi_plist_add(dst->file.libnames, &libname);
                dst->file.dlopened = psi_plist_add(dst->file.dlopened, &dlopened);
        }
index 1d55b13f26ca8a5b4c4d6e11ad7686b381017ec8..e7bceafd845eb957ff6ea38e7b5ae5cf17b5bd00 100644 (file)
@@ -223,5 +223,30 @@ bool psi_validate(struct psi_validate_scope *scope,
        psi_validate_list(scope, dst, &consts, psi_validate_const);
        psi_validate_list(scope, dst, &impls, psi_validate_impl);
 
+       if (types.cur != types.src) {
+               psi_plist_free(types.cur);
+       }
+       if (structs.cur != structs.src) {
+               psi_plist_free(structs.cur);
+       }
+       if (unions.cur != unions.src) {
+               psi_plist_free(unions.cur);
+       }
+       if (enums.cur != enums.src) {
+               psi_plist_free(enums.cur);
+       }
+       if (vars.cur != vars.src) {
+               psi_plist_free(vars.cur);
+       }
+       if (decls.cur != decls.src) {
+               psi_plist_free(decls.cur);
+       }
+       if (consts.cur != consts.src) {
+               psi_plist_free(consts.cur);
+       }
+       if (impls.cur != impls.src) {
+               psi_plist_free(impls.cur);
+       }
+
        return true;
 }