3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-04-18 22:59:03 +00:00
This commit is contained in:
Muthu Annamalai (முத்து அண்ணாமலை) 2025-03-20 08:11:27 -03:00 committed by GitHub
commit d2e3efbbdb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 27 additions and 3 deletions

View file

@ -361,6 +361,21 @@ static void logv_error_with_prefix(const char *prefix,
log_check_expected();
int lineno = 1;
if ( !log_line_number.empty() ) {
log("Error while executing script:\n\t");
log( log_line_number.begin()->c_str() );
log("\n");
log_line_number.erase(log_line_number.begin());
log("---------------------------------\n");
for(const std::string& script_line : log_line_number) {
const char* pfx = (lineno == log_line_number.size()) ? "-->" : " ";
log("%s%d %s\n",pfx,lineno++,script_line.c_str());
}
log("---------------------------------\n");
}
if (log_error_atexit)
log_error_atexit();

View file

@ -43,6 +43,7 @@
# endif
#endif
#if defined(_MSC_VER)
// At least this is not in MSVC++ 2013.
# define __PRETTY_FUNCTION__ __FUNCTION__
@ -95,6 +96,7 @@ YOSYS_NAMESPACE_BEGIN
struct log_cmd_error_exception { };
extern std::vector<FILE*> log_files;
extern std::vector<std::string> log_line_number;
extern std::vector<std::ostream*> log_streams;
extern std::vector<std::string> log_scratchpads;
extern std::map<std::string, std::set<std::string>> log_hdump;

View file

@ -303,7 +303,7 @@ int run_command(const std::string &command, std::function<void(const std::string
return -1;
std::string line;
char logbuf[128];
char logbuf[128]={0,};
while (fgets(logbuf, 128, f) != NULL) {
line += logbuf;
if (!line.empty() && line.back() == '\n')
@ -1032,8 +1032,10 @@ static void handle_label(std::string &command, bool &from_to_active, const std::
}
}
std::vector<std::string> log_line_number;
bool run_frontend(std::string filename, std::string command, RTLIL::Design *design, std::string *from_to_label)
{
log_line_number.clear();
if (design == nullptr)
design = yosys_design;
@ -1078,7 +1080,6 @@ bool run_frontend(std::string filename, std::string command, RTLIL::Design *desi
{
std::string run_from, run_to;
bool from_to_active = true;
if (from_to_label != NULL) {
size_t pos = from_to_label->find(':');
if (pos == std::string::npos) {
@ -1103,13 +1104,19 @@ bool run_frontend(std::string filename, std::string command, RTLIL::Design *desi
if (f == NULL)
log_error("Can't open script file `%s' for reading: %s\n", filename.c_str(), strerror(errno));
{
std::stringstream ss;
ss << "Running " << command << " on file '" << filename << "'";
log_line_number.push_back(ss.str());
}
FILE *backup_script_file = Frontend::current_script_file;
Frontend::current_script_file = f;
try {
std::string command;
while (fgetline(f, command)) {
while (!command.empty() && command[command.size()-1] == '\\') {
log_line_number.push_back(command);
while (!command.empty() && command[command.size()-1] == '\\') {
std::string next_line;
if (!fgetline(f, next_line))
break;