From 17f05dba775bb95858d9ac60ab9a9abcbe88b2fc Mon Sep 17 00:00:00 2001
From: Eelco Dolstra <e.dolstra@tudelft.nl>
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 4235165cc..57cb12630 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, "<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);
     }
 }
 
-- 
GitLab