mirror of
https://github.com/YosysHQ/yosys
synced 2025-08-18 17:22:17 +00:00
clean parsing code
This commit is contained in:
parent
5fc0e77c3d
commit
50fe9dd7f2
1 changed files with 12 additions and 10 deletions
|
@ -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");
|
const LibertyAst *sar = cell->find("single_area_parameterised");
|
||||||
if (sar != nullptr) {
|
if (sar != nullptr) {
|
||||||
for (const auto &s : sar->args) {
|
for (const auto &s : sar->args) {
|
||||||
double value = 0;
|
try {
|
||||||
auto [ptr, ec] = std::from_chars(s.data(), s.data() + s.size(), value);
|
double value = std::stod(s);
|
||||||
// ec != std::errc() means parse error, or ptr didn't consume entire string
|
single_parameter_area.push_back(value);
|
||||||
if (ec != std::errc() || ptr != s.data() + s.size())
|
} catch (const std::exception &e) {
|
||||||
break;
|
log_error("Failed to parse single parameter area value '%s': %s\n", s.c_str(), e.what());
|
||||||
single_parameter_area.push_back(value);
|
}
|
||||||
}
|
}
|
||||||
if (single_parameter_area.size() == 0)
|
if (single_parameter_area.size() == 0)
|
||||||
printf("error: %s\n", sar->args[single_parameter_area.size() - 1].c_str());
|
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;
|
vector<double> cast_sub_array;
|
||||||
for (const auto &s : sub_array) {
|
for (const auto &s : sub_array) {
|
||||||
double value = 0;
|
double value = 0;
|
||||||
auto [ptr, ec] = std::from_chars(s.data() + 1, s.data() + s.size(), value);
|
try {
|
||||||
if (ec != std::errc() || ptr != s.data() + s.size())
|
value = std::stod(s);
|
||||||
break;
|
cast_sub_array.push_back(value);
|
||||||
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);
|
double_parameter_area.push_back(cast_sub_array);
|
||||||
if (cast_sub_array.size() == 0)
|
if (cast_sub_array.size() == 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue