From 02d8771c4ee9de88fd806e0d85cb50f88abd96b4 Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Fri, 13 Feb 2015 20:18:00 +0100 Subject: improved error messsages in Type::read --- src/core/model/Typesystem.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/core/model/Typesystem.cpp b/src/core/model/Typesystem.cpp index dad2ec3..b34687e 100644 --- a/src/core/model/Typesystem.cpp +++ b/src/core/model/Typesystem.cpp @@ -98,16 +98,27 @@ std::pair Type::read(const std::string &str, Logger &logger, // try all variant types of this type and use the first successful one. Variant v; bool success = false; - for (auto t : getVariantTypes()) { - auto res = VariantReader::parseTyped(t, str, logger, sourceId, offs); + std::vector forks; + auto vts = getVariantTypes(); + for (auto vt : vts) { + forks.emplace_back(logger.fork()); + auto res = + VariantReader::parseTyped(vt, str, forks.back(), sourceId, offs); if (res.first) { v = res.second; success = true; + forks.back().commit(); break; } } if (!success) { + logger.error("Could not read data with any of the possible types:"); + for (size_t t = 0; t < forks.size(); t++) { + logger.note(std::string(Variant::getTypeName(vts[t])) + ":", + SourceLocation{}, MessageMode::NO_CONTEXT); + forks[t].commit(); + } return std::make_pair(false, Variant{}); } if (!build(v, logger)) { -- cgit v1.2.3