Current section

Files

Jump to
gleamgen src gleamgen@function.erl
Raw

src/gleamgen@function.erl

-module(gleamgen@function).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([new0/2, new1/3, new2/4, new3/5, new4/6, new5/7, new6/8, new7/9, new8/10, new9/11, to_unchecked/1, get_function_name/1, render/3, anonymous/1]).
-export_type([function_/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type function_(MUL, MUM) :: {function,
list({binary(),
gleamgen@types:generated_type(gleamgen@types:unchecked())}),
gleamgen@types:generated_type(MUM),
gleamgen@expression:expression(MUM)} |
{gleam_phantom, MUL}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 18).
-spec new0(
gleamgen@types:generated_type(MUN),
fun(() -> gleamgen@expression:expression(MUN))
) -> function_(fun((any()) -> MUN), MUN).
new0(Returns, Handler) ->
Body = Handler(),
{function, [], Returns, Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 26).
-spec new1(
{binary(), gleamgen@types:generated_type(MUT)},
gleamgen@types:generated_type(MUV),
fun((gleamgen@expression:expression(MUT)) -> gleamgen@expression:expression(MUV))
) -> function_(fun((MUT) -> MUV), MUV).
new1(Arg1, Returns, Handler) ->
Body = Handler(gleamgen@expression:unchecked_ident(erlang:element(1, Arg1))),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 38).
-spec new2(
{binary(), gleamgen@types:generated_type(MVB)},
{binary(), gleamgen@types:generated_type(MVD)},
gleamgen@types:generated_type(MVF),
fun((gleamgen@expression:expression(MVB), gleamgen@expression:expression(MVD)) -> gleamgen@expression:expression(MVF))
) -> function_(fun((MVB, MVD) -> MVF), MVF).
new2(Arg1, Arg2, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 60).
-spec new3(
{binary(), gleamgen@types:generated_type(MVM)},
{binary(), gleamgen@types:generated_type(MVO)},
{binary(), gleamgen@types:generated_type(MVQ)},
gleamgen@types:generated_type(MVS),
fun((gleamgen@expression:expression(MVM), gleamgen@expression:expression(MVO), gleamgen@expression:expression(MVQ)) -> gleamgen@expression:expression(MVS))
) -> function_(fun((MVM, MVO, MVQ) -> MVS), MVS).
new3(Arg1, Arg2, Arg3, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 89).
-spec new4(
{binary(), gleamgen@types:generated_type(MWA)},
{binary(), gleamgen@types:generated_type(MWC)},
{binary(), gleamgen@types:generated_type(MWE)},
{binary(), gleamgen@types:generated_type(MWG)},
gleamgen@types:generated_type(MWI),
fun((gleamgen@expression:expression(MWA), gleamgen@expression:expression(MWC), gleamgen@expression:expression(MWE), gleamgen@expression:expression(MWG)) -> gleamgen@expression:expression(MWI))
) -> function_(fun((MWA, MWC, MWE, MWG) -> MWI), MWI).
new4(Arg1, Arg2, Arg3, Arg4, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg4))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end},
{erlang:element(1, Arg4),
begin
_pipe@3 = erlang:element(2, Arg4),
gleamgen_ffi:identity(_pipe@3)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 122).
-spec new5(
{binary(), gleamgen@types:generated_type(MWR)},
{binary(), gleamgen@types:generated_type(MWT)},
{binary(), gleamgen@types:generated_type(MWV)},
{binary(), gleamgen@types:generated_type(MWX)},
{binary(), gleamgen@types:generated_type(MWZ)},
gleamgen@types:generated_type(MXB),
fun((gleamgen@expression:expression(MWR), gleamgen@expression:expression(MWT), gleamgen@expression:expression(MWV), gleamgen@expression:expression(MWX), gleamgen@expression:expression(MWZ)) -> gleamgen@expression:expression(MXB))
) -> function_(fun((MWR, MWT, MWV, MWX, MWZ) -> MXB), MXB).
new5(Arg1, Arg2, Arg3, Arg4, Arg5, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg5))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end},
{erlang:element(1, Arg4),
begin
_pipe@3 = erlang:element(2, Arg4),
gleamgen_ffi:identity(_pipe@3)
end},
{erlang:element(1, Arg5),
begin
_pipe@4 = erlang:element(2, Arg5),
gleamgen_ffi:identity(_pipe@4)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 159).
-spec new6(
{binary(), gleamgen@types:generated_type(MXL)},
{binary(), gleamgen@types:generated_type(MXN)},
{binary(), gleamgen@types:generated_type(MXP)},
{binary(), gleamgen@types:generated_type(MXR)},
{binary(), gleamgen@types:generated_type(MXT)},
{binary(), gleamgen@types:generated_type(MXV)},
gleamgen@types:generated_type(MXX),
fun((gleamgen@expression:expression(MXL), gleamgen@expression:expression(MXN), gleamgen@expression:expression(MXP), gleamgen@expression:expression(MXR), gleamgen@expression:expression(MXT), gleamgen@expression:expression(MXV)) -> gleamgen@expression:expression(MXX))
) -> function_(fun((MXL, MXN, MXP, MXR, MXT, MXV) -> MXX), MXX).
new6(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg6))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end},
{erlang:element(1, Arg4),
begin
_pipe@3 = erlang:element(2, Arg4),
gleamgen_ffi:identity(_pipe@3)
end},
{erlang:element(1, Arg5),
begin
_pipe@4 = erlang:element(2, Arg5),
gleamgen_ffi:identity(_pipe@4)
end},
{erlang:element(1, Arg6),
begin
_pipe@5 = erlang:element(2, Arg6),
gleamgen_ffi:identity(_pipe@5)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 200).
-spec new7(
{binary(), gleamgen@types:generated_type(MYI)},
{binary(), gleamgen@types:generated_type(MYK)},
{binary(), gleamgen@types:generated_type(MYM)},
{binary(), gleamgen@types:generated_type(MYO)},
{binary(), gleamgen@types:generated_type(MYQ)},
{binary(), gleamgen@types:generated_type(MYS)},
{binary(), gleamgen@types:generated_type(MYU)},
gleamgen@types:generated_type(MYW),
fun((gleamgen@expression:expression(MYI), gleamgen@expression:expression(MYK), gleamgen@expression:expression(MYM), gleamgen@expression:expression(MYO), gleamgen@expression:expression(MYQ), gleamgen@expression:expression(MYS), gleamgen@expression:expression(MYU)) -> gleamgen@expression:expression(MYW))
) -> function_(fun((MYI, MYK, MYM, MYO, MYQ, MYS, MYU) -> MYW), MYW).
new7(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg7))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end},
{erlang:element(1, Arg4),
begin
_pipe@3 = erlang:element(2, Arg4),
gleamgen_ffi:identity(_pipe@3)
end},
{erlang:element(1, Arg5),
begin
_pipe@4 = erlang:element(2, Arg5),
gleamgen_ffi:identity(_pipe@4)
end},
{erlang:element(1, Arg6),
begin
_pipe@5 = erlang:element(2, Arg6),
gleamgen_ffi:identity(_pipe@5)
end},
{erlang:element(1, Arg7),
begin
_pipe@6 = erlang:element(2, Arg7),
gleamgen_ffi:identity(_pipe@6)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 245).
-spec new8(
{binary(), gleamgen@types:generated_type(MZI)},
{binary(), gleamgen@types:generated_type(MZK)},
{binary(), gleamgen@types:generated_type(MZM)},
{binary(), gleamgen@types:generated_type(MZO)},
{binary(), gleamgen@types:generated_type(MZQ)},
{binary(), gleamgen@types:generated_type(MZS)},
{binary(), gleamgen@types:generated_type(MZU)},
{binary(), gleamgen@types:generated_type(MZW)},
gleamgen@types:generated_type(MZY),
fun((gleamgen@expression:expression(MZI), gleamgen@expression:expression(MZK), gleamgen@expression:expression(MZM), gleamgen@expression:expression(MZO), gleamgen@expression:expression(MZQ), gleamgen@expression:expression(MZS), gleamgen@expression:expression(MZU), gleamgen@expression:expression(MZW)) -> gleamgen@expression:expression(MZY))
) -> function_(fun((MZI, MZK, MZM, MZO, MZQ, MZS, MZU, MZW) -> MZY), MZY).
new8(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg7)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg8))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end},
{erlang:element(1, Arg4),
begin
_pipe@3 = erlang:element(2, Arg4),
gleamgen_ffi:identity(_pipe@3)
end},
{erlang:element(1, Arg5),
begin
_pipe@4 = erlang:element(2, Arg5),
gleamgen_ffi:identity(_pipe@4)
end},
{erlang:element(1, Arg6),
begin
_pipe@5 = erlang:element(2, Arg6),
gleamgen_ffi:identity(_pipe@5)
end},
{erlang:element(1, Arg7),
begin
_pipe@6 = erlang:element(2, Arg7),
gleamgen_ffi:identity(_pipe@6)
end},
{erlang:element(1, Arg8),
begin
_pipe@7 = erlang:element(2, Arg8),
gleamgen_ffi:identity(_pipe@7)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 294).
-spec new9(
{binary(), gleamgen@types:generated_type(NAL)},
{binary(), gleamgen@types:generated_type(NAN)},
{binary(), gleamgen@types:generated_type(NAP)},
{binary(), gleamgen@types:generated_type(NAR)},
{binary(), gleamgen@types:generated_type(NAT)},
{binary(), gleamgen@types:generated_type(NAV)},
{binary(), gleamgen@types:generated_type(NAX)},
{binary(), gleamgen@types:generated_type(NAZ)},
{binary(), gleamgen@types:generated_type(NBB)},
gleamgen@types:generated_type(NBD),
fun((gleamgen@expression:expression(NAL), gleamgen@expression:expression(NAN), gleamgen@expression:expression(NAP), gleamgen@expression:expression(NAR), gleamgen@expression:expression(NAT), gleamgen@expression:expression(NAV), gleamgen@expression:expression(NAX), gleamgen@expression:expression(NAZ), gleamgen@expression:expression(NBB)) -> gleamgen@expression:expression(NBD))
) -> function_(fun((NAL, NAN, NAP, NAR, NAT, NAV, NAX, NAZ, NBB) -> NBD), NBD).
new9(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Returns, Handler) ->
Body = Handler(
gleamgen@expression:unchecked_ident(erlang:element(1, Arg1)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg2)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg3)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg4)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg5)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg6)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg7)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg8)),
gleamgen@expression:unchecked_ident(erlang:element(1, Arg9))
),
{function,
[{erlang:element(1, Arg1),
begin
_pipe = erlang:element(2, Arg1),
gleamgen_ffi:identity(_pipe)
end},
{erlang:element(1, Arg2),
begin
_pipe@1 = erlang:element(2, Arg2),
gleamgen_ffi:identity(_pipe@1)
end},
{erlang:element(1, Arg3),
begin
_pipe@2 = erlang:element(2, Arg3),
gleamgen_ffi:identity(_pipe@2)
end},
{erlang:element(1, Arg4),
begin
_pipe@3 = erlang:element(2, Arg4),
gleamgen_ffi:identity(_pipe@3)
end},
{erlang:element(1, Arg5),
begin
_pipe@4 = erlang:element(2, Arg5),
gleamgen_ffi:identity(_pipe@4)
end},
{erlang:element(1, Arg6),
begin
_pipe@5 = erlang:element(2, Arg6),
gleamgen_ffi:identity(_pipe@5)
end},
{erlang:element(1, Arg7),
begin
_pipe@6 = erlang:element(2, Arg7),
gleamgen_ffi:identity(_pipe@6)
end},
{erlang:element(1, Arg8),
begin
_pipe@7 = erlang:element(2, Arg8),
gleamgen_ffi:identity(_pipe@7)
end},
{erlang:element(1, Arg9),
begin
_pipe@8 = erlang:element(2, Arg9),
gleamgen_ffi:identity(_pipe@8)
end}],
Returns,
Body}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 354).
-spec to_unchecked(function_(any(), any())) -> function_(gleamgen@types:unchecked(), gleamgen@types:unchecked()).
to_unchecked(Type_) ->
gleamgen_ffi:identity(Type_).
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 361).
?DOC(false).
-spec get_function_name(any()) -> binary().
get_function_name(Type_) ->
gleamgen_ffi:get_function_name(Type_).
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 374).
-spec render(
function_(any(), any()),
gleamgen@render:context(),
gleam@option:option(binary())
) -> gleamgen@render:rendered().
render(Func, Context, Name) ->
Rendered_args = begin
_pipe = erlang:element(2, Func),
_pipe@1 = gleam@list:map(
_pipe,
fun(_capture) ->
gleamgen@expression:render_attribute(_capture, Context)
end
),
gleamgen@render:pretty_list(_pipe@1)
end,
Rendered_type = gleamgen@types:render_type(erlang:element(3, Func)),
Rendered_body = gleamgen@expression:render(
erlang:element(4, Func),
begin
_record = Context,
{context, erlang:element(2, _record), false}
end
),
{Rendered_name, Force_newlines} = case Name of
{some, Name@1} ->
{glam@doc:from_string(<<" "/utf8, Name@1/binary>>), true};
none ->
{{concat, []}, false}
end,
_pipe@2 = glam@doc:concat(
[glam@doc:from_string(<<"fn"/utf8>>),
Rendered_name,
Rendered_args,
{break, <<" "/utf8>>, <<""/utf8>>},
case Rendered_type of
{ok, Returned} ->
glam@doc:concat(
[glam@doc:from_string(<<"->"/utf8>>),
{break, <<" "/utf8>>, <<""/utf8>>},
erlang:element(2, Returned),
{break, <<" "/utf8>>, <<""/utf8>>}]
);
{error, _} ->
{concat, []}
end,
gleamgen@render:body(
erlang:element(2, Rendered_body),
Force_newlines
)]
),
{render,
_pipe@2,
gleamgen@render:merge_details(
begin
_pipe@3 = Rendered_type,
_pipe@4 = gleam@result:map(
_pipe@3,
fun(T) -> erlang:element(3, T) end
),
gleam@result:unwrap(_pipe@4, {rendered_details, []})
end,
erlang:element(3, Rendered_body)
)}.
-file("/home/weasel/gleam/testing_gleamgen/gleamgen/src/gleamgen/function.gleam", 363).
-spec anonymous(function_(NBY, any())) -> gleamgen@expression:expression(NBY).
anonymous(Function) ->
Type_ = begin
_pipe = erlang:element(2, Function),
_pipe@1 = gleam@list:map(_pipe, fun gleam@pair:second/1),
gleamgen@types:unchecked_function(
_pipe@1,
begin
_pipe@2 = erlang:element(3, Function),
gleamgen_ffi:identity(_pipe@2)
end
)
end,
Renderer = fun(Context) -> render(Function, Context, none) end,
gleamgen@expression:new_anonymous_function(Renderer, Type_).