bool cpp_languaget::preprocess( const std::string &path, std::ostream &outstream, message_handlert &message_handler) { if(path=="") return c_preprocess("", outstream, true, message_handler); // check extension const char *ext=strrchr(path.c_str(), '.'); if(ext!=NULL && std::string(ext)==".ipp") { std::ifstream infile(path.c_str()); char ch; while(infile.read(&ch, 1)) outstream << ch; return false; } return c_preprocess(path, outstream, true, message_handler); }
/// ANSI-C preprocessing bool ansi_c_languaget::preprocess( std::istream &instream, const std::string &path, std::ostream &outstream) { // stdin? if(path=="") return c_preprocess(instream, outstream, get_message_handler()); return c_preprocess(path, outstream, get_message_handler()); }
bool test_c_preprocessor(message_handlert &message_handler) { std::ostringstream out; std::istringstream in(c_test_program); return c_preprocess(in, out, message_handler); }
bool ansi_c_languaget::preprocess( const std::string &path, std::ostream &outstream, message_handlert &message_handler) { // check extensions // TACAS14: preprocess /everything/, including .i files. While the user might // have preprocessed his file already, we might still want to inject some // model checker specific stuff into it. A command line option disabling // preprocessing would be more appropriate. #if 0 const char *ext=strrchr(path.c_str(), '.'); if(ext!=NULL && std::string(ext)==".i") { std::ifstream infile(path.c_str()); char ch; while(infile.read(&ch, 1)) outstream << ch; return false; } #endif return c_preprocess(path, outstream, false, message_handler); }
bool c_preprocess( std::istream &instream, std::ostream &outstream, message_handlert &message_handler) { std::string file=get_temporary_file("tmp.stdin", ".c"); FILE *tmp=fopen(file.c_str(), "wt"); char ch; while(instream.read(&ch, 1)) fputc(ch, tmp); fclose(tmp); bool result=c_preprocess(file, outstream, message_handler); unlink(file.c_str()); return result; }