diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-08-24T14·16+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-08-24T14·16+0000 |
commit | f793caf93674350f8c1e6fa740ab6cce649d0db8 (patch) | |
tree | d33681a2ce1f90be029e9ff2df3b2f7a76977f9a /src/nix-instantiate/main.cc | |
parent | da25d80152fb6e51fe695dcd2ebaa4e00a7ee646 (diff) |
* Refactoring.
Diffstat (limited to 'src/nix-instantiate/main.cc')
-rw-r--r-- | src/nix-instantiate/main.cc | 90 |
1 files changed, 4 insertions, 86 deletions
diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index 6a0586a2d86d..eb5c1ce8552d 100644 --- a/src/nix-instantiate/main.cc +++ b/src/nix-instantiate/main.cc @@ -7,10 +7,9 @@ #include "shared.hh" #include "eval.hh" #include "parser.hh" -#include "nixexpr-ast.hh" #include "get-drvs.hh" #include "attr-path.hh" -#include "xml-writer.hh" +#include "expr-to-xml.hh" #include "help.txt.hh" @@ -34,94 +33,13 @@ static int rootNr = 0; static bool indirectRoot = false; -static XMLAttrs singletonAttrs(const string & name, const string & value) -{ - XMLAttrs attrs; - attrs[name] = value; - return attrs; -} - - -static void printTermAsXML(Expr e, XMLWriter & doc) -{ - XMLAttrs attrs; - ATerm s; - int i; - ATermList as, es, formals; - ATerm body, pos; - - if (matchStr(e, s)) - doc.writeEmptyElement("string", singletonAttrs("value", aterm2String(s))); - - else if (matchPath(e, s)) - doc.writeEmptyElement("path", singletonAttrs("value", aterm2String(s))); - - else if (matchUri(e, s)) - doc.writeEmptyElement("uri", singletonAttrs("value", aterm2String(s))); - - else if (matchNull(e)) - doc.writeEmptyElement("null"); - - else if (matchInt(e, i)) - doc.writeEmptyElement("int", singletonAttrs("value", (format("%1%") % i).str())); - - else if (e == eTrue) - doc.writeEmptyElement("bool", singletonAttrs("value", "true")); - - else if (e == eFalse) - doc.writeEmptyElement("bool", singletonAttrs("value", "false")); - - else if (matchAttrs(e, as)) { - XMLOpenElement _(doc, "attrs"); - ATermMap attrs(128); - queryAllAttrs(e, attrs); - StringSet names; - for (ATermMap::const_iterator i = attrs.begin(); i != attrs.end(); ++i) - 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); - } - } - - else if (matchList(e, es)) { - XMLOpenElement _(doc, "list"); - for (ATermIterator i(es); i; ++i) - printTermAsXML(*i, doc); - } - - else if (matchFunction(e, formals, body, pos)) { - XMLOpenElement _(doc, "function"); - - for (ATermIterator i(formals); i; ++i) { - Expr name; ValidValues valids; ATerm dummy; - if (!matchFormal(*i, name, valids, dummy)) abort(); - XMLOpenElement _(doc, "arg", singletonAttrs("name", aterm2String(name))); - - ATermList valids2; - if (matchValidValues(valids, valids2)) { - for (ATermIterator j(valids2); j; ++j) { - XMLOpenElement _(doc, "value"); - printTermAsXML(*j, doc); - } - } - } - } - - else - doc.writeEmptyElement("unevaluated"); -} - - static void printResult(EvalState & state, Expr e, bool evalOnly, bool xmlOutput, const ATermMap & autoArgs) { if (evalOnly) - if (xmlOutput) { - XMLWriter doc(true, cout); - XMLOpenElement root(doc, "expr"); - printTermAsXML(e, doc); - } else + if (xmlOutput) + printTermAsXML(e, cout); + else cout << format("%1%\n") % e; else { |