aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-05-12 21:32:32 +0300
committerseyko <seyko2@gmail.com>2015-05-12 21:32:32 +0300
commit06e0753fce99d4b845c054ce343f49149522ff2c (patch)
tree34a08161c830e1475a0a214b541230ff63f8ae4a
parent1234beccb8e952f01a6c11a60ff493c476f4cb2e (diff)
downloadtinycc-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.c4
-rw-r--r--tcc.c26
-rw-r--r--tccpp.c3
3 files changed, 13 insertions, 20 deletions
diff --git a/libtcc.c b/libtcc.c
index d21beb4..1266baf 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -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]);
diff --git a/tcc.c b/tcc.c
index e499100..6e94f45 100644
--- a/tcc.c
+++ b/tcc.c
@@ -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);
}
diff --git a/tccpp.c b/tccpp.c
index c71edf3..ac251c3 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -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;
}