pelemay v0.0.1 SumMag
SumMag: a meta-programming library for Hastega and Cockatorice.
Link to this section Summary
Functions
## Examples
## Examples
## Examples
## Examples
## Examples
## Examples
## Examples
"defmacro do" take the following code.
## Examples
## Examples
iex> quote do end |> SumMag.parse(%{target: :hastega})
[]
iex> (quote do: def func(a), do: a) |> SumMag.parse(%{target: :hastega})
[[function_name: :func, is_public: true, args: [:a], do: [{:a, [], SumMagTest}], is_nif: false ]]
iex> (quote do
...> def func(list) do
...> list
...> |> Enum.map(& &1)
...> end
...> end) |> SumMag.parse(%{target: :hastega})
[[function_name: :func, is_public: true, args: [:list], do: [{:|>, [context: SumMagTest, import: Kernel], [{:list, [], SumMagTest}, {{:., [], [{:__aliases__, [alias: false], [:Enum]}, :map]}, [], [{:&, [], [{:&, [], [1]}]}]}]}], is_nif: false ]]
## Examples
## Examples
## Examples
Link to this section Functions
concat_name_nif(name, env)
## Examples
iex> :func |> SumMag.concat_name_nif(%{}) :func_nif
concat_name_num(name, map)
## Examples
iex> :func |> SumMag.concat_name_num(%{num: 1}) :func_1
iex> :fl |> SumMag.concat_name_num(%{num: 2}) :fl_2
concat_name_stub(name, env)
## Examples
iex> :hastega |> SumMag.concat_name_stub(%{}) :hastegastub
convert_args(arg_list, env)
## Examples
iex> [] |> SumMag.convert_args(%{}) []
iex> [{:a, [], Elixir}] |> SumMag.convert_args(%{}) [:a]
iex> [{:a, [], Elixir}, {:b, [], Elixir}] |> SumMag.convert_args(%{}) [:a, :b]
delete_meta(ast)
divide_meta(ast)
func_with_num(kl, env)
## Examples
iex> SumMag.func_with_num([function_name: :func], %{num: 1}) [function_name: :func_1]
get_func_info(map)
## Examples
iex> SumMag.get_func_info(%{nif: [function_name: :func]}) [function_name: :func]
increment_nif(map)
## Examples
iex> SumMag.increment_nif(%{num: 0}) 1
iex> SumMag.increment_nif(%{num: 1}) 2
map(definitions, optimizer)
melt_block(other)
"defmacro do" take the following code.
If you define a function:
[
do: {def, _line, [
{ :name, _line, arg },
[
do: main_process
]}
]
If you define functions:
[
do: {:__block__, [], [
{def, _line, [{ :name, _line, arg },do: main_process
]}
]
iex> quote do
...> def func do: "doctest"
...> end
{:def, [context: SumMagTest, import: Kernel],
[{:func, [context: SumMagTest], [[do: "doctest"]]}]}
iiex> quote do
...> defmmf do
...> def func do: "doctest"
...> end
...> end
merge_func_info(env, keyword)
## Examples
iex> SumMag.merge_func_info(%{nif: [function_name: :func]}, [is_public: true]) %{nif: [function_name: :func, is_public: true]}
parse(arg, env)
## Examples
iex> quote do end |> SumMag.parse(%{target: :hastega})
[]
iex> (quote do: def func(a), do: a) |> SumMag.parse(%{target: :hastega})
[[function_name: :func, is_public: true, args: [:a], do: [{:a, [], SumMagTest}], is_nif: false ]]
iex> (quote do
...> def func(list) do
...> list
...> |> Enum.map(& &1)
...> end
...> end) |> SumMag.parse(%{target: :hastega})
[[function_name: :func, is_public: true, args: [:list], do: [{:|>, [context: SumMagTest, import: Kernel], [{:list, [], SumMagTest}, {{:., [], [{:__aliases__, [alias: false], [:Enum]}, :map]}, [], [{:&, [], [{:&, [], [1]}]}]}]}], is_nif: false ]]
parse_args(body, env)
## Examples
iex> [{:null, [context: Elixir], []}, [do: {:nil, [], Elixir}]] |> SumMag.parse_args(%{}) []
iex> [{:func, [context: Elixir], [{:a, [], Elixir}]}, [do: {:a, [], Elixir}]] |> SumMag.parse_args(%{}) [:a]
iex> [{:add, [context: Elixir], [{:a, [], Elixir}, {:b, [], Elixir}]},[do: {:+, [context: Elixir, import: Kernel], [{:a, [], Elixir}, {:b, [], Elixir}]}]] |> SumMag.parse_args(%{}) [:a, :b]
parse_do(body, env)
## Examples
iex> [{:null, [context: Elixir], []}, [do: {:nil, [], Elixir}]] |> SumMag.parse_do(%{}) [{:nil, [], Elixir}]
iex> [{:func, [context: Elixir], [{:a, [], Elixir}]}, [do: {:a, [], Elixir}]] |> SumMag.parse_do(%{}) [{:a, [], Elixir}]
iex> [{:add, [context: Elixir], [{:a, [], Elixir}, {:b, [], Elixir}]},[do: {:+, [context: Elixir, import: Kernel], [{:a, [], Elixir}, {:b, [], Elixir}]}]] |> SumMag.parse_do(%{}) [{:+, [context: Elixir, import: Kernel], [{:a, [], Elixir}, {:b, [], Elixir}]}]
parse_function_name(body, env)
## Examples
iex> [{:null, [context: Elixir], []}, [do: {:nil, [], Elixir}]] |> SumMag.parse_function_name(%{}) :null
iex> [{:func, [context: Elixir], [{:a, [], Elixir}]}, [do: {:a, [], Elixir}]] |> SumMag.parse_function_name(%{}) :func
iex> [{:add, [context: Elixir], [{:a, [], Elixir}, {:b, [], Elixir}]},[do: {:+, [context: Elixir, import: Kernel], [{:a, [], Elixir}, {:b, [], Elixir}]}]] |> SumMag.parse_function_name(%{}) :add