more parsetests
[cparser] / main.c
diff --git a/main.c b/main.c
index 086d82e..172d522 100644 (file)
--- 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);