Current section

Files

Jump to
pantagruel lib mix tasks eval.ex
Raw

lib/mix/tasks/eval.ex

defmodule Mix.Tasks.Pantagruel.Eval do
use Mix.Task
alias Pantagruel.Eval
def eval(filename) do
{:ok, parsed, "", %{}, _, _} =
filename
|> Mix.Tasks.Pantagruel.Parse.parse()
Eval.eval(parsed, [])
end
def run([filename]) do
case eval(filename) do
{:ok, r} ->
IO.puts("Resulting environment:")
IO.inspect(r)
{:error, {:unbound_variables, e}} ->
IO.puts(e.message)
IO.inspect(e.unbound)
exit("Invalid program.")
{:error, {:domain_mismatch, e}} ->
IO.puts(e.message)
IO.inspect(e.args, label: :arguments)
IO.inspect(e.doms, label: :domains)
exit("Invalid program.")
end
end
end