mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 17:15:33 +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
|
@ -150,7 +150,7 @@ void Pass::call(RTLIL::Design *design, std::string command)
|
|||
std::vector<std::string> args;
|
||||
|
||||
std::string cmd_buf = command;
|
||||
std::string tok = next_token(cmd_buf, " \t\r\n");
|
||||
std::string tok = next_token(cmd_buf, " \t\r\n", true);
|
||||
|
||||
if (tok.empty())
|
||||
return;
|
||||
|
@ -201,7 +201,7 @@ void Pass::call(RTLIL::Design *design, std::string command)
|
|||
call(design, args);
|
||||
args.clear();
|
||||
}
|
||||
tok = next_token(cmd_buf, " \t\r\n");
|
||||
tok = next_token(cmd_buf, " \t\r\n", true);
|
||||
}
|
||||
|
||||
call(design, args);
|
||||
|
@ -359,8 +359,7 @@ void Frontend::extra_args(std::istream *&f, std::string &filename, std::vector<s
|
|||
}
|
||||
f = new std::istringstream(last_here_document);
|
||||
} else {
|
||||
if (filename.substr(0, 2) == "+/")
|
||||
filename = proc_share_dirname() + filename.substr(1);
|
||||
rewrite_filename(filename);
|
||||
std::ifstream *ff = new std::ifstream;
|
||||
ff->open(filename.c_str());
|
||||
if (ff->fail())
|
||||
|
|
|
@ -182,13 +182,23 @@ int readsome(std::istream &f, char *s, int n)
|
|||
return rc;
|
||||
}
|
||||
|
||||
std::string next_token(std::string &text, const char *sep)
|
||||
std::string next_token(std::string &text, const char *sep, bool long_strings)
|
||||
{
|
||||
size_t pos_begin = text.find_first_not_of(sep);
|
||||
|
||||
if (pos_begin == std::string::npos)
|
||||
pos_begin = text.size();
|
||||
|
||||
if (long_strings && pos_begin != text.size() && text[pos_begin] == '"') {
|
||||
string sep_string = sep;
|
||||
for (size_t i = pos_begin+1; i < text.size(); i++)
|
||||
if (text[i] == '"' && (i+1 == text.size() || sep_string.find(text[i+1]) != std::string::npos)) {
|
||||
std::string token = text.substr(pos_begin, i-pos_begin+1);
|
||||
text = text.substr(i+1);
|
||||
return token;
|
||||
}
|
||||
}
|
||||
|
||||
size_t pos_end = text.find_first_of(sep, pos_begin);
|
||||
|
||||
if (pos_end == std::string::npos)
|
||||
|
@ -505,6 +515,14 @@ const char *create_prompt(RTLIL::Design *design, int recursion_counter)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
void rewrite_filename(std::string &filename)
|
||||
{
|
||||
if (filename.substr(0, 1) == "\"" && filename.substr(GetSize(filename)-1) == "\"")
|
||||
filename = filename.substr(1, GetSize(filename)-2);
|
||||
if (filename.substr(0, 2) == "+/")
|
||||
filename = proc_share_dirname() + filename.substr(2);
|
||||
}
|
||||
|
||||
#ifdef YOSYS_ENABLE_TCL
|
||||
static int tcl_yosys_cmd(ClientData, Tcl_Interp *interp, int argc, const char *argv[])
|
||||
{
|
||||
|
|
|
@ -204,7 +204,7 @@ void yosys_banner();
|
|||
std::string stringf(const char *fmt, ...) YS_ATTRIBUTE(format(printf, 1, 2));
|
||||
std::string vstringf(const char *fmt, va_list ap);
|
||||
int readsome(std::istream &f, char *s, int n);
|
||||
std::string next_token(std::string &text, const char *sep = " \t\r\n");
|
||||
std::string next_token(std::string &text, const char *sep = " \t\r\n", bool long_strings = false);
|
||||
bool patmatch(const char *pattern, const char *string);
|
||||
int run_command(const std::string &command, std::function<void(const std::string&)> process_line = std::function<void(const std::string&)>());
|
||||
std::string make_temp_file(std::string template_str = "/tmp/yosys_XXXXXX");
|
||||
|
@ -254,6 +254,7 @@ RTLIL::Design *yosys_get_design();
|
|||
std::string proc_self_dirname();
|
||||
std::string proc_share_dirname();
|
||||
const char *create_prompt(RTLIL::Design *design, int recursion_counter);
|
||||
void rewrite_filename(std::string &filename);
|
||||
|
||||
void run_pass(std::string command, RTLIL::Design *design = nullptr);
|
||||
void run_frontend(std::string filename, std::string command, std::string *backend_command, std::string *from_to_label = nullptr, RTLIL::Design *design = nullptr);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue