diff options
Diffstat (limited to 'boot/validation.cc')
| -rw-r--r-- | boot/validation.cc | 25 |
1 files changed, 5 insertions, 20 deletions
diff --git a/boot/validation.cc b/boot/validation.cc index 0c03fd0..26d4f64 100644 --- a/boot/validation.cc +++ b/boot/validation.cc @@ -21,33 +21,19 @@ along with GCC; see the file COPYING3. If not see namespace elna::boot { - validation_error::validation_error(const source_position position, payload_type payload) - : error(position), payload(payload) + validation_error::validation_error(const source_position position, source_position first) + : error(position), first(first) { } std::string validation_error::what() const { - return std::visit([](const auto& payload) -> std::string { - using T = std::decay_t<decltype(payload)>; - - if constexpr (std::is_same_v<T, duplicate_case>) - { - return "Duplicate case label"; - } - }, this->payload); + return "Duplicate case label"; } std::optional<std::pair<std::string, source_position>> validation_error::note() const { - return std::visit([](const auto& payload) -> std::optional<std::pair<std::string, source_position>> { - using T = std::decay_t<decltype(payload)>; - - if constexpr (std::is_same_v<T, duplicate_case>) - { - return std::make_pair("Previous label here", payload.first); - } - }, this->payload); + return previous_declaration_note(this->first, "Previous label here"); } validation_visitor::validation_visitor(symbol_bag& bag, const target_info& target) @@ -145,8 +131,7 @@ namespace elna::boot auto [case_position, inserted] = seen.try_emplace(value.value(), label->position()); if (!inserted) { - add_error<validation_error>(label->position(), - validation_error::duplicate_case{ case_position->second }); + add_error<validation_error>(label->position(), case_position->second); } } } |
