Fix import of VHDL enums

This commit is contained in:
Miodrag Milanovic 2020-08-30 12:25:23 +02:00
parent 3030c2b46c
commit b1e3bc059c
1 changed files with 22 additions and 11 deletions

View File

@ -199,12 +199,19 @@ void VerificImporter::import_attributes(dict<RTLIL::IdString, RTLIL::Const> &att
attributes.emplace(stringf("\\enum_value_%s", p+2), RTLIL::escape_id(k));
}
else if (nl->IsFromVhdl()) {
// Expect "<binary>"
// Expect "<binary>" or plain <binary>
auto p = v;
if (p) {
if (*p != '"')
p = nullptr;
else {
if (*p != '"') {
auto *q = p;
for (; *q != '\0'; q++)
if (*q != '0' && *q != '1') {
p = nullptr;
break;
}
if (p != nullptr)
attributes.emplace(stringf("\\enum_value_%s", p), RTLIL::escape_id(k));
} else {
auto *q = p+1;
for (; *q != '"'; q++)
if (*q != '0' && *q != '1') {
@ -213,16 +220,20 @@ void VerificImporter::import_attributes(dict<RTLIL::IdString, RTLIL::Const> &att
}
if (p && *(q+1) != '\0')
p = nullptr;
if (p != nullptr)
{
auto l = strlen(p);
auto q = (char*)malloc(l+1-2);
strncpy(q, p+1, l-2);
q[l-2] = '\0';
attributes.emplace(stringf("\\enum_value_%s", q), RTLIL::escape_id(k));
free(q);
}
}
}
if (p == nullptr)
log_error("Expected TypeRange value '%s' to be of form \"<binary>\".\n", v);
auto l = strlen(p);
auto q = (char*)malloc(l+1-2);
strncpy(q, p+1, l-2);
q[l-2] = '\0';
attributes.emplace(stringf("\\enum_value_%s", q), RTLIL::escape_id(k));
free(q);
log_error("Expected TypeRange value '%s' to be of form \"<binary>\" or <binary>.\n", v);
}
}
}