Compiler side of state updates
No support in FATE yet though
This commit is contained in:
parent
db48be1805
commit
fac136bded
@ -211,8 +211,12 @@ init_type_env() ->
|
||||
|
||||
-spec to_fcode(env(), aeso_syntax:ast()) -> fcode().
|
||||
to_fcode(Env, [{contract, _, {con, _, Main}, Decls}]) ->
|
||||
#{ builtins := Builtins } = Env,
|
||||
MainEnv = Env#{ context => {main_contract, Main},
|
||||
builtins => Builtins#{[Main, "state"] => {get_state, none},
|
||||
[Main, "put"] => {set_state, 1}} },
|
||||
#{ functions := Funs } = Env1 =
|
||||
decls_to_fcode(Env#{ context => {main_contract, Main} }, Decls),
|
||||
decls_to_fcode(MainEnv, Decls),
|
||||
StateType = lookup_type(Env1, [Main, "state"], [], {tuple, []}),
|
||||
EventType = lookup_type(Env1, [Main, "event"], [], none),
|
||||
#{ contract_name => Main,
|
||||
|
@ -38,6 +38,7 @@
|
||||
|
||||
-define(i(X), {immediate, X}).
|
||||
-define(a, {stack, 0}).
|
||||
-define(s, {var, -1}). %% TODO: until we have state support in FATE
|
||||
|
||||
-define(IsOp(Op), (
|
||||
Op =:= 'STORE' orelse
|
||||
@ -372,6 +373,11 @@ call_to_scode(Env, CallCode, Args) ->
|
||||
[[to_scode(notail(Env), A) || A <- lists:reverse(Args)],
|
||||
CallCode].
|
||||
|
||||
builtin_to_scode(_Env, get_state, none) ->
|
||||
[push(?s)];
|
||||
builtin_to_scode(Env, set_state, [_] = Args) ->
|
||||
call_to_scode(Env, [aeb_fate_code:store(?s, ?a),
|
||||
aeb_fate_code:tuple(0)], Args);
|
||||
builtin_to_scode(_Env, map_empty, none) ->
|
||||
[aeb_fate_code:map_empty(?a)];
|
||||
builtin_to_scode(_Env, bits_none, none) ->
|
||||
|
Loading…
x
Reference in New Issue
Block a user