From bede62e2f7b65b0dd047eeabbbb548dca820fc70 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Wed, 7 Aug 2013 21:04:41 -0700 Subject: [PATCH] Fix bug in sexpr operator <<. Signed-off-by: Leonardo de Moura --- src/tests/util/sexpr/sexpr.cpp | 8 ++++++++ src/util/sexpr/sexpr.cpp | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/tests/util/sexpr/sexpr.cpp b/src/tests/util/sexpr/sexpr.cpp index dbcaad9d13..ee5a2f521a 100644 --- a/src/tests/util/sexpr/sexpr.cpp +++ b/src/tests/util/sexpr/sexpr.cpp @@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE. Author: Leonardo de Moura */ +#include #include "sexpr.h" #include "sexpr_funcs.h" #include "mpq.h" @@ -154,6 +155,12 @@ static void tst5() { == 987654321); } +static void tst6() { + std::ostringstream s; + sexpr foo("str with \"quote\""); + s << foo; + lean_assert(s.str() == "\"str with \\\"quote\\\"\""); +} int main() { continue_on_violation(true); @@ -162,5 +169,6 @@ int main() { tst3(); tst4(); tst5(); + tst6(); return has_violations() ? 1 : 0; } diff --git a/src/util/sexpr/sexpr.cpp b/src/util/sexpr/sexpr.cpp index 06a0e82adf..75f1128ebb 100644 --- a/src/util/sexpr/sexpr.cpp +++ b/src/util/sexpr/sexpr.cpp @@ -11,6 +11,7 @@ Author: Leonardo de Moura #include "name.h" #include "mpz.h" #include "mpq.h" +#include "escaped.h" namespace lean { /** \brief Base class used to represent S-expression cells. */ @@ -213,7 +214,7 @@ int cmp(sexpr const & a, sexpr const & b) { std::ostream & operator<<(std::ostream & out, sexpr const & s) { switch (s.kind()) { case sexpr_kind::NIL: out << "nil"; break; - case sexpr_kind::STRING: out << "\"" << to_string(s) << "\""; break; + case sexpr_kind::STRING: out << "\"" << escaped(to_string(s).c_str()) << "\""; break; case sexpr_kind::INT: out << to_int(s); break; case sexpr_kind::DOUBLE: out << to_double(s); break; case sexpr_kind::NAME: out << to_name(s); break;