diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2020-02-14 12:21:16 +0100 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2020-02-14 12:21:16 +0100 |
commit | 31b7a9c3127560ea0c488b88e93077e08600652f (patch) | |
tree | 0276d4a654ba8c809553ddfb3e3d9f8c4814a439 /passes | |
parent | 0ba2a2b1fa898e48feffa23b8958255d9ed0834c (diff) | |
download | yosys-31b7a9c3127560ea0c488b88e93077e08600652f.tar.gz yosys-31b7a9c3127560ea0c488b88e93077e08600652f.tar.bz2 yosys-31b7a9c3127560ea0c488b88e93077e08600652f.zip |
Add expect option to logger command
Diffstat (limited to 'passes')
-rw-r--r-- | passes/cmds/logger.cc | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/passes/cmds/logger.cc b/passes/cmds/logger.cc index 3feef7dc5..30768980e 100644 --- a/passes/cmds/logger.cc +++ b/passes/cmds/logger.cc @@ -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); |