3
0
Fork 0
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:
Miodrag Milanovic 2020-02-14 12:21:16 +01:00
parent 0ba2a2b1fa
commit 31b7a9c312
4 changed files with 113 additions and 3 deletions

View file

@ -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);