json_objectt json(const source_locationt &location) { json_objectt result; if(!location.get_file().empty()) result["file"]=json_stringt(id2string(location.get_file())); if(!location.get_line().empty()) result["line"]=json_stringt(id2string(location.get_line())); if(!location.get_column().empty()) result["column"]=json_stringt(id2string(location.get_column())); if(!location.get_function().empty()) result["function"]=json_stringt(id2string(location.get_function())); return result; }
xmlt xml(const source_locationt &location) { xmlt result; result.name="location"; if(!location.get_file().empty()) result.set_attribute("file", id2string(location.get_file())); if(!location.get_line().empty()) result.set_attribute("line", id2string(location.get_line())); if(!location.get_column().empty()) result.set_attribute("column", id2string(location.get_column())); if(!location.get_function().empty()) result.set_attribute("function", id2string(location.get_function())); return result; }
void gcc_message_handlert::print( unsigned level, const std::string &message, int sequence_number, const source_locationt &location) { const irep_idt file=location.get_file(); const irep_idt line=location.get_line(); const irep_idt column=location.get_column(); const irep_idt function=location.get_function(); std::string dest; if(!function.empty()) { if(!file.empty()) dest+=id2string(file)+":"; if(dest!="") dest+=' '; dest+="In function '"+id2string(function)+"':\n"; } if(!line.empty()) { if(!file.empty()) dest+=id2string(file)+":"; dest+=id2string(line)+":"; if(column.empty()) dest+="1: "; else dest+=id2string(column)+": "; if(level==message_clientt::M_ERROR) dest+="error: "; else if(level==message_clientt::M_WARNING) dest+="warning: "; } dest+=message; print(level, dest); }
void document_propertiest::get_code( const source_locationt &source_location, std::string &dest) { dest=""; const irep_idt &file=source_location.get_file(); const irep_idt &line=source_location.get_line(); if(file=="" || line=="") return; std::ifstream in(id2string(file)); if(!in) { dest+="ERROR: unable to open "; dest+=id2string(file); dest+="\n"; return; } int line_int=unsafe_string2int(id2string(line)); int line_start=line_int-3, line_end=line_int+3; if(line_start<=1) line_start=1; // skip line_start-1 lines for(int l=0; l<line_start-1; l++) { std::string tmp; std::getline(in, tmp); } // read till line_end std::list<linet> lines; for(int l=line_start; l<=line_end && in; l++) { lines.push_back(linet()); std::string &line=lines.back().text; std::getline(in, line); if(!line.empty() && line[line.size()-1]=='\r') line.resize(line.size()-1); lines.back().line_number=l; } // remove empty lines at the end and at the beginning for(std::list<linet>::iterator it=lines.begin(); it!=lines.end();) { if(is_empty(it->text)) it=lines.erase(it); else break; } for(std::list<linet>::iterator it=lines.end(); it!=lines.begin();) { it--; if(is_empty(it->text)) it=lines.erase(it); else break; } // strip space strip_space(lines); // build dest for(std::list<linet>::iterator it=lines.begin(); it!=lines.end(); it++) { std::string line_no=std::to_string(it->line_number); std::string tmp; switch(format) { case LATEX: while(line_no.size()<4) line_no=" "+line_no; line_no+" "; tmp+=escape_latex(it->text, true); if(it->line_number==line_int) tmp="{\\ttb{}"+tmp+"}"; break; case HTML: while(line_no.size()<4) line_no=" "+line_no; line_no+" "; tmp+=escape_html(it->text); if(it->line_number==line_int) tmp="<em>"+tmp+"</em>"; break; } dest+=tmp+"\n"; } }