repl.lua

Faddle · faddle.git · Tickets

Branches > main > d87b34f > files / org / faddle / repl.lua

local p = require("org.faddle.lang.print")
local eval = require("org.faddle.lang.eval").eval
local create_env = require("org.faddle.lang.eval").create_env
local read = require("org.faddle.lang.read").read

local function repl()
  print("Faddle, baby")
  local env = create_env("user")
  while true do
    io.write("> ")
    io.flush()
    local s = io.read()
    local ok_read, forms = pcall(read, s)
    if not ok_read then
      print("Syntax error: " .. forms)
    else
      for _, form in ipairs(forms) do
        local ok, res = pcall(eval, form, env)
        if ok then
          print(p.print(res))
        else
          print("Error: " .. res)
        end
      end
    end
  end
end

return {repl = repl}