summaryrefslogtreecommitdiff
path: root/passes/cmds
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2015-04-08 12:14:34 +0200
committerClifford Wolf <clifford@clifford.at>2015-04-08 12:14:34 +0200
commit21a1cc1b60f0c646dcc46c89440fc1a2cf606743 (patch)
treece642af5e328a4947be37e23315c5389fe8b9fc8 /passes/cmds
parentaa0ab975b956e3b37c4d861fcf067475a28fd491 (diff)
Added support for "file names with blanks"
Diffstat (limited to 'passes/cmds')
-rw-r--r--passes/cmds/setattr.cc34
1 files changed, 14 insertions, 20 deletions
diff --git a/passes/cmds/setattr.cc b/passes/cmds/setattr.cc
index e4ad1f37..a8262569 100644
--- a/passes/cmds/setattr.cc
+++ b/passes/cmds/setattr.cc
@@ -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") {