keep the filenames of all lexed files in a global lex_filenames vector because we don't strdup the filenames into lex_ctx, but copy the pointer

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-08-18 16:47:33 +02:00
parent 6daf47fc5b
commit 4cf017bb6b
3 changed files with 16 additions and 1 deletions

14
lexer.c
View file

@ -9,6 +9,8 @@
MEM_VEC_FUNCTIONS(token, char, value)
MEM_VEC_FUNCTIONS(lex_file, frame_macro, frames)
VECTOR_MAKE(char*, lex_filenames);
void lexerror(lex_file *lex, const char *fmt, ...)
{
va_list ap;
@ -145,9 +147,19 @@ lex_file* lex_open(const char *file)
lex->peekpos = 0;
lex_filenames_add(lex->name);
return lex;
}
void lex_cleanup(void)
{
size_t i;
for (i = 0; i < lex_filenames_elements; ++i)
mem_d(lex_filenames_data[i]);
mem_d(lex_filenames_data);
}
void lex_close(lex_file *lex)
{
size_t i;
@ -162,7 +174,7 @@ void lex_close(lex_file *lex)
fclose(lex->file);
if (lex->tok)
token_delete(lex->tok);
mem_d(lex->name);
/* mem_d(lex->name); collected in lex_filenames */
mem_d(lex);
}

View file

@ -111,6 +111,7 @@ MEM_VECTOR_PROTO(lex_file, char, token);
lex_file* lex_open (const char *file);
void lex_close(lex_file *lex);
int lex_do (lex_file *lex);
void lex_cleanup(void);
/* Parser
*

2
main.c
View file

@ -21,6 +21,7 @@
* SOFTWARE.
*/
#include "gmqcc.h"
#include "lexer.h"
uint32_t opts_flags[1 + (COUNT_FLAGS / 32)];
uint32_t opts_warn [1 + (COUNT_WARNINGS / 32)];
@ -475,6 +476,7 @@ cleanup:
if (opts_output_free)
mem_d((char*)opts_output);
lex_cleanup();
util_meminfo();
return retval;
}