Serialization of functions only succeeds for 4 byte iudentifiers

This commit is contained in:
Thomas Arts 2019-05-27 14:42:43 +02:00
parent 34b9684b6b
commit 5d7bd73bcb

View File

@ -97,7 +97,7 @@ serialize(#fcode{} = F) ->
serialize(F, []). serialize(F, []).
serialize(#fcode{} = F, Options) -> serialize(#fcode{} = F, Options) ->
serialize(F, iolist_to_binary(serialize_functions(F)), Options). serialize(F, serialize_functions(F), Options).
serialize(#fcode{} = F, Functions, Options) -> serialize(#fcode{} = F, Functions, Options) ->
SymbolTable = serialize_symbol_table(F), SymbolTable = serialize_symbol_table(F),
@ -123,9 +123,12 @@ to_hexstring(ByteList) ->
serialize_functions(#fcode{ functions = Functions }) -> serialize_functions(#fcode{ functions = Functions }) ->
%% Sort the functions on name to get a canonical serialisation. %% Sort the functions on name to get a canonical serialisation.
Code = [[?FUNCTION, Name, serialize_signature(Sig), serialize_bbs(C)] || iolist_to_binary(
{Name, {Sig, C}} <- lists:sort(maps:to_list(Functions))], lists:foldr(fun({Id, {Sig, C}}, Acc) when byte_size(Id) == 4 ->
lists:flatten(Code). [[?FUNCTION, Id, serialize_signature(Sig), serialize_bbs(C)] | Acc];
({Id, _}, _) ->
error({illegal_function_id, Id})
end, [], lists:sort(maps:to_list(Functions)))).
serialize_signature({Args, RetType}) -> serialize_signature({Args, RetType}) ->
[aeb_fate_encoding:serialize_type({tuple, Args}) | [aeb_fate_encoding:serialize_type({tuple, Args}) |