From 8e765b8876ff67879a6bd1a067bad526b14a4045 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 9 Sep 2013 11:34:54 +0200 Subject: [PATCH] printValue: Show assertion errors inline --- nix-repl.cc | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/nix-repl.cc b/nix-repl.cc index a6e5f78ec..f7eb6ab5c 100644 --- a/nix-repl.cc +++ b/nix-repl.cc @@ -390,13 +390,20 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m } } - foreach (Sorted::iterator, i, sorted) + foreach (Sorted::iterator, i, sorted) { + str << i->first << " = "; if (hidden.find(i->first) != hidden.end()) - str << i->first << " = «...»; "; + str << "«...»"; else if (seen.find(i->second) != seen.end()) - str << i->first << " = «repeated»; "; + str << "«repeated»"; else - printValue(str << i->first << " = ", *i->second, maxDepth - 1, seen) << "; "; + try { + printValue(str, *i->second, maxDepth - 1, seen); + } catch (AssertionError & e) { + str << "«error: " << e.msg() << "»"; + } + str << "; "; + } } else str << "... "; @@ -413,9 +420,14 @@ std::ostream & NixRepl::printValue(std::ostream & str, Value & v, unsigned int m if (maxDepth > 0) for (unsigned int n = 0; n < v.list.length; ++n) { if (seen.find(v.list.elems[n]) != seen.end()) - str << "«repeated» "; + str << "«repeated»"; else - printValue(str, *v.list.elems[n], maxDepth - 1, seen) << " "; + try { + printValue(str, *v.list.elems[n], maxDepth - 1, seen); + } catch (AssertionError & e) { + str << "«error: " << e.msg() << "»"; + } + str << " "; } else str << "... ";