From 1043473696c0e0c2b8ea86b56807a1c03917369e Mon Sep 17 00:00:00 2001 From: Gaith Hallak Date: Tue, 1 Nov 2022 17:19:17 +0300 Subject: [PATCH] Add fann() to set_state --- src/aeso_ast_to_fcode.erl | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/aeso_ast_to_fcode.erl b/src/aeso_ast_to_fcode.erl index 3142b62..25cf72c 100644 --- a/src/aeso_ast_to_fcode.erl +++ b/src/aeso_ast_to_fcode.erl @@ -75,7 +75,7 @@ | {funcall, fann(), fexpr(), [fexpr()]} %% Call to unknown function | {closure, fann(), fun_name(), fexpr()} | {switch, fsplit()} - | {set_state, state_reg(), fexpr()} + | {set_state, fann(), state_reg(), fexpr()} | {get_state, state_reg()} %% The following (unapplied top-level functions/builtins and %% lambdas) are generated by the fcode compiler, but translated @@ -1115,7 +1115,7 @@ op_builtins() -> ]. set_state({reg, R}, Val) -> - {set_state, R, Val}; + {set_state, get_fann(Val), R, Val}; set_state({tuple, Ls}, Val) -> ?make_let(X, Val, lists:foldr(fun({I, L}, Code) -> @@ -1290,7 +1290,7 @@ lambda_lift_expr(Layout, Expr) -> {op, Op, As} -> {op, Op, lambda_lift_exprs(Layout, As)}; {'let', X, A, B} -> {'let', X, lambda_lift_expr(Layout, A), lambda_lift_expr(Layout, B)}; {funcall, Ann, A, Bs} -> {funcall, Ann, lambda_lift_expr(Layout, A), lambda_lift_exprs(Layout, Bs)}; - {set_state, R, A} -> {set_state, R, lambda_lift_expr(Layout, A)}; + {set_state, Ann, R, A} -> {set_state, Ann, R, lambda_lift_expr(Layout, A)}; {get_state, _} -> Expr; {switch, S} -> {switch, lambda_lift_expr(Layout, S)}; {split, Type, X, Alts} -> {split, Type, X, lambda_lift_exprs(Layout, Alts)}; @@ -1598,7 +1598,7 @@ read_only({proj, E, _}) -> read_only(E); read_only({set_proj, A, _, B}) -> read_only([A, B]); read_only({op, _, Es}) -> read_only(Es); read_only({get_state, _}) -> true; -read_only({set_state, _, _}) -> false; +read_only({set_state, _, _, _}) -> false; read_only({def_u, _, _}) -> true; read_only({remote_u, _, _, _, _}) -> true; read_only({builtin_u, _, _}) -> true; @@ -1841,7 +1841,7 @@ free_vars(Expr) -> {op, _, As} -> free_vars(As); {'let', X, A, B} -> free_vars([A, {lam, [X], B}]); {funcall, _, A, Bs} -> free_vars([A | Bs]); - {set_state, _, A} -> free_vars(A); + {set_state, _, _, A} -> free_vars(A); {get_state, _} -> []; {lam, Xs, B} -> free_vars(B) -- lists:sort(Xs); {closure, _, _, A} -> free_vars(A); @@ -1872,7 +1872,7 @@ used_defs(Expr) -> {op, _, As} -> used_defs(As); {'let', _, A, B} -> used_defs([A, B]); {funcall, _, A, Bs} -> used_defs([A | Bs]); - {set_state, _, A} -> used_defs(A); + {set_state, _, _, A} -> used_defs(A); {get_state, _} -> []; {lam, _, B} -> used_defs(B); {closure, _, F, A} -> lists:umerge([F], used_defs(A)); @@ -1902,7 +1902,7 @@ bottom_up(F, Env, Expr) -> {set_proj, R, I, E} -> {set_proj, bottom_up(F, Env, R), I, bottom_up(F, Env, E)}; {op, Op, Es} -> {op, Op, [bottom_up(F, Env, E) || E <- Es]}; {funcall, Ann, Fun, Es} -> {funcall, Ann, bottom_up(F, Env, Fun), [bottom_up(F, Env, E) || E <- Es]}; - {set_state, R, E} -> {set_state, R, bottom_up(F, Env, E)}; + {set_state, Ann, R, E} -> {set_state, Ann, R, bottom_up(F, Env, E)}; {get_state, _} -> Expr; {closure, Ann, F, CEnv} -> {closure, Ann, F, bottom_up(F, Env, CEnv)}; {switch, Split} -> {switch, bottom_up(F, Env, Split)}; @@ -1960,7 +1960,7 @@ rename(Ren, Expr) -> {set_proj, R, I, E} -> {set_proj, rename(Ren, R), I, rename(Ren, E)}; {op, Op, Es} -> {op, Op, [rename(Ren, E) || E <- Es]}; {funcall, Ann, Fun, Es} -> {funcall, Ann, rename(Ren, Fun), [rename(Ren, E) || E <- Es]}; - {set_state, R, E} -> {set_state, R, rename(Ren, E)}; + {set_state, Ann, R, E} -> {set_state, Ann, R, rename(Ren, E)}; {get_state, _} -> Expr; {closure, Ann, F, Env} -> {closure, Ann, F, rename(Ren, Env)}; {switch, Split} -> {switch, rename_split(Ren, Split)}; @@ -2207,7 +2207,7 @@ pp_fexpr({remote, ArgsT, RetT, Ct, Fun, As}) -> pp_call(pp_parens(pp_beside([pp_fexpr(Ct), pp_text("."), pp_fun_name(Fun), pp_text(" : "), pp_ftype({function, ArgsT, RetT})])), As); pp_fexpr({funcall, _, Fun, As}) -> pp_call(pp_fexpr(Fun), As); -pp_fexpr({set_state, R, A}) -> +pp_fexpr({set_state, _, R, A}) -> pp_call(pp_text("set_state"), [{lit, {int, R}}, A]); pp_fexpr({get_state, R}) -> pp_call(pp_text("get_state"), [{lit, {int, R}}]);