write_sdf escape non-alnum chars in port name

This commit is contained in:
James Cherry 2021-05-28 09:52:32 -07:00
parent 35a3f1e4e3
commit 34c312fd52
1 changed files with 26 additions and 6 deletions

View File

@ -717,12 +717,6 @@ SdfWriter::sdfEdge(const Transition *tr)
////////////////////////////////////////////////////////////////
char *
SdfWriter::sdfPortName(const Pin *pin)
{
return const_cast<char *>(network_->portName(pin));
}
char *
SdfWriter::sdfPathName(const Pin *pin)
{
@ -790,4 +784,30 @@ SdfWriter::sdfName(const Instance *inst)
return sdf_name;
}
char *
SdfWriter::sdfPortName(const Pin *pin)
{
const char *name = network_->portName(pin);
char *sdf_name = makeTmpString(strlen(name) * 2 + 1);
const char *p = name;
char *s = sdf_name;
while (*p) {
char ch = *p;
if (ch == network_escape_) {
// Copy escape and escaped char.
*s++ = sdf_escape_;
*s++ = *++p;
}
else {
if (!(isalnum(ch) || ch == '_' || ch == '[' || ch == ']'))
// Insert escape.
*s++ = sdf_escape_;
*s++ = ch;
}
p++;
}
*s = '\0';
return sdf_name;
}
} // namespace