aboutsummaryrefslogtreecommitdiff
path: root/boot/validation.cc
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-08-14 17:22:17 +0200
committerEugen Wissner <belka@caraus.de>2026-08-14 17:22:17 +0200
commitd696abc97143061bf2abb05922188e12b59306c1 (patch)
treedf8d2d1799e7036566d02e2201d159634d576481 /boot/validation.cc
parentbf7416a3ef9f0b787dcaebf816f3f3e6e385ff42 (diff)
downloadelna-d696abc97143061bf2abb05922188e12b59306c1.tar.gz
Use the new .is_a() for literal kind checks in the evaluator
Diffstat (limited to 'boot/validation.cc')
-rw-r--r--boot/validation.cc25
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);
}
}
}