From 2e7c555a4f30e92b405139a7325e47bb268a4e31 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 4 Apr 2023 12:44:13 +0200 Subject: disjoint_map_union: show conflicting values on error --- src/buildtool/build_engine/expression/evaluator.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/buildtool/build_engine/expression/evaluator.cpp') diff --git a/src/buildtool/build_engine/expression/evaluator.cpp b/src/buildtool/build_engine/expression/evaluator.cpp index 6c9d47c3..24a12fce 100644 --- a/src/buildtool/build_engine/expression/evaluator.cpp +++ b/src/buildtool/build_engine/expression/evaluator.cpp @@ -285,10 +285,14 @@ auto Union(Expression::list_t const& dicts, size_t from, size_t to) if constexpr (kDisjoint) { auto dup = left->Map().FindConflictingDuplicate(right->Map()); if (dup) { + auto left_val = left->Get(dup->get(), Expression::none_t{}); + auto right_val = right->Get(dup->get(), Expression::none_t{}); throw Evaluator::EvaluationError{ fmt::format("Map union not essentially disjoint as claimed, " - "duplicate key '{}'.", - dup->get())}; + "duplicate key {}; conflicting values:\n- {}\n- {}", + nlohmann::json(dup->get()).dump(), + left_val->ToString(), + right_val->ToString())}; } } return ExpressionPtr{Expression::map_t{left, right}}; -- cgit v1.2.3