Apply review comments

This commit is contained in:
Nick Brereton 2026-06-22 13:29:27 -04:00
parent 7e71377b9b
commit 2004c87892
4 changed files with 25 additions and 23 deletions

View File

@ -69,7 +69,7 @@ constexpr unsigned VL_VPI_LINE_SIZE_ = 8192;
//====================================================================== //======================================================================
// Implementation // Implementation
static const char* vl_vpi_find_unescaped_dot(const char* posp) { static const char* _vl_vpi_find_unescaped_dot(const char* posp) {
for (; *posp; ++posp) { for (; *posp; ++posp) {
if (*posp == '\\') { if (*posp == '\\') {
while (*posp && *posp != ' ') ++posp; while (*posp && *posp != ' ') ++posp;
@ -81,10 +81,10 @@ static const char* vl_vpi_find_unescaped_dot(const char* posp) {
return nullptr; return nullptr;
} }
static std::string vl_vpi_member_local_name(const char* const namep) { static std::string _vl_vpi_member_local_name(const char* const namep) {
const char* localp = namep; const char* localp = namep;
const char* posp = namep; const char* posp = namep;
while ((posp = vl_vpi_find_unescaped_dot(posp))) localp = ++posp; while ((posp = _vl_vpi_find_unescaped_dot(posp))) localp = ++posp;
return localp; return localp;
} }
@ -398,8 +398,9 @@ public:
: VerilatedVpioVarBase{varp, scopep} { : VerilatedVpioVarBase{varp, scopep} {
m_entSize = varp->entSize(); m_entSize = varp->entSize();
m_varDatap = varp->datap(); m_varDatap = varp->datap();
if (vl_vpi_find_unescaped_dot(varp->name())) if (_vl_vpi_find_unescaped_dot(varp->name())) {
m_name = vl_vpi_member_local_name(varp->name()); m_name = _vl_vpi_member_local_name(varp->name());
}
} }
VerilatedVpioVar(const VerilatedVar* varp, const VerilatedScope* scopep, void* datap, VerilatedVpioVar(const VerilatedVar* varp, const VerilatedScope* scopep, void* datap,
const std::string& name, const std::string& fullname) const std::string& name, const std::string& fullname)
@ -514,7 +515,7 @@ public:
const auto offset const auto offset
= static_cast<uint8_t*>(memberDatap) - static_cast<uint8_t*>(parentDatap); = static_cast<uint8_t*>(memberDatap) - static_cast<uint8_t*>(parentDatap);
const std::string localName = vl_vpi_member_local_name(memberVarp->name()); const std::string localName = _vl_vpi_member_local_name(memberVarp->name());
return new VerilatedVpioVar{memberVarp, scopep(), return new VerilatedVpioVar{memberVarp, scopep(),
static_cast<uint8_t*>(varDatap()) + offset, localName, static_cast<uint8_t*>(varDatap()) + offset, localName,
@ -699,7 +700,7 @@ public:
const char* const name = m_it->second.name(); const char* const name = m_it->second.name();
if (std::strncmp(name, m_namePrefix.c_str(), m_namePrefix.length()) != 0) continue; if (std::strncmp(name, m_namePrefix.c_str(), m_namePrefix.length()) != 0) continue;
// Only direct members, not grandchildren // Only direct members, not grandchildren
if (vl_vpi_find_unescaped_dot(name + m_namePrefix.length())) continue; if (_vl_vpi_find_unescaped_dot(name + m_namePrefix.length())) continue;
VerilatedVpioVar* const memberp = m_varp->withMember(&(m_it->second)); VerilatedVpioVar* const memberp = m_varp->withMember(&(m_it->second));
if (VL_UNLIKELY(!memberp)) continue; if (VL_UNLIKELY(!memberp)) continue;
return memberp->castVpiHandle(); return memberp->castVpiHandle();
@ -714,7 +715,7 @@ public:
explicit VerilatedVpioModule(const VerilatedScope* modulep) explicit VerilatedVpioModule(const VerilatedScope* modulep)
: VerilatedVpioScope{modulep} { : VerilatedVpioScope{modulep} {
// Look for '.' not inside escaped identifier // Look for '.' not inside escaped identifier
if (VL_UNLIKELY(!vl_vpi_find_unescaped_dot(m_fullname))) m_toplevel = true; if (VL_UNLIKELY(!_vl_vpi_find_unescaped_dot(m_fullname))) m_toplevel = true;
} }
// cppcheck-suppress duplInheritedMember // cppcheck-suppress duplInheritedMember
static VerilatedVpioModule* castp(vpiHandle h) { static VerilatedVpioModule* castp(vpiHandle h) {
@ -2517,7 +2518,7 @@ static const VerilatedScope* vl_vpi_top_port_scopep(const VerilatedScope* const
if (VL_UNLIKELY(!scopep)) return nullptr; if (VL_UNLIKELY(!scopep)) return nullptr;
if (scopep->type() != VerilatedScope::SCOPE_MODULE) return nullptr; if (scopep->type() != VerilatedScope::SCOPE_MODULE) return nullptr;
if (std::strcmp(scopep->name(), "TOP") == 0) return nullptr; if (std::strcmp(scopep->name(), "TOP") == 0) return nullptr;
if (vl_vpi_find_unescaped_dot(scopep->name())) return nullptr; if (_vl_vpi_find_unescaped_dot(scopep->name())) return nullptr;
return Verilated::threadContextp()->scopeFind("TOP"); return Verilated::threadContextp()->scopeFind("TOP");
} }
@ -2591,7 +2592,7 @@ static std::vector<std::string> vl_vpi_split_dotted_name(const std::string& name
const char* const namep = name.c_str(); const char* const namep = name.c_str();
const char* beginp = namep; const char* beginp = namep;
const char* posp = beginp; const char* posp = beginp;
while ((posp = vl_vpi_find_unescaped_dot(posp))) { while ((posp = _vl_vpi_find_unescaped_dot(posp))) {
parts.emplace_back(beginp, posp - beginp); parts.emplace_back(beginp, posp - beginp);
beginp = ++posp; beginp = ++posp;
} }
@ -2626,7 +2627,8 @@ vl_vpi_handle_indexed_member_from_scope(const VerilatedScope* const scopep,
= fullnameOverride.empty() = fullnameOverride.empty()
? new VerilatedVpioVar{baseVarp, varScopep} ? new VerilatedVpioVar{baseVarp, varScopep}
: new VerilatedVpioVar{baseVarp, varScopep, baseVarp->datap(), : new VerilatedVpioVar{baseVarp, varScopep, baseVarp->datap(),
vl_vpi_member_local_name(baseVarp->name()), fullnameOverride}; _vl_vpi_member_local_name(baseVarp->name()),
fullnameOverride};
VerilatedVpioVar* vop = vl_vpi_handle_apply_indices(baseVop, indices); VerilatedVpioVar* vop = vl_vpi_handle_apply_indices(baseVop, indices);
if (!vop) return nullptr; if (!vop) return nullptr;
@ -2785,7 +2787,7 @@ vpiHandle vpi_handle_by_name(PLI_BYTE8* namep, vpiHandle scope) {
} else if (!fullnameOverride.empty()) { } else if (!fullnameOverride.empty()) {
resultHandle resultHandle
= (new VerilatedVpioVar{varp, scopep, varp->datap(), = (new VerilatedVpioVar{varp, scopep, varp->datap(),
vl_vpi_member_local_name(varp->name()), fullnameOverride}) _vl_vpi_member_local_name(varp->name()), fullnameOverride})
->castVpiHandle(); ->castVpiHandle();
} else { } else {
resultHandle = (new VerilatedVpioVar{varp, scopep})->castVpiHandle(); resultHandle = (new VerilatedVpioVar{varp, scopep})->castVpiHandle();

View File

@ -220,7 +220,7 @@ class EmitCSyms final : EmitCBaseVisitorConst {
dtypep = dtypep->skipRefp(); dtypep = dtypep->skipRefp();
const AstUnpackArrayDType* const adtypep = VN_CAST(dtypep, UnpackArrayDType); const AstUnpackArrayDType* const adtypep = VN_CAST(dtypep, UnpackArrayDType);
if (!adtypep) break; if (!adtypep) break;
elements *= std::abs(adtypep->left() - adtypep->right()) + 1; elements *= adtypep->elementsConst();
dtypep = adtypep->subDTypep(); dtypep = adtypep->subDTypep();
} }
return elements; return elements;

View File

@ -691,7 +691,7 @@ int _mon_check_unpacked_struct_members() {
CHECK_RESULT(vpi_get(vpiType, vh173), vpiRegArray); CHECK_RESULT(vpi_get(vpiType, vh173), vpiRegArray);
CHECK_RESULT(vpi_get(vpiSize, vh173), 4); CHECK_RESULT(vpi_get(vpiSize, vh173), 4);
TestVpiHandle vh174 = vpi_handle_by_index(vh173, 2); TestVpiHandle vh174 = vpi_handle_by_index(vh173, 3);
CHECK_RESULT_NZ(vh174); CHECK_RESULT_NZ(vh174);
CHECK_RESULT(vpi_get(vpiType, vh174), vpiReg); CHECK_RESULT(vpi_get(vpiType, vh174), vpiReg);
CHECK_RESULT(vpi_get(vpiSize, vh174), 8); CHECK_RESULT(vpi_get(vpiSize, vh174), 8);
@ -706,7 +706,7 @@ int _mon_check_unpacked_struct_members() {
CHECK_RESULT(vpi_get(vpiType, vh17a), vpiRegArray); CHECK_RESULT(vpi_get(vpiType, vh17a), vpiRegArray);
CHECK_RESULT(vpi_get(vpiSize, vh17a), 2); CHECK_RESULT(vpi_get(vpiSize, vh17a), 2);
TestVpiHandle vh17b = vpi_handle_by_index(vh17a, 0); TestVpiHandle vh17b = vpi_handle_by_index(vh17a, 2);
CHECK_RESULT_NZ(vh17b); CHECK_RESULT_NZ(vh17b);
CHECK_RESULT(vpi_get(vpiType, vh17b), vpiStructVar); CHECK_RESULT(vpi_get(vpiType, vh17b), vpiStructVar);
@ -736,7 +736,7 @@ int _mon_check_unpacked_struct_members() {
CHECK_RESULT(vpi_get(vpiType, vh176), vpiRegArray); CHECK_RESULT(vpi_get(vpiType, vh176), vpiRegArray);
CHECK_RESULT(vpi_get(vpiSize, vh176), 2); CHECK_RESULT(vpi_get(vpiSize, vh176), 2);
TestVpiHandle vh177 = vpi_handle_by_index(vh176, 1); TestVpiHandle vh177 = vpi_handle_by_index(vh176, 3);
CHECK_RESULT_NZ(vh177); CHECK_RESULT_NZ(vh177);
CHECK_RESULT(vpi_get(vpiType, vh177), vpiStructVar); CHECK_RESULT(vpi_get(vpiType, vh177), vpiStructVar);
@ -751,7 +751,7 @@ int _mon_check_unpacked_struct_members() {
TestVpiHandle vh179 TestVpiHandle vh179
= vpi_handle_by_name(const_cast<PLI_BYTE8*>(TestSimulator::rooted( = vpi_handle_by_name(const_cast<PLI_BYTE8*>(TestSimulator::rooted(
"parent_struct_array[1].children[1].child_leaf")), "parent_struct_array[1].children[3].child_leaf")),
nullptr); nullptr);
CHECK_RESULT_NZ(vh179); CHECK_RESULT_NZ(vh179);
vpi_get_value(vh179, &tmpValue); vpi_get_value(vh179, &tmpValue);
@ -759,7 +759,7 @@ int _mon_check_unpacked_struct_members() {
TestVpiHandle vh17d = vpi_handle_by_name((PLI_BYTE8*)"trailing_children", vh172); TestVpiHandle vh17d = vpi_handle_by_name((PLI_BYTE8*)"trailing_children", vh172);
CHECK_RESULT_NZ(vh17d); CHECK_RESULT_NZ(vh17d);
TestVpiHandle vh17e = vpi_handle_by_index(vh17d, 1); TestVpiHandle vh17e = vpi_handle_by_index(vh17d, 2);
CHECK_RESULT_NZ(vh17e); CHECK_RESULT_NZ(vh17e);
TestVpiHandle vh17f = vpi_handle_by_name((PLI_BYTE8*)"child_leaf", vh17e); TestVpiHandle vh17f = vpi_handle_by_name((PLI_BYTE8*)"child_leaf", vh17e);
CHECK_RESULT_NZ(vh17f); CHECK_RESULT_NZ(vh17f);
@ -770,14 +770,14 @@ int _mon_check_unpacked_struct_members() {
TestVpiHandle vh17g TestVpiHandle vh17g
= vpi_handle_by_name(const_cast<PLI_BYTE8*>(TestSimulator::rooted( = vpi_handle_by_name(const_cast<PLI_BYTE8*>(TestSimulator::rooted(
"parent_struct_array[1].trailing_children[1].child_leaf")), "parent_struct_array[1].trailing_children[2].child_leaf")),
nullptr); nullptr);
CHECK_RESULT_NZ(vh17g); CHECK_RESULT_NZ(vh17g);
vpi_get_value(vh17g, &tmpValue); vpi_get_value(vh17g, &tmpValue);
CHECK_RESULT(tmpValue.value.integer, 0x6b); CHECK_RESULT(tmpValue.value.integer, 0x6b);
CHECK_RESULT_Z(vpi_handle_by_name(const_cast<PLI_BYTE8*>(TestSimulator::rooted( CHECK_RESULT_Z(vpi_handle_by_name(const_cast<PLI_BYTE8*>(TestSimulator::rooted(
"parent_struct_array[1].children[1:0].child_leaf")), "parent_struct_array[1].children[3:2].child_leaf")),
nullptr)); nullptr));
} }

View File

@ -103,9 +103,9 @@ extern "C" int mon_check();
typedef struct { typedef struct {
logic [15:0] scalar; logic [15:0] scalar;
child_struct_t children [1:0]; child_struct_t children [3:2];
logic [7:0] tail_array [3:0]; logic [7:0] tail_array [2:5];
child_struct_t trailing_children [1:0]; child_struct_t trailing_children [3:2];
} parent_struct_t; } parent_struct_t;
parent_struct_t parent_struct_array [1:0] /*verilator public_flat_rw*/; parent_struct_t parent_struct_array [1:0] /*verilator public_flat_rw*/;