diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-16T15·55+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-16T15·55+0000 |
commit | d7efd7639420f4c840cbfdfcbbb3c45292f3ac54 (patch) | |
tree | d48871893e6d3446b6298b0e5e612086233e3947 /src/libexpr/expr-to-xml.cc | |
parent | 4c9aa821b985b8e334790a03497a56af3a021f3b (diff) |
* 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'.)
Diffstat (limited to 'src/libexpr/expr-to-xml.cc')
-rw-r--r-- | src/libexpr/expr-to-xml.cc | 22 |
1 files changed, 8 insertions, 14 deletions
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"); |