You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

63 lines
1.1 KiB

defmodule Alchemist.API.Eval do
@moduledoc false
def request(args) do
args
|> normalize
|> process
IO.puts "END-OF-EVAL"
end
def process({:eval, file}) do
try do
File.read!("#{file}")
|> Code.eval_string
|> Tuple.to_list
|> List.first
|> IO.inspect
rescue
e -> IO.inspect e
end
end
def process({:quote, file}) do
try do
File.read!("#{file}")
|> Code.string_to_quoted
|> Tuple.to_list
|> List.last
|> IO.inspect
rescue
e -> IO.inspect e
end
end
def process({:expand, file}) do
try do
{_, expr} = File.read!("#{file}")
|> Code.string_to_quoted
res = Macro.expand(expr, __ENV__)
IO.puts Macro.to_string(res)
rescue
e -> IO.inspect e
end
end
def process({:expand_once, file}) do
try do
{_, expr} = File.read!("#{file}")
|> Code.string_to_quoted
res = Macro.expand_once(expr, __ENV__)
IO.puts Macro.to_string(res)
rescue
e -> IO.inspect e
end
end
def normalize(request) do
{expr , _} = Code.eval_string(request)
expr
end
end