From 17f05dba775bb95858d9ac60ab9a9abcbe88b2fc Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 5 Aug 2003 11:13:38 +0000 Subject: [PATCH] * Allow the top-level expression to be a list of expressions that normalise to Nix expression. --- src/fix.cc | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/fix.cc b/src/fix.cc index 4235165ccd..57cb126309 100644 --- a/src/fix.cc +++ b/src/fix.cc @@ -130,6 +130,7 @@ static Expr evalExpr2(EvalState & state, Expr e) /* Normal forms. */ if (ATmatch(e, "", &s1) || + ATmatch(e, "[]", &e1) || ATmatch(e, "Function([], )", &e1, &e2) || ATmatch(e, "FSId()", &s1)) return e; @@ -299,6 +300,23 @@ static Expr evalFile(EvalState & state, string relPath) } +static void printFSId(EvalState & state, Expr e) +{ + ATermList es; + char * s; + if (ATmatch(e, "FSId()", &s)) { + cout << format("%1%\n") % s; + } + else if (ATmatch(e, "[]", &es)) { + while (!ATisEmpty(es)) { + printFSId(state, evalExpr(state, ATgetFirst(es))); + es = ATgetNext(es); + } + } + else throw badTerm("top level does not evaluate to a (list of) Nix expression(s)", e); +} + + void run(Strings args) { openDB(); @@ -333,11 +351,7 @@ void run(Strings args) it != files.end(); it++) { Expr e = evalFile(state, *it); - char * s; - if (ATmatch(e, "FSId()", &s)) { - cout << format("%1%\n") % s; - } - else throw badTerm("top level is not a package", e); + printFSId(state, e); } }