Make init do the state updates in FATE (instead of a new INIT function)

This commit is contained in:
Ulf Norell 2019-09-03 09:01:11 +02:00
parent a50730155f
commit 58ab771dff
2 changed files with 4 additions and 7 deletions

View File

@ -20,7 +20,7 @@
-type fun_name() :: {entrypoint, binary()} -type fun_name() :: {entrypoint, binary()}
| {local_fun, [string()]} | {local_fun, [string()]}
| init | event. | event.
-type var_name() :: string(). -type var_name() :: string().
-type sophia_name() :: [string()]. -type sophia_name() :: [string()].
@ -910,10 +910,9 @@ add_init_function(Env, StateType, Funs0) ->
false -> false ->
Funs = add_default_init_function(Env, StateType, Funs0), Funs = add_default_init_function(Env, StateType, Funs0),
InitName = {entrypoint, <<"init">>}, InitName = {entrypoint, <<"init">>},
InitFun = #{ args := InitArgs } = maps:get(InitName, Funs, none), InitFun = #{ body := InitBody} = maps:get(InitName, Funs),
Vars = [ {var, X} || {X, _} <- InitArgs ], Funs#{ InitName => InitFun#{ return => {tuple, []},
Funs#{ init => InitFun#{ return => {tuple, []}, body => {builtin, set_state, [InitBody]} } }
body => {builtin, set_state, [{def, InitName, Vars}]} } }
end. end.
add_default_init_function(_Env, StateType, Funs) -> add_default_init_function(_Env, StateType, Funs) ->
@ -1460,7 +1459,6 @@ pp_fun(Name, #{ args := Args, return := Return, body := Body }) ->
pp_text(" : "), pp_ftype(Return), pp_text(" =")]), pp_text(" : "), pp_ftype(Return), pp_text(" =")]),
prettypr:nest(2, pp_fexpr(Body))). prettypr:nest(2, pp_fexpr(Body))).
pp_fun_name(init) -> pp_text('INIT');
pp_fun_name(event) -> pp_text(event); pp_fun_name(event) -> pp_text(event);
pp_fun_name({entrypoint, E}) -> pp_text(binary_to_list(E)); pp_fun_name({entrypoint, E}) -> pp_text(binary_to_list(E));
pp_fun_name({local_fun, Q}) -> pp_text(string:join(Q, ".")). pp_fun_name({local_fun, Q}) -> pp_text(string:join(Q, ".")).

View File

@ -143,7 +143,6 @@ compile(FCode, Options) ->
make_function_id(X) -> make_function_id(X) ->
aeb_fate_code:symbol_identifier(make_function_name(X)). aeb_fate_code:symbol_identifier(make_function_name(X)).
make_function_name(init) -> <<"INIT">>;
make_function_name(event) -> <<"Chain.event">>; make_function_name(event) -> <<"Chain.event">>;
make_function_name({entrypoint, Name}) -> Name; make_function_name({entrypoint, Name}) -> Name;
make_function_name({local_fun, Xs}) -> list_to_binary("." ++ string:join(Xs, ".")). make_function_name({local_fun, Xs}) -> list_to_binary("." ++ string:join(Xs, ".")).