Events now compile to FATE

This commit is contained in:
Ulf Norell 2019-06-25 15:01:42 +02:00
parent 0cf6a52b26
commit 961f557215
2 changed files with 4 additions and 6 deletions

View File

@ -130,7 +130,7 @@
-type env() :: #{ type_env := type_env(), -type env() :: #{ type_env := type_env(),
fun_env := fun_env(), fun_env := fun_env(),
con_env := con_env(), con_env := con_env(),
event_type := aeso_syntax:typedef(), event_type => aeso_syntax:typedef(),
builtins := builtins(), builtins := builtins(),
options := [option()], options := [option()],
context => context(), context => context(),
@ -823,7 +823,6 @@ event_function(_Env = #{event_type := {variant_t, EventCons}}, EventType = {vari
Cons = [ {Name, I - 1, proplists:get_value(indices, Ann)} Cons = [ {Name, I - 1, proplists:get_value(indices, Ann)}
|| {I, {constr_t, Ann, {con, _, Name}, _}} <- indexed(EventCons) ], || {I, {constr_t, Ann, {con, _, Name}, _}} <- indexed(EventCons) ],
Arities = [length(Ts) || Ts <- FCons], Arities = [length(Ts) || Ts <- FCons],
io:format("Cons = ~p\nEventFType = ~p\n", [Cons, EventType]),
Case = fun({Name, Tag, Ixs}) -> Case = fun({Name, Tag, Ixs}) ->
%% TODO: precompute (needs dependency) %% TODO: precompute (needs dependency)
Hash = {op, crypto_sha3, [{lit, {string, list_to_binary(Name)}}]}, Hash = {op, crypto_sha3, [{lit, {string, list_to_binary(Name)}}]},
@ -838,7 +837,7 @@ event_function(_Env = #{event_type := {variant_t, EventCons}}, EventType = {vari
Body = {builtin, chain_event, [Payload, Hash | Indices]}, Body = {builtin, chain_event, [Payload, Hash | Indices]},
{'case', {con, Arities, Tag, Vars}, {nosplit, Body}} {'case', {con, Arities, Tag, Vars}, {nosplit, Body}}
end, end,
#{ attrs => [stateful, private], #{ attrs => [private],
args => [{"e", EventType}], args => [{"e", EventType}],
return => {tuple, []}, return => {tuple, []},
body => {switch, {split, EventType, "e", lists:map(Case, Cons)}} }. body => {switch, {split, EventType, "e", lists:map(Case, Cons)}} }.
@ -1369,7 +1368,7 @@ pp_call(Fun, Args) ->
pp_call_t(Fun, Args) -> pp_call_t(Fun, Args) ->
pp_beside(pp_text(Fun), pp_ftype({tuple, Args})). pp_beside(pp_text(Fun), pp_ftype({tuple, Args})).
-spec pp_ftype(ftype()) -> prettypr:doc(). -spec pp_ftype(ftype()) -> any().
pp_ftype(T) when is_atom(T) -> pp_text(T); pp_ftype(T) when is_atom(T) -> pp_text(T);
pp_ftype(any) -> pp_text("_"); pp_ftype(any) -> pp_text("_");
pp_ftype({tvar, X}) -> pp_text(X); pp_ftype({tvar, X}) -> pp_text(X);

View File

@ -119,8 +119,7 @@ compilable_contracts() ->
"bytes_to_x" "bytes_to_x"
]. ].
not_yet_compilable(fate) -> not_yet_compilable(fate) -> [];
["events"];
not_yet_compilable(aevm) -> []. not_yet_compilable(aevm) -> [].
%% Contracts that should produce type errors %% Contracts that should produce type errors