diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-09-02T13·18+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-09-02T13·18+0200 |
commit | e90569905ecdfe3225314f0e5f122263aa68efb2 (patch) | |
tree | 5c00fa4ae75870f8bab1b1815dfc7ee335ef6212 /nix-repl.cc |
Initial version of nix-repl
This program interactively reads a Nix expression from the user, evaluates it, and prints the result.
Diffstat (limited to 'nix-repl.cc')
-rw-r--r-- | nix-repl.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/nix-repl.cc b/nix-repl.cc new file mode 100644 index 000000000000..ea248b5ca15f --- /dev/null +++ b/nix-repl.cc @@ -0,0 +1,57 @@ +#include <iostream> +#include <cstdlib> + +#include <readline/readline.h> +#include <readline/history.h> + +#include "shared.hh" +#include "eval.hh" + +using namespace std; +using namespace nix; + + +string programId = "nix-repl"; + + +void printHelp() +{ + std::cout << "Usage: nix-repl\n"; +} + + +bool getLine(string & line) +{ + char * s = readline ("nix-repl> "); + if (!s) return false; + line = chomp(string(s)); + free(s); + if (line != "") add_history(line.c_str()); + return true; +} + + +void run(nix::Strings args) +{ + EvalState state; + Path curDir = absPath("."); + + while (true) { + string line; + if (!getLine(line)) break; + + try { + Expr * e = state.parseExprFromString(line, curDir); + Value v; + state.eval(e, v); + state.strictForceValue(v); + std::cout << v << std::endl; + } catch (Error & e) { + printMsg(lvlError, e.msg()); + } + + std::cout << std::endl; + } + + std::cout << std::endl; +} |