diff options
| author | seyko <seyko2@gmail.com> | 2015-05-12 21:32:32 +0300 |
|---|---|---|
| committer | seyko <seyko2@gmail.com> | 2015-05-12 21:32:32 +0300 |
| commit | 06e0753fce99d4b845c054ce343f49149522ff2c (patch) | |
| tree | 34a08161c830e1475a0a214b541230ff63f8ae4a | |
| parent | 1234beccb8e952f01a6c11a60ff493c476f4cb2e (diff) | |
| download | tinycc-06e0753fce99d4b845c054ce343f49149522ff2c.tar.gz tinycc-06e0753fce99d4b845c054ce343f49149522ff2c.tar.bz2 | |
minor pp optimizations
* remove free_defines() from tcc_preprocess()
all cleanup will be done in tcc_delete
* move a preprocessor file closing to tcc_delete too
| -rw-r--r-- | libtcc.c | 4 | ||||
| -rw-r--r-- | tcc.c | 26 | ||||
| -rw-r--r-- | tccpp.c | 3 |
3 files changed, 13 insertions, 20 deletions
@@ -1217,6 +1217,10 @@ LIBTCCAPI void tcc_delete(TCCState *s1) tcc_cleanup(); + /* close a preprocessor output */ + if (s1->ppfp && s1->ppfp != stdout) + fclose(s1->ppfp); + /* free all sections */ for(i = 1; i < s1->nb_sections; i++) free_section(s1->sections[i]); @@ -247,7 +247,6 @@ int main(int argc, char **argv) TCCState *s; int ret, optind, i, bench; int64_t start_time = 0; - const char *first_file = NULL; s = tcc_new(); @@ -286,7 +285,7 @@ int main(int argc, char **argv) tcc_error("cannot specify multiple files with -c and -o"); } } - + if (s->output_type == TCC_OUTPUT_PREPROCESS) { if (!s->outfile) { s->ppfp = stdout; @@ -315,17 +314,16 @@ int main(int argc, char **argv) } else { if (1 == s->verbose) printf("-> %s\n", filename); + if (!s->outfile) + s->outfile = default_outputfile(s, filename); if (tcc_add_file(s, filename, filetype) < 0) ret = 1; else if (s->output_type == TCC_OUTPUT_OBJ) { - if (!s->outfile) - s->outfile = default_outputfile(s, filename); ret = !!tcc_output_file(s, s->outfile); + if (s->gen_deps && !ret) + gen_makedeps(s, s->outfile, s->deps_outfile); if (!ret) { - /* dump collected dependencies */ - if (s->gen_deps) - gen_makedeps(s, s->outfile, s->deps_outfile); if ((i+1) < s->nb_files) { tcc_delete(s); s = tcc_new(); @@ -337,9 +335,6 @@ int main(int argc, char **argv) } } } - else - if (!first_file) - first_file = filename; } } @@ -354,14 +349,11 @@ int main(int argc, char **argv) tcc_error_noabort("-run is not available in a cross compiler"); ret = 1; #endif - } else if (s->output_type == TCC_OUTPUT_PREPROCESS) { - if (s->outfile) - fclose(s->ppfp); - } else if (s->output_type != TCC_OUTPUT_OBJ) { - if (!s->outfile) - s->outfile = default_outputfile(s, first_file); + } else + if (s->output_type == TCC_OUTPUT_EXE || + s->output_type == TCC_OUTPUT_DLL) + { ret = !!tcc_output_file(s, s->outfile); - /* dump collected dependencies */ if (s->gen_deps && !ret) gen_makedeps(s, s->outfile, s->deps_outfile); } @@ -3332,12 +3332,10 @@ static void pp_line(TCCState *s1, BufferedFile *f, int level) /* Preprocess the current file */ ST_FUNC int tcc_preprocess(TCCState *s1) { - Sym *define_start; BufferedFile **iptr; int token_seen, spcs, level; preprocess_init(s1); - define_start = define_stack; ch = file->buf_ptr[0]; tok_flags = TOK_FLAG_BOL | TOK_FLAG_BOF; parse_flags = PARSE_FLAG_PREPROCESS @@ -3388,6 +3386,5 @@ ST_FUNC int tcc_preprocess(TCCState *s1) fputs(get_tok_str(tok, &tokc), s1->ppfp); } - free_defines(define_start); return 0; } |
