* Allow the top-level expression to be a list of expressions that

normalise to Nix expression.
This commit is contained in:
Eelco Dolstra 2003-08-05 11:13:38 +00:00
parent d6b6b2d3a8
commit 17f05dba77
1 changed files with 19 additions and 5 deletions

View File

@ -130,6 +130,7 @@ static Expr evalExpr2(EvalState & state, Expr e)
/* Normal forms. */
if (ATmatch(e, "<str>", &s1) ||
ATmatch(e, "[<list>]", &e1) ||
ATmatch(e, "Function([<list>], <term>)", &e1, &e2) ||
ATmatch(e, "FSId(<str>)", &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(<str>)", &s)) {
cout << format("%1%\n") % s;
}
else if (ATmatch(e, "[<list>]", &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(<str>)", &s)) {
cout << format("%1%\n") % s;
}
else throw badTerm("top level is not a package", e);
printFSId(state, e);
}
}