Skip to content

Commit efe4fcd

Browse files
author
clemens
committed
clean parsing code
1 parent 411dbe0 commit efe4fcd

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

passes/cmds/stat.cc

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -751,12 +751,12 @@ void read_liberty_cellarea(dict<IdString, cell_area_t> &cell_area, string libert
751751
const LibertyAst *sar = cell->find("single_area_parameterised");
752752
if (sar != nullptr) {
753753
for (const auto &s : sar->args) {
754-
double value = 0;
755-
auto [ptr, ec] = std::from_chars(s.data(), s.data() + s.size(), value);
756-
// ec != std::errc() means parse error, or ptr didn't consume entire string
757-
if (ec != std::errc() || ptr != s.data() + s.size())
758-
break;
759-
single_parameter_area.push_back(value);
754+
try {
755+
double value = std::stod(s);
756+
single_parameter_area.push_back(value);
757+
} catch (const std::exception &e) {
758+
log_error("Failed to parse single parameter area value '%s': %s\n", s.c_str(), e.what());
759+
}
760760
}
761761
if (single_parameter_area.size() == 0)
762762
printf("error: %s\n", sar->args[single_parameter_area.size() - 1].c_str());
@@ -782,10 +782,12 @@ void read_liberty_cellarea(dict<IdString, cell_area_t> &cell_area, string libert
782782
vector<double> cast_sub_array;
783783
for (const auto &s : sub_array) {
784784
double value = 0;
785-
auto [ptr, ec] = std::from_chars(s.data() + 1, s.data() + s.size(), value);
786-
if (ec != std::errc() || ptr != s.data() + s.size())
787-
break;
788-
cast_sub_array.push_back(value);
785+
try {
786+
value = std::stod(s);
787+
cast_sub_array.push_back(value);
788+
} catch (const std::exception &e) {
789+
log_error("Failed to parse double parameter area value '%s': %s\n", s.c_str(), e.what());
790+
}
789791
}
790792
double_parameter_area.push_back(cast_sub_array);
791793
if (cast_sub_array.size() == 0)

0 commit comments

Comments
 (0)