diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-03 15:38:59 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-10-03 15:38:59 +0000 |
commit | 5fd44654dbca02f188957279eb25a33a3ecfe96b (patch) | |
tree | 12b0cb0d2e3018795f810314402450b91bc6b7ae /src/libexpr/expr-to-xml.cc | |
parent | 3837fb233cccc8f65629749f07820afba04952a0 (diff) | |
download | guix-5fd44654dbca02f188957279eb25a33a3ecfe96b.tar.gz |
* toXML: propagate the context to allow derivations to be used in the
argument.
Diffstat (limited to 'src/libexpr/expr-to-xml.cc')
-rw-r--r-- | src/libexpr/expr-to-xml.cc | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/libexpr/expr-to-xml.cc b/src/libexpr/expr-to-xml.cc index b84c0058e2..085488bb5d 100644 --- a/src/libexpr/expr-to-xml.cc +++ b/src/libexpr/expr-to-xml.cc @@ -15,14 +15,21 @@ static XMLAttrs singletonAttrs(const string & name, const string & value) } -static void printTermAsXML(Expr e, XMLWriter & doc) +static void printTermAsXML(Expr e, XMLWriter & doc, ATermList & context) { XMLAttrs attrs; ATerm s; 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))); @@ -53,14 +60,14 @@ static void printTermAsXML(Expr e, XMLWriter & doc) names.insert(aterm2String(i->key)); for (StringSet::iterator i = names.begin(); i != names.end(); ++i) { XMLOpenElement _(doc, "attr", singletonAttrs("name", *i)); - printTermAsXML(attrs.get(toATerm(*i)), doc); + printTermAsXML(attrs.get(toATerm(*i)), doc, context); } } else if (matchList(e, es)) { XMLOpenElement _(doc, "list"); for (ATermIterator i(es); i; ++i) - printTermAsXML(*i, doc); + printTermAsXML(*i, doc, context); } else if (matchFunction(e, formals, body, pos)) { @@ -75,7 +82,7 @@ static void printTermAsXML(Expr e, XMLWriter & doc) if (matchValidValues(valids, valids2)) { for (ATermIterator j(valids2); j; ++j) { XMLOpenElement _(doc, "value"); - printTermAsXML(*j, doc); + printTermAsXML(*j, doc, context); } } } @@ -86,11 +93,11 @@ static void printTermAsXML(Expr e, XMLWriter & doc) } -void printTermAsXML(Expr e, std::ostream & out) +void printTermAsXML(Expr e, std::ostream & out, ATermList & context) { XMLWriter doc(true, out); XMLOpenElement root(doc, "expr"); - printTermAsXML(e, doc); + printTermAsXML(e, doc, context); } |