10 #include "type_hash.h"
15 void get_output_name(char *buf, size_t buflen, const char *inputname,
18 size_t last_dot = 0xffffffff;
20 for(const char *c = inputname; *c != 0; ++c) {
25 if(last_dot == 0xffffffff)
28 if(last_dot >= buflen)
29 panic("filename too long");
30 memcpy(buf, inputname, last_dot);
32 size_t extlen = strlen(newext) + 1;
33 if(extlen + last_dot >= buflen)
34 panic("filename too long");
35 memcpy(buf+last_dot, newext, extlen);
40 translation_unit_t *do_parsing(const char *fname)
42 FILE *in = fopen(fname, "r");
44 fprintf(stderr, "Couldn't open '%s': %s\n", fname, strerror(errno));
48 lexer_open_stream(in, fname);
50 translation_unit_t *unit = parse();
58 void lextest(const char *fname)
60 FILE *in = fopen(fname, "r");
62 fprintf(stderr, "Couldn't open '%s': %s\n", fname, strerror(errno));
66 lexer_open_stream(in, fname);
69 lexer_next_preprocessing_token();
70 print_token(stdout, &lexer_token);
72 } while(lexer_token.type != T_EOF);
77 void write_fluffy_decls(translation_unit_t *unit);
79 int main(int argc, char **argv)
89 if(argc > 2 && strcmp(argv[1], "--lextest") == 0) {
94 if(argc > 2 && strcmp(argv[1], "--print-ast") == 0) {
95 translation_unit_t *unit = do_parsing(argv[2]);
96 ast_set_output(stdout);
101 for(int i = 1; i < argc; ++i) {
102 translation_unit_t *unit = do_parsing(argv[i]);
103 write_fluffy_decls(unit);