Current section
Files
Jump to
Current section
Files
lib/zig.parser/block.ex
defmodule Zig.Parser.BlockOptions do
defstruct [:doc_comment, :label]
end
defmodule Zig.Parser.Block do
alias Zig.Parser.BlockOptions
def post_traverse(rest, [{__MODULE__, block_parts} | rest_args], context, _, _) do
{rest, [parse(block_parts) | rest_args], context}
end
defp parse([:LBRACE | rest]), do: parse(rest, [])
defp parse([:RBRACE], so_far), do: {:block, %BlockOptions{}, Enum.reverse(so_far)}
defp parse([statement | rest], so_far), do: parse(rest, [statement | so_far])
end
defmodule Zig.Parser.BlockExpr do
alias Zig.Parser
def post_traverse(rest, [{__MODULE__, block_args} | rest_args], context, _, _) do
{rest, [parse(block_args) | rest_args], context}
end
defp parse([tag, :COLON, block]) do
Parser.put_opt(block, :label, tag)
end
defp parse([block]), do: block
end