diff --git a/src/c99.c b/src/c99.c index dfb212d..53891af 100644 --- a/src/c99.c +++ b/src/c99.c @@ -28,34 +28,23 @@ /* public */ /* functions */ /* c99_new */ +static Cpp * _new_cpp(C99Prefs * prefs, char const * pathname); static char * _new_outfile(int flags, char const * outfile, char const * pathname); C99 * c99_new(C99Prefs * prefs, char const * pathname) { C99 * c99; - size_t i; - size_t j; - size_t k; if((c99 = object_new(sizeof(*c99))) == NULL) return NULL; memset(c99, 0, sizeof(*c99)); c99->flags = prefs->flags; - if((c99->cpp = cpp_new(pathname, CPP_FILTER_TRIGRAPH)) == NULL) + if((c99->cpp = _new_cpp(prefs, pathname)) == NULL) { object_delete(c99); return NULL; } - for(i = 0; i < prefs->paths_cnt; i++) - if(cpp_path_add(c99->cpp, prefs->paths[i]) != 0) - break; - for(j = 0; j < prefs->defines_cnt; j++) - if(cpp_define_add(c99->cpp, prefs->defines[j], NULL) != 0) - break; - for(k = 0; k < prefs->undefines_cnt; k++) - if(cpp_define_remove(c99->cpp, prefs->undefines[k]) != 0) - break; c99->outfile = _new_outfile(prefs->flags, prefs->outfile, pathname); if(c99->outfile != NULL) c99->outfp = (c99->outfile[0] == '\0') ? stdout @@ -63,11 +52,9 @@ C99 * c99_new(C99Prefs * prefs, char const * pathname) else c99->outfp = NULL; c99->optlevel = prefs->optlevel; - if(c99->outfile == NULL /* abort if there was an error */ - || c99->outfp == NULL - || i != prefs->paths_cnt - || j != prefs->defines_cnt - || k != prefs->undefines_cnt) + c99->code = code_new(); + /* abort if there was an error */ + if(c99->outfile == NULL || c99->outfp == NULL || c99->code == NULL) { c99_delete(c99); return NULL; @@ -75,6 +62,33 @@ C99 * c99_new(C99Prefs * prefs, char const * pathname) return c99; } +static Cpp * _new_cpp(C99Prefs * prefs, char const * pathname) +{ + Cpp * cpp; + size_t i; + size_t j; + size_t k; + + if((cpp = cpp_new(pathname, CPP_FILTER_TRIGRAPH)) == NULL) + return NULL; + for(i = 0; i < prefs->paths_cnt; i++) + if(cpp_path_add(cpp, prefs->paths[i]) != 0) + break; + for(j = 0; j < prefs->defines_cnt; j++) + if(cpp_define_add(cpp, prefs->defines[j], NULL) != 0) + break; + for(k = 0; k < prefs->undefines_cnt; k++) + if(cpp_define_remove(cpp, prefs->undefines[k]) != 0) + break; + if(i != prefs->paths_cnt || j != prefs->defines_cnt + || k != prefs->undefines_cnt) + { + cpp_delete(cpp); + return NULL; + } + return cpp; +} + static char * _new_outfile(int flags, char const * outfile, char const * pathname) { @@ -122,6 +136,7 @@ int c99_delete(C99 * c99) free(c99->outfile); if(c99->token != NULL) token_delete(c99->token); + code_delete(c99->code); object_delete(c99); return ret; }