xaiger: update help text
[yosys.git] / kernel / log.cc
index 9e103855f64d7f3f37e2cb5576231d2e42210753..a21ba480a6d6313fe6c0d1c743aba664d9d09770 100644 (file)
@@ -41,10 +41,11 @@ YOSYS_NAMESPACE_BEGIN
 std::vector<FILE*> log_files;
 std::vector<std::ostream*> log_streams;
 std::map<std::string, std::set<std::string>> log_hdump;
-std::vector<std::regex> log_warn_regexes, log_nowarn_regexes, log_werror_regexes;
-std::vector<std::pair<std::regex,LogExpectedItem>> log_expect_log, log_expect_warning, log_expect_error;
+std::vector<YS_REGEX_TYPE> log_warn_regexes, log_nowarn_regexes, log_werror_regexes;
+std::vector<std::pair<YS_REGEX_TYPE,LogExpectedItem>> log_expect_log, log_expect_warning, log_expect_error;
 std::set<std::string> log_warnings, log_experimentals, log_experimentals_ignored;
 int log_warnings_count = 0;
+int log_warnings_count_noexpect = 0;
 bool log_expect_no_warnings = false;
 bool log_hdump_all = false;
 FILE *log_errfile = NULL;
@@ -176,11 +177,11 @@ void logv(const char *format, va_list ap)
 
                        if (!linebuffer.empty() && linebuffer.back() == '\n') {
                                for (auto &re : log_warn_regexes)
-                                       if (std::regex_search(linebuffer, re))
+                                       if (YS_REGEX_NS::regex_search(linebuffer, re))
                                                log_warning("Found log message matching -W regex:\n%s", str.c_str());
 
                                for (auto &item : log_expect_log)
-                                       if (std::regex_search(linebuffer, item.first))
+                                       if (YS_REGEX_NS::regex_search(linebuffer, item.first))
                                                item.second.current_count++;
 
                                linebuffer.clear();
@@ -237,7 +238,7 @@ static void logv_warning_with_prefix(const char *prefix,
        bool suppressed = false;
 
        for (auto &re : log_nowarn_regexes)
-               if (std::regex_search(message, re))
+               if (YS_REGEX_NS::regex_search(message, re))
                        suppressed = true;
 
        if (suppressed)
@@ -250,12 +251,15 @@ static void logv_warning_with_prefix(const char *prefix,
                log_make_debug = 0;
 
                for (auto &re : log_werror_regexes)
-                       if (std::regex_search(message, re))
+                       if (YS_REGEX_NS::regex_search(message, re))
                                log_error("%s",  message.c_str());
 
+               bool warning_match = false;
                for (auto &item : log_expect_warning)
-                       if (std::regex_search(message, item.first))
+                       if (YS_REGEX_NS::regex_search(message, item.first)) {
                                item.second.current_count++;
+                               warning_match = true;
+                       }
 
                if (log_warnings.count(message))
                {
@@ -276,6 +280,8 @@ static void logv_warning_with_prefix(const char *prefix,
                        log_warnings.insert(message);
                }
 
+               if (!warning_match)
+                       log_warnings_count_noexpect++;
                log_warnings_count++;
                log_make_debug = bak_log_make_debug;
        }
@@ -343,11 +349,14 @@ static void logv_error_with_prefix(const char *prefix,
                log_error_atexit();
 
        for (auto &item : log_expect_error)
-               if (std::regex_search(log_last_error, item.first))
+               if (YS_REGEX_NS::regex_search(log_last_error, item.first))
                        item.second.current_count++;
 
        if (check_expected_logs)
                log_check_expected();
+
+       YS_DEBUGTRAP_IF_DEBUGGING;
+
 #ifdef EMSCRIPTEN
        log_files = backup_log_files;
        throw 0;
@@ -661,20 +670,24 @@ void log_check_expected()
        check_expected_logs = false;
 
        for (auto &item : log_expect_warning) {
-               if (item.second.current_count != item.second.expected_count) {
+               if (item.second.current_count == 0) {
+                       log_warn_regexes.clear();
                        log_error("Expected warning pattern '%s' not found !\n", item.second.pattern.c_str());
                }
                if (item.second.current_count != item.second.expected_count) {
-                       log_error("Expected warning pattern '%s' found %d time(s), instead of %d time(s) !\n", 
+                       log_warn_regexes.clear();
+                       log_error("Expected warning pattern '%s' found %d time(s), instead of %d time(s) !\n",
                                item.second.pattern.c_str(), item.second.current_count, item.second.expected_count);
                }
        }
 
        for (auto &item : log_expect_log) {
                if (item.second.current_count == 0) {
+                       log_warn_regexes.clear();
                        log_error("Expected log pattern '%s' not found !\n", item.second.pattern.c_str());
                }
                if (item.second.current_count != item.second.expected_count) {
+                       log_warn_regexes.clear();
                        log_error("Expected log pattern '%s' found %d time(s), instead of %d time(s) !\n",
                                item.second.pattern.c_str(), item.second.current_count, item.second.expected_count);
                }
@@ -682,17 +695,18 @@ void log_check_expected()
 
        for (auto &item : log_expect_error)
                if (item.second.current_count == item.second.expected_count) {
+                       log_warn_regexes.clear();
                        log("Expected error pattern '%s' found !!!\n", item.second.pattern.c_str());
                        #ifdef EMSCRIPTEN
-                               log_files = backup_log_files;
                                throw 0;
                        #elif defined(_MSC_VER)
                                _exit(0);
                        #else
                                _Exit(0);
-                       #endif                  
+                       #endif
                } else {
                        display_error_log_msg = false;
+                       log_warn_regexes.clear();
                        log_error("Expected error pattern '%s' not found !\n", item.second.pattern.c_str());
                }
 }