X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=main.c;h=172d52287b847af05b54a4a63f7e26c81d401deb;hb=10ddb641ca4f0624dbeb3f300479e29c3ccedefb;hp=086d82e16ded028d445f46a212f6861735692fb7;hpb=ac85b60f9b068316821a99491291703703563512;p=cparser diff --git a/main.c b/main.c index 086d82e..172d522 100644 --- a/main.c +++ b/main.c @@ -83,6 +83,12 @@ bool char_is_signed = true; /** true for strict language checking. */ bool strict_mode = false; +/* to switch on printing of implicit casts */ +extern bool print_implicit_casts; + +/* to switch on printing of srenthesis to indicate operator precedence */ +extern bool print_parenthesis; + static int verbose; static struct obstack cppflags_obst, ldflags_obst; @@ -162,6 +168,7 @@ static void lextest(FILE *in, const char *fname) static FILE* preprocess(FILE* in, const char *fname) { char buf[4096]; + obstack_1grow(&cppflags_obst, '\0'); const char *flags = obstack_finish(&cppflags_obst); if(in != stdin) { @@ -185,6 +192,7 @@ static FILE* preprocess(FILE* in, const char *fname) static void do_link(const char *out, const char *in) { char buf[4096]; + obstack_1grow(&ldflags_obst, '\0'); const char *flags = obstack_finish(&ldflags_obst); snprintf(buf, sizeof(buf), LINKER " %s -o %s %s", flags, out, in); @@ -310,6 +318,7 @@ void lower_compound_params(void) } typedef enum compile_mode_t { + BenchmarkParser, ParseOnly, Compile, CompileDump, @@ -474,8 +483,14 @@ int main(int argc, char **argv) strict_mode = true; } else if(strcmp(option, "lextest") == 0) { mode = LexTest; + } else if(strcmp(option, "benchmark") == 0) { + mode = BenchmarkParser; } else if(strcmp(option, "print-ast") == 0) { mode = PrintAst; + } else if(strcmp(option, "print-implicit-cast") == 0) { + print_implicit_casts = true; + } else if(strcmp(option, "print-parenthesis") == 0) { + print_parenthesis = true; } else if(strcmp(option, "print-fluffy") == 0) { mode = PrintFluffy; } else if(strcmp(option, "version") == 0) { @@ -546,6 +561,7 @@ int main(int argc, char **argv) char outnamebuf[4096]; if(outname == NULL) { switch(mode) { + case BenchmarkParser: case PrintAst: case PrintFluffy: case LexTest: @@ -622,6 +638,10 @@ int main(int argc, char **argv) fprintf(stderr, "%u warning(s)\n", warning_count); } + if(mode == BenchmarkParser) { + return 0; + } + if(mode == PrintAst) { type_set_output(out); ast_set_output(out);