From d7efd7639420f4c840cbfdfcbbb3c45292f3ac54 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 16 Oct 2006 15:55:34 +0000 Subject: * Big cleanup of the semantics of paths, strings, contexts, string concatenation and string coercion. This was a big mess (see e.g. NIX-67). Contexts are now folded into strings, so that they don't cause evaluation errors when they're not expected. The semantics of paths has been clarified (see nixexpr-ast.def). toString() and coerceToString() have been merged. Semantic change: paths are now copied to the store when they're in a concatenation (and in most other situations - that's the formalisation of the meaning of a path). So "foo " + ./bla evaluates to "foo /nix/store/hash...-bla", not "foo /path/to/current-dir/bla". This prevents accidental impurities, and is more consistent with the treatment of derivation outputs, e.g., `"foo " + bla' where `bla' is a derivation. (Here `bla' would be replaced by the output path of `bla'.) --- src/libexpr/expr-to-xml.cc | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'src/libexpr/expr-to-xml.cc') diff --git a/src/libexpr/expr-to-xml.cc b/src/libexpr/expr-to-xml.cc index 195cbd7b852a..f5b0e747705c 100644 --- a/src/libexpr/expr-to-xml.cc +++ b/src/libexpr/expr-to-xml.cc @@ -15,26 +15,20 @@ static XMLAttrs singletonAttrs(const string & name, const string & value) } -static void printTermAsXML(Expr e, XMLWriter & doc, ATermList & context) +static void printTermAsXML(Expr e, XMLWriter & doc, PathSet & context) { XMLAttrs attrs; - ATerm s; + string s; + ATerm s2; int i; - Expr e2; ATermList as, es, formals; ATerm body, pos; - while (matchContext(e, es, e2)) { - e = e2; - for (ATermIterator i(es); i; ++i) - context = ATinsert(context, *i); - } - - if (matchStr(e, s)) - doc.writeEmptyElement("string", singletonAttrs("value", aterm2String(s))); + if (matchStr(e, s, context)) /* !!! show the context? */ + doc.writeEmptyElement("string", singletonAttrs("value", s)); - else if (matchPath(e, s)) - doc.writeEmptyElement("path", singletonAttrs("value", aterm2String(s))); + else if (matchPath(e, s2)) + doc.writeEmptyElement("path", singletonAttrs("value", aterm2String(s2))); else if (matchNull(e)) doc.writeEmptyElement("null"); @@ -90,7 +84,7 @@ static void printTermAsXML(Expr e, XMLWriter & doc, ATermList & context) } -void printTermAsXML(Expr e, std::ostream & out, ATermList & context) +void printTermAsXML(Expr e, std::ostream & out, PathSet & context) { XMLWriter doc(true, out); XMLOpenElement root(doc, "expr"); -- cgit 1.4.1