From bde5a3c071b6fb3d1118f1c6c88cee358693624d Mon Sep 17 00:00:00 2001 From: Ulf Norell Date: Mon, 24 Jun 2019 11:44:23 +0200 Subject: [PATCH] Compile bytes_to_X in FATE backend --- src/aeso_ast_to_fcode.erl | 2 ++ src/aeso_fcode_to_fate.erl | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/aeso_ast_to_fcode.erl b/src/aeso_ast_to_fcode.erl index 7c760a4..b648f65 100644 --- a/src/aeso_ast_to_fcode.erl +++ b/src/aeso_ast_to_fcode.erl @@ -190,6 +190,7 @@ builtins() -> {["String"], [{"length", 1}, {"concat", 2}, {"sha3", 1}, {"sha256", 1}, {"blake2b", 1}]}, {["Bits"], [{"set", 2}, {"clear", 2}, {"test", 2}, {"sum", 1}, {"intersection", 2}, {"union", 2}, {"difference", 2}, {"none", none}, {"all", none}]}, + {["Bytes"], [{"to_int", 1}, {"to_str", 1}]}, {["Int"], [{"to_str", 1}]}, {["Address"], [{"to_str", 1}]} ], @@ -1323,6 +1324,7 @@ pp_call(Fun, Args) -> pp_ftype(T) when is_atom(T) -> pp_text(T); pp_ftype(any) -> pp_text("_"); pp_ftype({tvar, X}) -> pp_text(X); +pp_ftype({bytes, N}) -> pp_text(["bytes(", integer_to_list(N), ")"]); pp_ftype({tuple, Ts}) -> pp_parens(pp_par(pp_punctuate(pp_text(","), [pp_ftype(T) || T <- Ts]))); pp_ftype({list, T}) -> diff --git a/src/aeso_fcode_to_fate.erl b/src/aeso_fcode_to_fate.erl index 679481c..c79459e 100644 --- a/src/aeso_fcode_to_fate.erl +++ b/src/aeso_fcode_to_fate.erl @@ -102,6 +102,8 @@ Op =:= 'ECVERIFY_SECP256K1' orelse Op =:= 'CONTRACT_TO_ADDRESS' orelse Op =:= 'AUTH_TX_HASH' orelse + Op =:= 'BYTES_TO_INT' orelse + Op =:= 'BYTES_TO_STR' orelse false)). -record(env, { contract, vars = [], locals = [], tailpos = true }). @@ -470,6 +472,10 @@ builtin_to_scode(_Env, bits_none, []) -> [aeb_fate_ops:bits_none(?a)]; builtin_to_scode(_Env, bits_all, []) -> [aeb_fate_ops:bits_all(?a)]; +builtin_to_scode(Env, bytes_to_int, [_] = Args) -> + call_to_scode(Env, aeb_fate_ops:bytes_to_int(?a, ?a), Args); +builtin_to_scode(Env, bytes_to_str, [_] = Args) -> + call_to_scode(Env, aeb_fate_ops:bytes_to_str(?a, ?a), Args); builtin_to_scode(Env, abort, [_] = Args) -> call_to_scode(Env, aeb_fate_ops:abort(?a), Args); builtin_to_scode(Env, chain_spend, [_, _] = Args) -> @@ -802,6 +808,8 @@ attributes(I) -> {'ECVERIFY_SECP256K1', A, B, C, D} -> Pure(A, [B, C, D]); {'CONTRACT_TO_ADDRESS', A, B} -> Pure(A, [B]); {'AUTH_TX_HASH', A} -> Pure(A, []); + {'BYTES_TO_INT', A, B} -> Pure(A, [B]); + {'BYTES_TO_STR', A, B} -> Pure(A, [B]); {'ADDRESS', A} -> Pure(A, []); {'BALANCE', A} -> Impure(A, []); {'BALANCE_OTHER', A, B} -> Impure(A, [B]);