diff options
Diffstat (limited to 'js/step0_repl.js')
| -rw-r--r-- | js/step0_repl.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/js/step0_repl.js b/js/step0_repl.js new file mode 100644 index 0000000..5fa10f2 --- /dev/null +++ b/js/step0_repl.js @@ -0,0 +1,42 @@ +if (typeof module !== 'undefined') { + var readline = require('./node_readline'); +} + +// read +function READ(str) { + return str; +} + +// eval +function EVAL(ast, env) { + return eval(ast); +} + +// print +function PRINT(exp) { + return exp; +} + +// repl +var rep = function(str) { return PRINT(EVAL(READ(str), {})); }; + +if (typeof require === 'undefined') { + // Asynchronous browser mode + readline.rlwrap(function(line) { return rep(line); }, + function(exc) { + if (exc.stack) { console.log(exc.stack); } else { console.log(exc); } + }); +} else if (require.main === module) { + // Synchronous node.js commandline mode + while (true) { + var line = readline.readline("user> "); + if (line === null) { break; } + try { + if (line) { console.log(rep(line)); } + } catch (exc) { + if (exc.stack) { console.log(exc.stack); } else { console.log(exc); } + } + } +} else { + exports.rep = rep; +} |
