guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

234/376: printValue(): Don't print <CYCLE> for repeated values


From: Ludovic Courtès
Subject: 234/376: printValue(): Don't print <CYCLE> for repeated values
Date: Wed, 28 Jan 2015 22:05:17 +0000

civodul pushed a commit to tag 1.8
in repository guix.

commit a17c23426e7b2724639cd90c23759299cdaffbb7
Author: Eelco Dolstra <address@hidden>
Date:   Wed Oct 1 15:54:40 2014 +0200

    printValue(): Don't print <CYCLE> for repeated values
---
 src/libexpr/eval.cc |   16 +++++++++-------
 1 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 43d8f13..46a4259 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -38,13 +38,13 @@ void Bindings::sort()
 }
 
 
-static void printValue(std::ostream & str, std::set<const Value *> & seen, 
const Value & v)
+static void printValue(std::ostream & str, std::set<const Value *> & active, 
const Value & v)
 {
-    if (seen.find(&v) != seen.end()) {
+    if (active.find(&v) != active.end()) {
         str << "<CYCLE>";
         return;
     }
-    seen.insert(&v);
+    active.insert(&v);
 
     switch (v.type) {
     case tInt:
@@ -77,7 +77,7 @@ static void printValue(std::ostream & str, std::set<const 
Value *> & seen, const
             sorted[i->name] = i->value;
         for (auto & i : sorted) {
             str << i.first << " = ";
-            printValue(str, seen, *i.second);
+            printValue(str, active, *i.second);
             str << "; ";
         }
         str << "}";
@@ -86,7 +86,7 @@ static void printValue(std::ostream & str, std::set<const 
Value *> & seen, const
     case tList:
         str << "[ ";
         for (unsigned int n = 0; n < v.list.length; ++n) {
-            printValue(str, seen, *v.list.elems[n]);
+            printValue(str, active, *v.list.elems[n]);
             str << " ";
         }
         str << "]";
@@ -107,13 +107,15 @@ static void printValue(std::ostream & str, std::set<const 
Value *> & seen, const
     default:
         throw Error("invalid value");
     }
+
+    active.erase(&v);
 }
 
 
 std::ostream & operator << (std::ostream & str, const Value & v)
 {
-    std::set<const Value *> seen;
-    printValue(str, seen, v);
+    std::set<const Value *> active;
+    printValue(str, active, v);
     return str;
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]