3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-08-18 17:22:17 +00:00

clean parsing code

This commit is contained in:
clemens 2025-08-12 09:37:55 +02:00
parent 5fc0e77c3d
commit 50fe9dd7f2

View file

@ -818,12 +818,12 @@ void read_liberty_cellarea(dict<IdString, cell_area_t> &cell_area, string libert
const LibertyAst *sar = cell->find("single_area_parameterised");
if (sar != nullptr) {
for (const auto &s : sar->args) {
double value = 0;
auto [ptr, ec] = std::from_chars(s.data(), s.data() + s.size(), value);
// ec != std::errc() means parse error, or ptr didn't consume entire string
if (ec != std::errc() || ptr != s.data() + s.size())
break;
try {
double value = std::stod(s);
single_parameter_area.push_back(value);
} catch (const std::exception &e) {
log_error("Failed to parse single parameter area value '%s': %s\n", s.c_str(), e.what());
}
}
if (single_parameter_area.size() == 0)
printf("error: %s\n", sar->args[single_parameter_area.size() - 1].c_str());
@ -849,10 +849,12 @@ void read_liberty_cellarea(dict<IdString, cell_area_t> &cell_area, string libert
vector<double> cast_sub_array;
for (const auto &s : sub_array) {
double value = 0;
auto [ptr, ec] = std::from_chars(s.data() + 1, s.data() + s.size(), value);
if (ec != std::errc() || ptr != s.data() + s.size())
break;
try {
value = std::stod(s);
cast_sub_array.push_back(value);
} catch (const std::exception &e) {
log_error("Failed to parse double parameter area value '%s': %s\n", s.c_str(), e.what());
}
}
double_parameter_area.push_back(cast_sub_array);
if (cast_sub_array.size() == 0)