3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-09-12 12:41:28 +00:00

Make Const::as_string work without reducing packed bits to vector<State>

This commit is contained in:
Robert O'Callahan 2025-08-29 04:40:22 +00:00
parent 652190bd50
commit a57b7dfd2e
2 changed files with 16 additions and 10 deletions

View file

@ -505,18 +505,17 @@ std::optional<int> RTLIL::Const::as_int_compress(bool is_signed) const
std::string RTLIL::Const::as_string(const char* any) const
{
bitvectorize_internal();
bitvectype& bv = get_bits();
int sz = size();
std::string ret;
ret.reserve(bv.size());
for (size_t i = bv.size(); i > 0; i--)
switch (bv[i-1]) {
case S0: ret += "0"; break;
case S1: ret += "1"; break;
case Sx: ret += "x"; break;
case Sz: ret += "z"; break;
ret.reserve(sz);
for (int i = sz - 1; i >= 0; --i)
switch ((*this)[i]) {
case S0: ret.push_back('0'); break;
case S1: ret.push_back('1'); break;
case Sx: ret.push_back('x'); break;
case Sz: ret.push_back('z'); break;
case Sa: ret += any; break;
case Sm: ret += "m"; break;
case Sm: ret.push_back('m'); break;
}
return ret;
}

View file

@ -124,6 +124,13 @@ namespace RTLIL {
EXPECT_TRUE(c.as_bool());
EXPECT_TRUE(c.is_str());
}
{
Const c(0x2, 8);
EXPECT_TRUE(c.is_str());
EXPECT_EQ(c.as_string(), "00000010");
EXPECT_TRUE(c.is_str());
}
}
TEST_F(KernelRtlilTest, ConstConstIteratorWorks) {