Merge pull request #273 from wasamasa/r7rs-implementation
[jackhill/mal.git] / js / step1_read_print.js
CommitLineData
31690700 1if (typeof module !== 'undefined') {
31b44161 2 var types = require('./types');
31690700 3 var readline = require('./node_readline');
31b44161
JM
4 var reader = require('./reader');
5 var printer = require('./printer');
31690700
JM
6}
7
8// read
9function READ(str) {
10 return reader.read_str(str);
11}
12
13// eval
14function EVAL(ast, env) {
15 return ast;
16}
17
18// print
19function PRINT(exp) {
ea81a808 20 return printer._pr_str(exp, true);
31690700
JM
21}
22
23// repl
24var re = function(str) { return EVAL(READ(str), {}); };
25var rep = function(str) { return PRINT(EVAL(READ(str), {})); };
26
86b689f3 27// repl loop
e4393504 28if (typeof require !== 'undefined' && require.main === module) {
31690700
JM
29 // Synchronous node.js commandline mode
30 while (true) {
31 var line = readline.readline("user> ");
32 if (line === null) { break; }
33 try {
31b44161 34 if (line) { printer.println(rep(line)); }
31690700
JM
35 } catch (exc) {
36 if (exc instanceof reader.BlankException) { continue; }
31b44161
JM
37 if (exc.stack) { printer.println(exc.stack); }
38 else { printer.println(exc); }
31690700
JM
39 }
40 }
31690700 41}