mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 09:05:32 +00:00
Replaced fnmatch() with patmatch()
This commit is contained in:
parent
bbd808072b
commit
774933a0d8
4 changed files with 105 additions and 18 deletions
|
@ -19,11 +19,9 @@
|
|||
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <fnmatch.h>
|
||||
|
||||
#include "kernel/register.h"
|
||||
#include "kernel/rtlil.h"
|
||||
#include "kernel/log.h"
|
||||
#include "kernel/yosys.h"
|
||||
#include "kernel/patmatch.h"
|
||||
|
||||
USING_YOSYS_NAMESPACE
|
||||
PRIVATE_NAMESPACE_BEGIN
|
||||
|
@ -123,7 +121,7 @@ struct CoverPass : public Pass {
|
|||
for (auto &it : get_coverage_data()) {
|
||||
if (!patterns.empty()) {
|
||||
for (auto &p : patterns)
|
||||
if (!fnmatch(p.c_str(), it.first.c_str(), 0))
|
||||
if (patmatch(p.c_str(), it.first.c_str()))
|
||||
goto pattern_match;
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -17,12 +17,11 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "kernel/register.h"
|
||||
#include "kernel/yosys.h"
|
||||
#include "kernel/celltypes.h"
|
||||
#include "kernel/sigtools.h"
|
||||
#include "kernel/log.h"
|
||||
#include "kernel/patmatch.h"
|
||||
#include <string.h>
|
||||
#include <fnmatch.h>
|
||||
#include <errno.h>
|
||||
|
||||
USING_YOSYS_NAMESPACE
|
||||
|
@ -38,9 +37,9 @@ static bool match_ids(RTLIL::IdString id, std::string pattern)
|
|||
return true;
|
||||
if (id.size() > 0 && id[0] == '\\' && id.substr(1) == pattern)
|
||||
return true;
|
||||
if (!fnmatch(pattern.c_str(), id.c_str(), 0))
|
||||
if (patmatch(pattern.c_str(), id.c_str()))
|
||||
return true;
|
||||
if (id.size() > 0 && id[0] == '\\' && !fnmatch(pattern.c_str(), id.substr(1).c_str(), 0))
|
||||
if (id.size() > 0 && id[0] == '\\' && patmatch(pattern.c_str(), id.substr(1).c_str()))
|
||||
return true;
|
||||
if (id.size() > 0 && id[0] == '$' && pattern.size() > 0 && pattern[0] == '$') {
|
||||
const char *p = id.c_str();
|
||||
|
@ -83,7 +82,7 @@ static bool match_attr_val(const RTLIL::Const &value, std::string pattern, char
|
|||
std::string value_str = value.decode_string();
|
||||
|
||||
if (match_op == '=')
|
||||
if (!fnmatch(pattern.c_str(), value.decode_string().c_str(), FNM_NOESCAPE))
|
||||
if (patmatch(pattern.c_str(), value.decode_string().c_str()))
|
||||
return true;
|
||||
|
||||
if (match_op == '=')
|
||||
|
@ -107,9 +106,9 @@ static bool match_attr(const std::map<RTLIL::IdString, RTLIL::Const> &attributes
|
|||
{
|
||||
if (name_pat.find('*') != std::string::npos || name_pat.find('?') != std::string::npos || name_pat.find('[') != std::string::npos) {
|
||||
for (auto &it : attributes) {
|
||||
if (!fnmatch(name_pat.c_str(), it.first.c_str(), FNM_NOESCAPE) && match_attr_val(it.second, value_pat, match_op))
|
||||
if (patmatch(name_pat.c_str(), it.first.c_str()) && match_attr_val(it.second, value_pat, match_op))
|
||||
return true;
|
||||
if (it.first.size() > 0 && it.first[0] == '\\' && !fnmatch(name_pat.c_str(), it.first.substr(1).c_str(), FNM_NOESCAPE) && match_attr_val(it.second, value_pat, match_op))
|
||||
if (it.first.size() > 0 && it.first[0] == '\\' && patmatch(name_pat.c_str(), it.first.substr(1).c_str()) && match_attr_val(it.second, value_pat, match_op))
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -17,11 +17,10 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "kernel/register.h"
|
||||
#include "kernel/log.h"
|
||||
#include "kernel/yosys.h"
|
||||
#include "kernel/patmatch.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <fnmatch.h>
|
||||
#include <set>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -47,7 +46,7 @@ void generate(RTLIL::Design *design, const std::vector<std::string> &celltypes,
|
|||
if (cell->type.substr(0, 1) == "$" && cell->type.substr(0, 3) != "$__")
|
||||
continue;
|
||||
for (auto &pattern : celltypes)
|
||||
if (!fnmatch(pattern.c_str(), RTLIL::unescape_id(cell->type).c_str(), FNM_NOESCAPE))
|
||||
if (patmatch(pattern.c_str(), RTLIL::unescape_id(cell->type).c_str()))
|
||||
found_celltypes.insert(cell->type);
|
||||
}
|
||||
|
||||
|
@ -97,7 +96,7 @@ void generate(RTLIL::Design *design, const std::vector<std::string> &celltypes,
|
|||
while (portnames.size() > 0) {
|
||||
RTLIL::IdString portname = *portnames.begin();
|
||||
for (auto &decl : portdecls)
|
||||
if (decl.index == 0 && !fnmatch(decl.portname.c_str(), RTLIL::unescape_id(portname).c_str(), FNM_NOESCAPE)) {
|
||||
if (decl.index == 0 && patmatch(decl.portname.c_str(), RTLIL::unescape_id(portname).c_str())) {
|
||||
generate_port_decl_t d = decl;
|
||||
d.portname = portname;
|
||||
d.index = *indices.begin();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue