Current section
Files
Jump to
Current section
Files
lib/rex.ex
defmodule Rex do
defmacro __using__(_) do
quote do
import Rex
import Rex.Stack
import Rex.Control
import Rex.Math
end
end
import Rex.Core
@doc ~S"""
Define a new Rex function.
"""
defmacro drex({{name, _, patterns}, _, exprs}) when length(patterns) > 0 do
rex_def({:def, :shuffler}, {name, patterns, exprs})
end
defmacro drex({name, _, [expr]}) do
rex_def({:def, :operator}, {name, nil, expr})
end
defmacro drex({name, _, args}, expr = [do: _]) do
rex_def({:def, :operator}, {name, args, expr})
end
@doc """
Compile a Rex expression into an Elixir function.
"""
defmacro rex(expr) do
rex_fn(expr)
end
@doc ~S"""
Pipe an exising stack to a new Rex expression.
"""
defmacro rex(stack, expr) do
quote do
unquote(stack) |> unquote(rex_fn(expr)).()
end
end
end