diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-04-04 12:44:13 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-04-04 12:56:07 +0200 |
commit | 2e7c555a4f30e92b405139a7325e47bb268a4e31 (patch) | |
tree | ba92da8defed53e02e6d9681ab8d3b43bf368ec0 /src | |
parent | 3a659173e0901b8d9b87c6457b097c28867e9d8e (diff) | |
download | justbuild-2e7c555a4f30e92b405139a7325e47bb268a4e31.tar.gz |
disjoint_map_union: show conflicting values on error
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/build_engine/expression/evaluator.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
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}}; |