1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-21 02:27:10 +03:00

Update Elixir syntax & version to work with v1.5.x

This commit is contained in:
Michael Pope 2017-09-12 11:34:43 -07:00
parent ef7fc8cad5
commit e68e138f27
13 changed files with 29 additions and 29 deletions

View File

@ -75,7 +75,7 @@ defmodule Mal.Core do
def readline(prompt) do def readline(prompt) do
IO.write(:stdio, prompt) IO.write(:stdio, prompt)
IO.read(:stdio, :line) IO.read(:stdio, :line)
|> String.strip(?\n) |> String.trim("\n")
end end
defp convert_vector({type, ast, meta}) when type == :map do defp convert_vector({type, ast, meta}) when type == :map do
@ -223,9 +223,9 @@ defmodule Mal.Core do
end end
defp seq([nil]), do: nil defp seq([nil]), do: nil
defp seq([{:list, [], meta}]), do: nil defp seq([{:list, [], _meta}]), do: nil
defp seq([{:list, ast, meta}]), do: {:list, ast, meta} defp seq([{:list, ast, meta}]), do: {:list, ast, meta}
defp seq([{:vector, [], meta}]), do: nil defp seq([{:vector, [], _meta}]), do: nil
defp seq([{:vector, ast, meta}]), do: {:list, ast, meta} defp seq([{:vector, ast, meta}]), do: {:list, ast, meta}
defp seq([""]), do: nil defp seq([""]), do: nil
defp seq([s]), do: {:list, String.split(s, "", trim: true), nil} defp seq([s]), do: {:list, String.split(s, "", trim: true), nil}

View File

@ -1,12 +1,12 @@
defmodule Mix.Tasks.Step0Repl do defmodule Mix.Tasks.Step0Repl do
def run(_), do: loop def run(_), do: loop()
defp loop do defp loop do
Mal.Core.readline("user> ") Mal.Core.readline("user> ")
|> read_eval_print |> read_eval_print
|> IO.puts |> IO.puts
loop loop()
end end
defp read(input) do defp read(input) do

View File

@ -1,12 +1,12 @@
defmodule Mix.Tasks.Step1ReadPrint do defmodule Mix.Tasks.Step1ReadPrint do
def run(_), do: loop def run(_), do: loop()
defp loop do defp loop do
Mal.Core.readline("user> ") Mal.Core.readline("user> ")
|> read_eval_print |> read_eval_print
|> IO.puts |> IO.puts
loop loop()
end end
defp read(input) do defp read(input) do

View File

@ -6,7 +6,7 @@ defmodule Mix.Tasks.Step2Eval do
"/" => &div/2 "/" => &div/2
} }
def run(_), do: loop def run(_), do: loop()
defp loop do defp loop do
IO.write(:stdio, "user> ") IO.write(:stdio, "user> ")
@ -14,7 +14,7 @@ defmodule Mix.Tasks.Step2Eval do
|> read_eval_print |> read_eval_print
|> IO.puts |> IO.puts
loop loop()
end end
defp eval_ast({:list, ast, meta}, env) when is_list(ast) do defp eval_ast({:list, ast, meta}, env) when is_list(ast) do
@ -46,7 +46,7 @@ defmodule Mix.Tasks.Step2Eval do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta) defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta)
defp eval(ast, env), do: eval_ast(ast, env) defp eval(ast, env), do: eval_ast(ast, env)

View File

@ -50,7 +50,7 @@ defmodule Mix.Tasks.Step3Env do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -58,7 +58,7 @@ defmodule Mix.Tasks.Step3Env do
end end
defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"}) defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"})
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta) defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta)
defp eval(ast, env), do: eval_ast(ast, env) defp eval(ast, env), do: eval_ast(ast, env)

View File

@ -59,7 +59,7 @@ defmodule Mix.Tasks.Step4IfFnDo do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -67,7 +67,7 @@ defmodule Mix.Tasks.Step4IfFnDo do
end end
defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"}) defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"})
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta) defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta)
defp eval(ast, env), do: eval_ast(ast, env) defp eval(ast, env), do: eval_ast(ast, env)

View File

@ -59,7 +59,7 @@ defmodule Mix.Tasks.Step5Tco do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -67,7 +67,7 @@ defmodule Mix.Tasks.Step5Tco do
end end
defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"}) defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"})
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta) defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta)
defp eval(ast, env), do: eval_ast(ast, env) defp eval(ast, env), do: eval_ast(ast, env)

View File

@ -82,7 +82,7 @@ defmodule Mix.Tasks.Step6File do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -90,7 +90,7 @@ defmodule Mix.Tasks.Step6File do
end end
defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"}) defp eval_bindings(_bindings, _env), do: throw({:error, "Unbalanced let* bindings"})
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta) defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta)
defp eval(ast, env), do: eval_ast(ast, env) defp eval(ast, env), do: eval_ast(ast, env)

View File

@ -82,7 +82,7 @@ defmodule Mix.Tasks.Step7Quote do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -114,7 +114,7 @@ defmodule Mix.Tasks.Step7Quote do
end end
defp quasiquote(ast, _env), do: list([{:symbol, "quote"}, ast]) defp quasiquote(ast, _env), do: list([{:symbol, "quote"}, ast])
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta) defp eval({:list, ast, meta}, env), do: eval_list(ast, env, meta)
defp eval(ast, env), do: eval_ast(ast, env) defp eval(ast, env), do: eval_ast(ast, env)

View File

@ -105,7 +105,7 @@ defmodule Mix.Tasks.Step8Macros do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -159,7 +159,7 @@ defmodule Mix.Tasks.Step8Macros do
end end
end end
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, _list, _meta} = ast, env) do defp eval({:list, _list, _meta} = ast, env) do
case macroexpand(ast, env) do case macroexpand(ast, env) do
{:list, list, meta} -> eval_list(list, env, meta) {:list, list, meta} -> eval_list(list, env, meta)

View File

@ -105,7 +105,7 @@ defmodule Mix.Tasks.Step9Try do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -159,7 +159,7 @@ defmodule Mix.Tasks.Step9Try do
end end
end end
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, _list, _meta} = ast, env) do defp eval({:list, _list, _meta} = ast, env) do
case macroexpand(ast, env) do case macroexpand(ast, env) do
{:list, list, meta} -> eval_list(list, env, meta) {:list, list, meta} -> eval_list(list, env, meta)

View File

@ -124,7 +124,7 @@ defmodule Mix.Tasks.StepAMal do
Mal.Reader.read_str(input) Mal.Reader.read_str(input)
end end
defp eval_bindings([], _env), do: _env defp eval_bindings([], env), do: env
defp eval_bindings([{:symbol, key}, binding | tail], env) do defp eval_bindings([{:symbol, key}, binding | tail], env) do
evaluated = eval(binding, env) evaluated = eval(binding, env)
Mal.Env.set(env, key, evaluated) Mal.Env.set(env, key, evaluated)
@ -178,7 +178,7 @@ defmodule Mix.Tasks.StepAMal do
end end
end end
defp eval({:list, [], _} = empty_ast, env), do: empty_ast defp eval({:list, [], _} = empty_ast, _env), do: empty_ast
defp eval({:list, _list, _meta} = ast, env) do defp eval({:list, _list, _meta} = ast, env) do
case macroexpand(ast, env) do case macroexpand(ast, env) do
{:list, list, meta} -> eval_list(list, env, meta) {:list, list, meta} -> eval_list(list, env, meta)

View File

@ -4,12 +4,12 @@ defmodule Mal.Mixfile do
def project do def project do
[app: :mal, [app: :mal,
version: "0.0.1", version: "0.0.1",
elixir: "~> 1.0", elixir: "~> 1.5",
build_embedded: Mix.env == :prod, build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod, start_permanent: Mix.env == :prod,
deps: deps, deps: deps(),
default_task: "stepA_mal", default_task: "stepA_mal",
escript: escript] escript: escript()]
end end
def escript do def escript do