aboutsummaryrefslogtreecommitdiff
path: root/lua/step1_read_print.lua
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2015-03-02 21:33:10 -0600
committerJoel Martin <github@martintribe.org>2015-03-02 21:33:10 -0600
commit835fb7d8b06e2b44792a97ac89994658bf6d00af (patch)
tree578f67726ab9e3ce5fcbc50220e9761a66c5ddf1 /lua/step1_read_print.lua
parent6b72e6078a7d505ecf9d711eb4a16fc4dfac36b6 (diff)
parent8a98ef9a3f3a6b6d05d02dc305a0c886c907e0f3 (diff)
downloadmal-835fb7d8b06e2b44792a97ac89994658bf6d00af.tar.gz
mal-835fb7d8b06e2b44792a97ac89994658bf6d00af.zip
Merge branch 'master' into gh-pages
Conflicts: .gitignore
Diffstat (limited to 'lua/step1_read_print.lua')
-rwxr-xr-xlua/step1_read_print.lua46
1 files changed, 46 insertions, 0 deletions
diff --git a/lua/step1_read_print.lua b/lua/step1_read_print.lua
new file mode 100755
index 0000000..46d71f5
--- /dev/null
+++ b/lua/step1_read_print.lua
@@ -0,0 +1,46 @@
+#!/usr/bin/env lua
+
+local readline = require('readline')
+local utils = require('utils')
+local reader = require('reader')
+local printer = require('printer')
+
+-- read
+function READ(str)
+ return reader.read_str(str)
+end
+
+-- eval
+function EVAL(ast, env)
+ return ast
+end
+
+-- print
+function PRINT(exp)
+ return printer._pr_str(exp, true)
+end
+
+-- repl
+function rep(str)
+ return PRINT(EVAL(READ(str),""))
+end
+
+if #arg > 0 and arg[1] == "--raw" then
+ readline.raw = true
+end
+
+while true do
+ line = readline.readline("user> ")
+ if not line then break end
+ xpcall(function()
+ print(rep(line))
+ end, function(exc)
+ if exc then
+ if types._malexception_Q(exc) then
+ exc = printer._pr_str(exc.val, true)
+ end
+ print("Error: " .. exc)
+ print(debug.traceback())
+ end
+ end)
+end