Current section

Files

Jump to
zig_parser lib zig.parser decl.ex
Raw

lib/zig.parser/decl.ex

defmodule Zig.Parser.Decl do
alias Zig.Parser.Block
alias Zig.Parser.Const
alias Zig.Parser.Function
alias Zig.Parser.Var
def post_traverse(rest, [{:Decl, args} | rest_args], context, _loc, _row) do
{rest, [parse(args) | rest_args], context}
end
# decorators
defp parse([:export | rest]) do
%{parse(rest) | export: true}
end
defp parse([:extern, {:string, extern} | rest]) when is_binary(extern) do
%{parse(rest) | extern: extern}
end
defp parse([:extern | rest]) do
%{parse(rest) | extern: true}
end
defp parse([:inline | rest]), do: %{parse(rest) | inline: true}
defp parse([:noinline | rest]), do: %{parse(rest) | inline: false}
defp parse([:threadlocal | rest]), do: %{parse(rest) | threadlocal: true}
defp parse([:usingnamespace, payload, :SEMICOLON]), do: {:usingnamespace, payload}
defp parse([%Function{} = function, :SEMICOLON]), do: function
defp parse([%Function{} = function, %Block{} = block]), do: %{function | block: block}
defp parse([%Var{} = var]), do: var
defp parse([%Const{} = const]), do: const
end