Current section
Files
Jump to
Current section
Files
lib/compiler/preprocess.ex
defmodule ProtoDef.Compiler.Preprocess do
def from_type_def([type_id, args]), do: from_type_def({type_id, args})
def from_type_def({type_id, args}), do: {type_id, args}
def from_type_def(type_id), do: {type_id, nil}
def process_type(nil, _ctx) do
raise ProtoDef.CompileError, message: "Undefined type"
end
def process_type(type, ctx) do
{type_id, args} = from_type_def(type)
type_mod = ProtoDef.Compiler.Context.native_type(ctx, type_id)
if type_mod do
apply(type_mod, :preprocess, [args, ctx])
else
ProtoDef.Type.TypeRef.preprocess_typeref(type_id, args, ctx)
end
end
def process_field_ref(field_ref, ctx, sibling_only \\ false) do
{num, str} = count_field_ref_dirup(field_ref)
if sibling_only, do: 0 = num
{num, ctx.parse_name.(str)}
end
def count_field_ref_dirup(str), do: count_field_ref_dirup(str, 0)
defp count_field_ref_dirup("../" <> str, num), do: count_field_ref_dirup(str, num+1)
defp count_field_ref_dirup(str, num), do: {num, str}
def process_count(cont, ctx) do
ProtoDef.Compiler.Count.preprocess(cont, ctx)
end
def process_get_arg(map, ctx, name) do
map[name]
end
end