Handle records and type aliases correctly in fcode
This commit is contained in:
parent
5465b74ac9
commit
499e2f8200
@ -304,14 +304,15 @@ typedef_to_fcode(Env, Id = {id, _, Name}, Xs, Def) ->
|
|||||||
FDef = fun(Args) when length(Args) == length(Xs) ->
|
FDef = fun(Args) when length(Args) == length(Xs) ->
|
||||||
Sub = maps:from_list(lists:zip([X || {tvar, _, X} <- Xs], Args)),
|
Sub = maps:from_list(lists:zip([X || {tvar, _, X} <- Xs], Args)),
|
||||||
case Def of
|
case Def of
|
||||||
{record_t, Fields} -> {todo, Xs, Args, record_t, Fields};
|
{record_t, Fields} ->
|
||||||
|
{tuple, [type_to_fcode(Env, Sub, T) || {field_t, _, _, T} <- Fields]};
|
||||||
{variant_t, Cons} ->
|
{variant_t, Cons} ->
|
||||||
FCons = [ begin
|
FCons = [ begin
|
||||||
{constr_t, _, _, Ts} = Con,
|
{constr_t, _, _, Ts} = Con,
|
||||||
[type_to_fcode(Env, Sub, T) || T <- Ts]
|
[type_to_fcode(Env, Sub, T) || T <- Ts]
|
||||||
end || Con <- Cons ],
|
end || Con <- Cons ],
|
||||||
{variant, FCons};
|
{variant, FCons};
|
||||||
{alias_t, Type} -> {todo, Xs, Args, alias_t, Type}
|
{alias_t, Type} -> type_to_fcode(Env, Sub, Type)
|
||||||
end;
|
end;
|
||||||
(Args) -> internal_error({type_arity_mismatch, Name, length(Args), length(Xs)})
|
(Args) -> internal_error({type_arity_mismatch, Name, length(Args), length(Xs)})
|
||||||
end,
|
end,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user