diff --git a/server/repl.js b/server/repl.js index bde43f0..1d14ee5 100755 --- a/server/repl.js +++ b/server/repl.js @@ -6,13 +6,32 @@ import vm from "./vm.js"; const rl = readline.createInterface({ input: process.stdin, output: process.stdout, - prompt: 'OHAI> ' + prompt: 'λ ' }); rl.prompt(); +var last; + rl.on('line', (line) => { - console.log(vm.evaluateString(line)); + try { + if (line.trim().length == 0) { + rl.prompt(); + } + else { + last = vm.evaluateString(line); + if (last == undefined) { + rl.prompt(); + } + else { + console.log(last); + vm.env.bindings["it"] = last; + } + } + } + catch (e) { + console.log(e.errormessage); + } rl.prompt(); }).on('close', () => { console.log('Bye'); diff --git a/server/vm.js b/server/vm.js index f654cf8..f60629d 100755 --- a/server/vm.js +++ b/server/vm.js @@ -90,6 +90,9 @@ function evaluate(ast, environment) { else if (ast.exprType === "Name") { return lookup(ast.ident, environment); } + else if (ast.exprType === "Bool") { + return ast.val; + } else if (ast.exprType === "If") { if (evaluate(ast.condition, environment)) { return evaluate(ast.thenexp, environment); @@ -117,5 +120,6 @@ function evaluate(ast, environment) { } export default { - evaluateString : evaluateString + evaluateString : evaluateString, + env : testenv };