rm tmp string uses

commit 2d0a4f8e9a8b46faa2ba91e1be636c3c3ad95a7f
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 21:25:37 2023 -0700

    leaks

    Signed-off-by: James Cherry <[email protected]>

commit 5514910a91707d615bac0bbed3a29f579eca8de2
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 18:21:54 2023 -0700

    foo

    Signed-off-by: James Cherry <[email protected]>

commit 076a51d5816444e883232933c2ded7309291d0bc
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 16:38:42 2023 -0700

    parse bus string

    Signed-off-by: James Cherry <[email protected]>

commit 2b80e563cbbb6563a6b716431f391bbb6639f816
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 15:57:05 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit 9e4f2308658232d0b1ee9efcd948bb19ae5dd30f
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 14:37:35 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit ebad3afd49b08e7194452dd082c3c7c05767f875
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 10:59:11 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit 69647913932312a04ca06e7a04cca17ed50d4daf
Author: James Cherry <[email protected]>
Date:   Fri Mar 24 21:02:20 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit 55e67996a7b0651dbb5ee06cb89fe0410648c3c1
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 10:42:43 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit 73cee43925c0d32940989c616440b4da18640121
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 09:55:17 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit eba6d1413b8d87a64a90141e5263a56eede1df51
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 09:40:16 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit 95d6ed78144512a37fd7c1d3d8a62fc4c8965818
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 08:18:46 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit faf82464d7be7fd6c958a21d401fa48ece4ac341
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 07:49:11 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit cfc9064496cb6f46ec562b104bc7fff2fbc1b32e
Author: James Cherry <[email protected]>
Date:   Sat Mar 25 07:37:12 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit 057933a6ac356a7541883aa64b5109c7a0e8b8d1
Author: James Cherry <[email protected]>
Date:   Fri Mar 24 21:02:20 2023 -0700

    rm tmp string

    Signed-off-by: James Cherry <[email protected]>

commit fdeb6436a72413356a627dd1de1d8cec7fca4c4a
Author: James Cherry <[email protected]>
Date:   Fri Mar 24 19:53:44 2023 -0700

    rm TmpString uses

    Signed-off-by: James Cherry <[email protected]>

Signed-off-by: James Cherry <[email protected]>
This commit is contained in:
James Cherry
2023-03-26 06:34:36 -07:00
parent 2b8fd17ca7
commit 94a93bd4ae
24 changed files with 621 additions and 588 deletions
+38 -77
View File
@@ -23,72 +23,63 @@
namespace sta {
static const char *
static string
staToVerilog(const char *sta_name,
const char escape);
static const char *
static string
staToVerilog2(const char *sta_name,
const char escape);
static const char *
static string
verilogToSta(const char *verilog_name);
static inline void
vstringAppend(char *&str,
char *&str_end,
char *&insert,
char ch);
const char *
string
instanceVerilogName(const char *sta_name,
const char escape)
{
return staToVerilog(sta_name, escape);
}
const char *
string
netVerilogName(const char *sta_name,
const char escape)
{
char *bus_name;
bool is_bus;
string bus_name;
int index;
parseBusName(sta_name, '[', ']', escape, bus_name, index);
if (bus_name) {
const char *vname = stringPrintTmp("%s[%d]",
staToVerilog(bus_name, escape),
index);
stringDelete(bus_name);
parseBusName(sta_name, '[', ']', escape, is_bus, bus_name, index);
if (is_bus) {
string bus_vname = staToVerilog(bus_name.c_str(), escape);
string vname;
stringPrint(vname, "%s[%d]", bus_vname.c_str(), index);
return vname;
}
else
return staToVerilog2(sta_name, escape);
}
const char *
string
portVerilogName(const char *sta_name,
const char escape)
{
return staToVerilog2(sta_name, escape);
}
static const char *
static string
staToVerilog(const char *sta_name,
const char escape)
{
// Leave room for leading escape and trailing space if the name
// needs to be escaped.
size_t verilog_name_length = strlen(sta_name) + 3;
char *verilog_name = makeTmpString(verilog_name_length);
char *verilog_name_end = &verilog_name[verilog_name_length];
char *v = verilog_name;
// Assume the name has to be escaped and start copying while scanning.
string escaped_name = "\\";
bool escaped = false;
*v++ = '\\';
for (const char *s = sta_name; *s ; s++) {
char ch = s[0];
if (ch == escape) {
char next_ch = s[1];
if (next_ch == escape) {
vstringAppend(verilog_name, verilog_name_end, v, ch);
vstringAppend(verilog_name, verilog_name_end, v, next_ch);
escaped_name += ch;
escaped_name += next_ch;
s++;
}
else
@@ -98,20 +89,19 @@ staToVerilog(const char *sta_name,
else {
if ((!(isalnum(ch) || ch == '_')))
escaped = true;
vstringAppend(verilog_name, verilog_name_end, v, ch);
escaped_name += ch;
}
}
if (escaped) {
// Add a terminating space.
vstringAppend(verilog_name, verilog_name_end, v, ' ');
vstringAppend(verilog_name, verilog_name_end, v, '\0');
return verilog_name;
escaped_name += ' ';
return escaped_name;
}
else
return sta_name;
return string(sta_name);
}
static const char *
static string
staToVerilog2(const char *sta_name,
const char escape)
{
@@ -119,20 +109,16 @@ staToVerilog2(const char *sta_name,
constexpr char bus_brkt_right = ']';
// Leave room for leading escape and trailing space if the name
// needs to be escaped.
size_t verilog_name_length = strlen(sta_name) + 3;
char *verilog_name = makeTmpString(verilog_name_length);
char *verilog_name_end = &verilog_name[verilog_name_length];
char *v = verilog_name;
string escaped_name = "\\";
// Assume the name has to be escaped and start copying while scanning.
bool escaped = false;
*v++ = '\\';
for (const char *s = sta_name; *s ; s++) {
char ch = s[0];
if (ch == escape) {
char next_ch = s[1];
if (next_ch == escape) {
vstringAppend(verilog_name, verilog_name_end, v, ch);
vstringAppend(verilog_name, verilog_name_end, v, next_ch);
escaped_name += ch;
escaped_name += next_ch;
s++;
}
else
@@ -144,46 +130,45 @@ staToVerilog2(const char *sta_name,
if ((!(isalnum(ch) || ch == '_') && !is_brkt)
|| is_brkt)
escaped = true;
vstringAppend(verilog_name, verilog_name_end, v, ch);
escaped_name += ch;
}
}
if (escaped) {
// Add a terminating space.
vstringAppend(verilog_name, verilog_name_end, v, ' ');
vstringAppend(verilog_name, verilog_name_end, v, '\0');
return verilog_name;
escaped_name += ' ';
return escaped_name;
}
else
return sta_name;
return string(sta_name);
}
////////////////////////////////////////////////////////////////
const char *
string
moduleVerilogToSta(const char *module_name)
{
return verilogToSta(module_name);
}
const char *
string
instanceVerilogToSta(const char *inst_name)
{
return verilogToSta(inst_name);
}
const char *
string
netVerilogToSta(const char *net_name)
{
return verilogToSta(net_name);
}
const char *
string
portVerilogToSta(const char *port_name)
{
return verilogToSta(port_name);
}
static const char *
static string
verilogToSta(const char *verilog_name)
{
if (verilog_name && verilog_name[0] == '\\') {
@@ -197,11 +182,7 @@ verilogToSta(const char *verilog_name)
size_t verilog_name_length = strlen(verilog_name);
if (verilog_name[verilog_name_length - 1] == ' ')
verilog_name_length--;
// +1 for \0, +2 for escaping brackets.
size_t sta_name_length = verilog_name_length + 1;
char *sta_name = makeTmpString(sta_name_length);
char *sta_name_end = &sta_name[sta_name_length];
char *s = sta_name;
string sta_name;
for (size_t i = 0; i < verilog_name_length; i++) {
char ch = verilog_name[i];
if (ch == bus_brkt_left
@@ -209,33 +190,13 @@ verilogToSta(const char *verilog_name)
|| ch == divider
|| ch == escape)
// Escape bus brackets, dividers and escapes.
vstringAppend(sta_name, sta_name_end, s, escape);
vstringAppend(sta_name, sta_name_end, s, ch);
sta_name += escape;
sta_name += ch;
}
vstringAppend(sta_name, sta_name_end, s, '\0');
return sta_name;
}
else
return verilog_name;
}
// Append ch to str at insert. Resize str if necessary.
static inline void
vstringAppend(char *&str,
char *&str_end,
char *&insert,
char ch)
{
if (insert == str_end) {
size_t length = str_end - str;
size_t length2 = length * 2;
char *new_str = makeTmpString(length2);
strncpy(new_str, str, length);
str = new_str;
str_end = &str[length2];
insert = &str[length];
}
*insert++ = ch;
return string(verilog_name);
}
} // namespace