mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 09:05:32 +00:00
Add expect option to logger command
This commit is contained in:
parent
0ba2a2b1fa
commit
31b7a9c312
4 changed files with 113 additions and 3 deletions
|
@ -57,6 +57,9 @@ struct LoggerPass : public Pass {
|
|||
log(" -experimental <feature>\n");
|
||||
log(" do not print warnings for the specified experimental feature\n");
|
||||
log("\n");
|
||||
log(" -expect <type> <regex> <expected_count>\n");
|
||||
log(" expect log,warning or error to appear. In case of error return code is 0.\n");
|
||||
log("\n");
|
||||
}
|
||||
|
||||
void execute(std::vector<std::string> args, RTLIL::Design * design) YS_OVERRIDE
|
||||
|
@ -125,13 +128,44 @@ struct LoggerPass : public Pass {
|
|||
log("Disabled debug log messages.");
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
if (args[argidx] == "-experimental" && argidx+1 < args.size()) {
|
||||
std::string value = args[++argidx];
|
||||
log("Added '%s' experimental ignore list.", value.c_str());
|
||||
log_experimentals_ignored.insert(value);
|
||||
continue;
|
||||
}
|
||||
if (args[argidx] == "-expect" && argidx+3 < args.size()) {
|
||||
std::string type = args[++argidx];
|
||||
if (type!="error" && type!="warning" && type!="log")
|
||||
log_cmd_error("Expect command require type to be 'log', 'warning' or 'error' !\n");
|
||||
if (type=="error" && log_expect_error.size()>0)
|
||||
log_cmd_error("Only single error message can be expected !\n");
|
||||
std::string pattern = args[++argidx];
|
||||
if (pattern.front() == '\"' && pattern.back() == '\"') pattern = pattern.substr(1, pattern.size() - 2);
|
||||
int count = atoi(args[++argidx].c_str());
|
||||
if (count<=0)
|
||||
log_cmd_error("Number of expected messages must be higher then 0 !\n");
|
||||
if (type=="error" && count!=1)
|
||||
log_cmd_error("Expected error message occurrences must be 1 !\n");
|
||||
log("Added regex '%s' for warnings to expected %s list.\n", pattern.c_str(), type.c_str());
|
||||
if (type=="error")
|
||||
log_expect_error.push_back(std::make_pair(std::regex(pattern,
|
||||
std::regex_constants::nosubs |
|
||||
std::regex_constants::optimize |
|
||||
std::regex_constants::egrep), LogExpectedItem(pattern, count)));
|
||||
else if (type=="warning")
|
||||
log_expect_warning.push_back(std::make_pair(std::regex(pattern,
|
||||
std::regex_constants::nosubs |
|
||||
std::regex_constants::optimize |
|
||||
std::regex_constants::egrep), LogExpectedItem(pattern, count)));
|
||||
else
|
||||
log_expect_log.push_back(std::make_pair(std::regex(pattern,
|
||||
std::regex_constants::nosubs |
|
||||
std::regex_constants::optimize |
|
||||
std::regex_constants::egrep), LogExpectedItem(pattern, count)));
|
||||
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
extra_args(args, argidx, design, false);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue