Current section

Files

Jump to
zig_parser lib zig.parser statement.ex
Raw

lib/zig.parser/statement.ex

defmodule Zig.Parser.Statement do
alias Zig.Parser.Block
def post_traverse(rest, [{:Statement, args} | rest_args], context, _, _) do
{rest, [parse(args) | rest_args], context}
end
defp parse([:comptime | rest_args]) do
%{parse(rest_args) | comptime: true}
end
defp parse([:nosuspend | rest_args]) do
case parse(rest_args) do
%Block{} = block ->
%{block | nosuspend: true}
other ->
{:nosuspend, other}
end
end
defp parse([:suspend | rest_args]) do
case parse(rest_args) do
%Block{} = block ->
%{block | suspend: true}
other ->
{:suspend, other}
end
end
defp parse([:defer | rest_args]) do
{:defer, parse(rest_args)}
end
defp parse([:errdefer, :|, capture, :| | rest_args]) do
{:errdefer, capture, parse(rest_args)}
end
defp parse([:errdefer | rest_args]) do
{:errdefer, parse(rest_args)}
end
defp parse([statement, :SEMICOLON]), do: statement
defp parse([content]), do: content
end