mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 09:05:32 +00:00
Added support for "file names with blanks"
This commit is contained in:
parent
aa0ab975b9
commit
21a1cc1b60
7 changed files with 43 additions and 33 deletions
|
@ -32,19 +32,14 @@ struct setunset_t
|
|||
|
||||
setunset_t(std::string unset_name) : name(RTLIL::escape_id(unset_name)), value(), unset(true) { }
|
||||
|
||||
setunset_t(std::string set_name, std::vector<std::string> args, size_t &argidx) : name(RTLIL::escape_id(set_name)), value(), unset(false)
|
||||
setunset_t(std::string set_name, std::string set_value) : name(RTLIL::escape_id(set_name)), value(), unset(false)
|
||||
{
|
||||
if (!args[argidx].empty() && args[argidx][0] == '"') {
|
||||
std::string str = args[argidx++].substr(1);
|
||||
while (str.size() != 0 && str[str.size()-1] != '"' && argidx < args.size())
|
||||
str += args[argidx++];
|
||||
if (str.size() != 0 && str[str.size()-1] == '"')
|
||||
str = str.substr(0, str.size()-1);
|
||||
value = RTLIL::Const(str);
|
||||
if (set_value.substr(0, 1) == "\"" && set_value.substr(GetSize(set_value)-1) == "\"") {
|
||||
value = RTLIL::Const(set_value.substr(1, GetSize(set_value)-2));
|
||||
} else {
|
||||
RTLIL::SigSpec sig_value;
|
||||
if (!RTLIL::SigSpec::parse(sig_value, NULL, args[argidx++]))
|
||||
log_cmd_error("Can't decode value '%s'!\n", args[argidx-1].c_str());
|
||||
if (!RTLIL::SigSpec::parse(sig_value, NULL, set_value))
|
||||
log_cmd_error("Can't decode value '%s'!\n", set_value.c_str());
|
||||
value = sig_value.as_const();
|
||||
}
|
||||
}
|
||||
|
@ -84,9 +79,9 @@ struct SetattrPass : public Pass {
|
|||
{
|
||||
std::string arg = args[argidx];
|
||||
if (arg == "-set" && argidx+2 < args.size()) {
|
||||
argidx += 2;
|
||||
setunset_list.push_back(setunset_t(args[argidx-1], args, argidx));
|
||||
argidx--;
|
||||
string set_key = args[++argidx];
|
||||
string set_val = args[++argidx];
|
||||
setunset_list.push_back(setunset_t(set_key, set_val));
|
||||
continue;
|
||||
}
|
||||
if (arg == "-unset" && argidx+1 < args.size()) {
|
||||
|
@ -154,9 +149,9 @@ struct SetparamPass : public Pass {
|
|||
{
|
||||
std::string arg = args[argidx];
|
||||
if (arg == "-set" && argidx+2 < args.size()) {
|
||||
argidx += 2;
|
||||
setunset_list.push_back(setunset_t(args[argidx-1], args, argidx));
|
||||
argidx--;
|
||||
string set_key = args[++argidx];
|
||||
string set_val = args[++argidx];
|
||||
setunset_list.push_back(setunset_t(set_key, set_val));
|
||||
continue;
|
||||
}
|
||||
if (arg == "-unset" && argidx+1 < args.size()) {
|
||||
|
@ -209,10 +204,9 @@ struct ChparamPass : public Pass {
|
|||
{
|
||||
std::string arg = args[argidx];
|
||||
if (arg == "-set" && argidx+2 < args.size()) {
|
||||
argidx += 2;
|
||||
setunset_t new_param(args[argidx-1], args, argidx);
|
||||
new_parameters[new_param.name] = new_param.value;
|
||||
argidx--;
|
||||
string set_key = args[++argidx];
|
||||
string set_val = args[++argidx];
|
||||
setunset_list.push_back(setunset_t(set_key, set_val));
|
||||
continue;
|
||||
}
|
||||
if (arg == "-list") {
|
||||
|
|
|
@ -320,9 +320,7 @@ struct rules_t
|
|||
|
||||
void parse(string filename)
|
||||
{
|
||||
if (filename.substr(0, 2) == "+/")
|
||||
filename = proc_share_dirname() + filename.substr(1);
|
||||
|
||||
rewrite_filename(filename);
|
||||
infile.open(filename);
|
||||
linecount = 0;
|
||||
|
||||
|
|
|
@ -607,6 +607,7 @@ struct ExtractPass : public Pass {
|
|||
else
|
||||
{
|
||||
std::ifstream f;
|
||||
rewrite_filename(filename);
|
||||
f.open(filename.c_str());
|
||||
if (f.fail()) {
|
||||
delete map;
|
||||
|
@ -746,6 +747,7 @@ struct ExtractPass : public Pass {
|
|||
}
|
||||
|
||||
std::ofstream f;
|
||||
rewrite_filename(mine_outfile);
|
||||
f.open(mine_outfile.c_str(), std::ofstream::trunc);
|
||||
if (f.fail())
|
||||
log_error("Can't open output file `%s'.\n", mine_outfile.c_str());
|
||||
|
|
|
@ -951,10 +951,7 @@ struct TechmapPass : public Pass {
|
|||
size_t argidx;
|
||||
for (argidx = 1; argidx < args.size(); argidx++) {
|
||||
if (args[argidx] == "-map" && argidx+1 < args.size()) {
|
||||
if (args[argidx+1].substr(0, 2) == "+/")
|
||||
map_files.push_back(proc_share_dirname() + args[++argidx].substr(2));
|
||||
else
|
||||
map_files.push_back(args[++argidx]);
|
||||
map_files.push_back(args[++argidx]);
|
||||
continue;
|
||||
}
|
||||
if (args[argidx] == "-max_iter" && argidx+1 < args.size()) {
|
||||
|
@ -1005,6 +1002,7 @@ struct TechmapPass : public Pass {
|
|||
map->add(mod->clone());
|
||||
} else {
|
||||
std::ifstream f;
|
||||
rewrite_filename(fn);
|
||||
f.open(fn.c_str());
|
||||
if (f.fail())
|
||||
log_cmd_error("Can't open map file `%s'\n", fn.c_str());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue