mirror of https://github.com/YosysHQ/yosys.git
Implemented general handler for selection arguments
This commit is contained in:
parent
5bed90ae3a
commit
4fcb9a7b99
|
@ -213,7 +213,8 @@ struct ShellPass : public Pass {
|
||||||
log("Press Ctrl-D to leave the interactive shell.\n");
|
log("Press Ctrl-D to leave the interactive shell.\n");
|
||||||
log("\n");
|
log("\n");
|
||||||
}
|
}
|
||||||
virtual void execute(std::vector<std::string>, RTLIL::Design *design) {
|
virtual void execute(std::vector<std::string> args, RTLIL::Design *design) {
|
||||||
|
extra_args(args, 1, design, false);
|
||||||
shell(design);
|
shell(design);
|
||||||
}
|
}
|
||||||
} ShellPass;
|
} ShellPass;
|
||||||
|
|
|
@ -107,7 +107,10 @@ void Pass::cmd_error(const std::vector<std::string> &args, size_t argidx, std::s
|
||||||
msg.c_str(), command_text.c_str(), error_pos, "");
|
msg.c_str(), command_text.c_str(), error_pos, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
void Pass::extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Design *)
|
// implemented in kernel/select.cc
|
||||||
|
extern void handle_extra_select_args(Pass *pass, std::vector<std::string> args, size_t argidx, RTLIL::Design *design);
|
||||||
|
|
||||||
|
void Pass::extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Design *design, bool select)
|
||||||
{
|
{
|
||||||
for (; argidx < args.size(); argidx++)
|
for (; argidx < args.size(); argidx++)
|
||||||
{
|
{
|
||||||
|
@ -115,7 +118,12 @@ void Pass::extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Desig
|
||||||
|
|
||||||
if (arg.substr(0, 1) == "-")
|
if (arg.substr(0, 1) == "-")
|
||||||
cmd_error(args, argidx, "Unkown option or option in arguments.");
|
cmd_error(args, argidx, "Unkown option or option in arguments.");
|
||||||
cmd_error(args, argidx, "Extra argument.");
|
|
||||||
|
if (!select)
|
||||||
|
cmd_error(args, argidx, "Extra argument.");
|
||||||
|
|
||||||
|
handle_extra_select_args(this, args, argidx, design);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
cmd_log_args(args);
|
cmd_log_args(args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ struct Pass
|
||||||
|
|
||||||
void cmd_log_args(const std::vector<std::string> &args);
|
void cmd_log_args(const std::vector<std::string> &args);
|
||||||
void cmd_error(const std::vector<std::string> &args, size_t argidx, std::string msg);
|
void cmd_error(const std::vector<std::string> &args, size_t argidx, std::string msg);
|
||||||
void extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Design *design);
|
void extra_args(std::vector<std::string> args, size_t argidx, RTLIL::Design *design, bool select = true);
|
||||||
|
|
||||||
static void call(RTLIL::Design *design, std::string command);
|
static void call(RTLIL::Design *design, std::string command);
|
||||||
static void call(RTLIL::Design *design, std::vector<std::string> args);
|
static void call(RTLIL::Design *design, std::vector<std::string> args);
|
||||||
|
|
|
@ -394,6 +394,22 @@ static void select_stmt(RTLIL::Design *design, std::string arg)
|
||||||
select_filter_active_mod(design, work_stack.back());
|
select_filter_active_mod(design, work_stack.back());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// used in kernel/register.cc
|
||||||
|
void handle_extra_select_args(Pass *pass, std::vector<std::string> args, size_t argidx, RTLIL::Design *design)
|
||||||
|
{
|
||||||
|
work_stack.clear();
|
||||||
|
for (; argidx < args.size(); argidx++) {
|
||||||
|
if (args[argidx].substr(0, 1) == "-")
|
||||||
|
pass->cmd_error(args, argidx, "Unexpected option in selection arguments.");
|
||||||
|
select_stmt(design, args[argidx]);
|
||||||
|
}
|
||||||
|
while (work_stack.size() > 1) {
|
||||||
|
select_op_union(design, work_stack.front(), work_stack.back());
|
||||||
|
work_stack.pop_back();
|
||||||
|
}
|
||||||
|
design->selection_stack.push_back(work_stack.back());
|
||||||
|
}
|
||||||
|
|
||||||
struct SelectPass : public Pass {
|
struct SelectPass : public Pass {
|
||||||
SelectPass() : Pass("select", "modify and view the list of selected objects") { }
|
SelectPass() : Pass("select", "modify and view the list of selected objects") { }
|
||||||
virtual void help()
|
virtual void help()
|
||||||
|
|
|
@ -188,8 +188,9 @@ struct HierarchyPass : public Pass {
|
||||||
log_cmd_error("Module `%s' not found!\n", args[argidx].c_str());
|
log_cmd_error("Module `%s' not found!\n", args[argidx].c_str());
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
log_cmd_error("Unkown option %s.\n", args[argidx].c_str());
|
break;
|
||||||
}
|
}
|
||||||
|
extra_args(args, argidx, design, false);
|
||||||
|
|
||||||
if (top_mod != NULL)
|
if (top_mod != NULL)
|
||||||
hierarchy(design, top_mod);
|
hierarchy(design, top_mod);
|
||||||
|
|
Loading…
Reference in New Issue