summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/patmatch.h91
-rw-r--r--kernel/yosys.cc62
-rw-r--r--kernel/yosys.h3
-rw-r--r--passes/cmds/cover.cc2
-rw-r--r--passes/cmds/select.cc1
-rw-r--r--passes/hierarchy/hierarchy.cc1
6 files changed, 65 insertions, 95 deletions
diff --git a/kernel/patmatch.h b/kernel/patmatch.h
deleted file mode 100644
index 611c8d86..00000000
--- a/kernel/patmatch.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * yosys -- Yosys Open SYnthesis Suite
- *
- * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- */
-
-#ifndef PATMATCH_H
-#define PATMATCH_H
-
-#include "kernel/yosys.h"
-
-YOSYS_NAMESPACE_BEGIN
-
-// this is very similar to fnmatch(). the exact rules used by this
-// function are:
-//
-// ? matches any character except
-// * matches any sequence of characters
-// [...] matches any of the characters in the list
-// [!..] matches any of the characters not in the list
-//
-// a backslash may be used to escape the next characters in the
-// pattern. each special character can also simply match itself.
-//
-static bool patmatch(const char *pattern, const char *string)
-{
- if (*pattern == 0)
- return *string == 0;
-
- if (*pattern == '\\') {
- if (pattern[1] == string[0] && patmatch(pattern+2, string+1))
- return true;
- }
-
- if (*pattern == '?') {
- if (*string == 0)
- return false;
- return patmatch(pattern+1, string+1);
- }
-
- if (*pattern == '*') {
- while (*string) {
- if (patmatch(pattern+1, string++))
- return true;
- }
- return pattern[1] == 0;
- }
-
- if (*pattern == '[') {
- bool found_match = false;
- bool inverted_list = pattern[1] == '!';
- const char *p = pattern + (inverted_list ? 1 : 0);
-
- while (*++p) {
- if (*p == ']') {
- if (found_match != inverted_list && patmatch(p+1, string+1))
- return true;
- break;
- }
-
- if (*p == '\\') {
- if (*++p == *string)
- found_match = true;
- } else
- if (*p == *string)
- found_match = true;
- }
- }
-
- if (*pattern == *string)
- return patmatch(pattern+1, string+1);
-
- return false;
-}
-
-YOSYS_NAMESPACE_END
-
-#endif
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index 971da78a..d728329e 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -66,6 +66,68 @@ std::string vstringf(const char *fmt, va_list ap)
return string;
}
+// this is very similar to fnmatch(). the exact rules used by this
+// function are:
+//
+// ? matches any character except
+// * matches any sequence of characters
+// [...] matches any of the characters in the list
+// [!..] matches any of the characters not in the list
+//
+// a backslash may be used to escape the next characters in the
+// pattern. each special character can also simply match itself.
+//
+static bool patmatch(const char *pattern, const char *string)
+{
+ if (*pattern == 0)
+ return *string == 0;
+
+ if (*pattern == '\\') {
+ if (pattern[1] == string[0] && patmatch(pattern+2, string+1))
+ return true;
+ }
+
+ if (*pattern == '?') {
+ if (*string == 0)
+ return false;
+ return patmatch(pattern+1, string+1);
+ }
+
+ if (*pattern == '*') {
+ while (*string) {
+ if (patmatch(pattern+1, string++))
+ return true;
+ }
+ return pattern[1] == 0;
+ }
+
+ if (*pattern == '[') {
+ bool found_match = false;
+ bool inverted_list = pattern[1] == '!';
+ const char *p = pattern + (inverted_list ? 1 : 0);
+
+ while (*++p) {
+ if (*p == ']') {
+ if (found_match != inverted_list && patmatch(p+1, string+1))
+ return true;
+ break;
+ }
+
+ if (*p == '\\') {
+ if (*++p == *string)
+ found_match = true;
+ } else
+ if (*p == *string)
+ found_match = true;
+ }
+ }
+
+ if (*pattern == *string)
+ return patmatch(pattern+1, string+1);
+
+ return false;
+}
+
int GetSize(RTLIL::Wire *wire)
{
return wire->width;
diff --git a/kernel/yosys.h b/kernel/yosys.h
index d3f88564..a796dd09 100644
--- a/kernel/yosys.h
+++ b/kernel/yosys.h
@@ -84,6 +84,9 @@ namespace RTLIL {
std::string stringf(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
std::string vstringf(const char *fmt, va_list ap);
+
+bool patmatch(const char *pattern, const char *string);
+
template<typename T> int GetSize(const T &obj) { return obj.size(); }
int GetSize(RTLIL::Wire *wire);
diff --git a/passes/cmds/cover.cc b/passes/cmds/cover.cc
index 64f7acf5..b8792a05 100644
--- a/passes/cmds/cover.cc
+++ b/passes/cmds/cover.cc
@@ -19,9 +19,7 @@
#include <sys/types.h>
#include <unistd.h>
-
#include "kernel/yosys.h"
-#include "kernel/patmatch.h"
USING_YOSYS_NAMESPACE
PRIVATE_NAMESPACE_BEGIN
diff --git a/passes/cmds/select.cc b/passes/cmds/select.cc
index 893f897d..af0df07b 100644
--- a/passes/cmds/select.cc
+++ b/passes/cmds/select.cc
@@ -20,7 +20,6 @@
#include "kernel/yosys.h"
#include "kernel/celltypes.h"
#include "kernel/sigtools.h"
-#include "kernel/patmatch.h"
#include <string.h>
#include <errno.h>
diff --git a/passes/hierarchy/hierarchy.cc b/passes/hierarchy/hierarchy.cc
index 68317a60..87d11502 100644
--- a/passes/hierarchy/hierarchy.cc
+++ b/passes/hierarchy/hierarchy.cc
@@ -18,7 +18,6 @@
*/
#include "kernel/yosys.h"
-#include "kernel/patmatch.h"
#include <stdlib.h>
#include <stdio.h>
#include <set>