forked from lix-project/lix
* Allow the top-level expression to be a list of expressions that
normalise to Nix expression.
This commit is contained in:
parent
d6b6b2d3a8
commit
17f05dba77
24
src/fix.cc
24
src/fix.cc
|
@ -130,6 +130,7 @@ static Expr evalExpr2(EvalState & state, Expr e)
|
||||||
|
|
||||||
/* Normal forms. */
|
/* Normal forms. */
|
||||||
if (ATmatch(e, "<str>", &s1) ||
|
if (ATmatch(e, "<str>", &s1) ||
|
||||||
|
ATmatch(e, "[<list>]", &e1) ||
|
||||||
ATmatch(e, "Function([<list>], <term>)", &e1, &e2) ||
|
ATmatch(e, "Function([<list>], <term>)", &e1, &e2) ||
|
||||||
ATmatch(e, "FSId(<str>)", &s1))
|
ATmatch(e, "FSId(<str>)", &s1))
|
||||||
return e;
|
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)
|
void run(Strings args)
|
||||||
{
|
{
|
||||||
openDB();
|
openDB();
|
||||||
|
@ -333,11 +351,7 @@ void run(Strings args)
|
||||||
it != files.end(); it++)
|
it != files.end(); it++)
|
||||||
{
|
{
|
||||||
Expr e = evalFile(state, *it);
|
Expr e = evalFile(state, *it);
|
||||||
char * s;
|
printFSId(state, e);
|
||||||
if (ATmatch(e, "FSId(<str>)", &s)) {
|
|
||||||
cout << format("%1%\n") % s;
|
|
||||||
}
|
|
||||||
else throw badTerm("top level is not a package", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue