diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-10-26T16·59+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-10-26T16·59+0000 |
commit | ee401afad81dc7759c66829372826f98268ae606 (patch) | |
tree | 427342ad19e6a33994a12c756b1bab8f4da6c775 /src/nix-instantiate | |
parent | 37d7abd69402f0e7a78d4d2f2d78996409a8563a (diff) |
* Mode `--parse-only' to parse the input (on stdin, `-'), and print
out the AST as an ATerm. * Mode `--eval-only' to parse and evaluate the input, and print the resulting normal form as an ATerm. Neither of these modes require store/DB write permission.
Diffstat (limited to 'src/nix-instantiate')
-rw-r--r-- | src/nix-instantiate/main.cc | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/nix-instantiate/main.cc b/src/nix-instantiate/main.cc index 0a533d4c7751..e396be5ff2dc 100644 --- a/src/nix-instantiate/main.cc +++ b/src/nix-instantiate/main.cc @@ -15,17 +15,17 @@ void printHelp() } -static Expr evalStdin(EvalState & state) +static Expr evalStdin(EvalState & state, bool parseOnly) { startNest(nest, lvlTalkative, format("evaluating standard input")); string s, s2; while (getline(cin, s2)) s += s2 + "\n"; Expr e = parseExprFromString(state, s, absPath(".")); - return evalExpr(state, e); + return parseOnly ? e : evalExpr(state, e); } -static void printNixExpr(EvalState & state, Expr e) +static void printDrvPaths(EvalState & state, Expr e) { ATMatcher m; ATermList es; @@ -45,14 +45,14 @@ static void printNixExpr(EvalState & state, Expr e) ATermMap drvMap; queryAllAttrs(e, drvMap); for (ATermIterator i(drvMap.keys()); i; ++i) - printNixExpr(state, evalExpr(state, drvMap.get(*i))); + printDrvPaths(state, evalExpr(state, drvMap.get(*i))); return; } } if (atMatch(m, e) >> "List" >> es) { for (ATermIterator i(es); i; ++i) - printNixExpr(state, evalExpr(state, *i)); + printDrvPaths(state, evalExpr(state, *i)); return; } @@ -60,11 +60,22 @@ static void printNixExpr(EvalState & state, Expr e) } +static void printResult(EvalState & state, Expr e, bool evalOnly) +{ + if (evalOnly) + cout << format("%1%\n") % e; + else + printDrvPaths(state, e); +} + + void run(Strings args) { EvalState state; Strings files; bool readStdin = false; + bool evalOnly = false; + bool parseOnly = false; for (Strings::iterator it = args.begin(); it != args.end(); ) @@ -73,6 +84,14 @@ void run(Strings args) if (arg == "-") readStdin = true; + else if (arg == "--eval-only") { + readOnlyMode = true; + evalOnly = true; + } + else if (arg == "--parse-only") { + readOnlyMode = true; + parseOnly = evalOnly = true; + } else if (arg[0] == '-') throw UsageError(format("unknown flag `%1%`") % arg); else @@ -82,15 +101,16 @@ void run(Strings args) openDB(); if (readStdin) { - Expr e = evalStdin(state); - printNixExpr(state, e); + Expr e = evalStdin(state, parseOnly); + printResult(state, e, evalOnly); } for (Strings::iterator it = files.begin(); it != files.end(); it++) { Expr e = evalFile(state, absPath(*it)); - printNixExpr(state, e); + /* !!! parseOnly ignored */ + printResult(state, e, evalOnly); } printEvalStats(state); |