compile address literals

This commit is contained in:
Ulf Norell 2019-04-26 12:33:50 +02:00
parent c419b105bf
commit 272c247b4d
2 changed files with 40 additions and 14 deletions

View File

@ -28,6 +28,10 @@
-type fexpr() :: {int, integer()} -type fexpr() :: {int, integer()}
| {string, binary()} | {string, binary()}
| {account_pubkey, binary()}
| {contract_pubkey, binary()}
| {oracle_pubkey, binary()}
| {oracle_query_id, binary()}
| {bool, false | true} | {bool, false | true}
| nil | nil
| {var, var_name()} | {var, var_name()}
@ -259,10 +263,14 @@ expr_to_fcode(Env, Expr) ->
-spec expr_to_fcode(env(), aeso_syntax:type() | no_type, aeso_syntax:expr()) -> fexpr(). -spec expr_to_fcode(env(), aeso_syntax:type() | no_type, aeso_syntax:expr()) -> fexpr().
%% Literals %% Literals
expr_to_fcode(_Env, _Type, {int, _, N}) -> {int, N}; expr_to_fcode(_Env, _Type, {int, _, N}) -> {int, N};
expr_to_fcode(_Env, _Type, {char, _, N}) -> {int, N}; expr_to_fcode(_Env, _Type, {char, _, N}) -> {int, N};
expr_to_fcode(_Env, _Type, {bool, _, B}) -> {bool, B}; expr_to_fcode(_Env, _Type, {bool, _, B}) -> {bool, B};
expr_to_fcode(_Env, _Type, {string, _, S}) -> {string, S}; expr_to_fcode(_Env, _Type, {string, _, S}) -> {string, S};
expr_to_fcode(_Env, _Type, {account_pubkey, _, K}) -> {account_pubkey, K};
expr_to_fcode(_Env, _Type, {contract_pubkey, _, K}) -> {contract_pubkey, K};
expr_to_fcode(_Env, _Type, {oracle_pubkey, _, K}) -> {oracle_pubkey, K};
expr_to_fcode(_Env, _Type, {oracle_query_id, _, K}) -> {oracle_query_id, K};
%% Variables %% Variables
expr_to_fcode(_Env, _Type, {id, _, X}) -> {var, X}; expr_to_fcode(_Env, _Type, {id, _, X}) -> {var, X};
@ -488,9 +496,13 @@ split_vars({var, X}, T) -> [{X, T}].
-spec rename([{var_name(), var_name()}], fexpr()) -> fexpr(). -spec rename([{var_name(), var_name()}], fexpr()) -> fexpr().
rename(Ren, Expr) -> rename(Ren, Expr) ->
case Expr of case Expr of
{int, _} -> Expr; {int, _} -> Expr;
{string, _} -> Expr; {string, _} -> Expr;
{bool, _} -> Expr; {bool, _} -> Expr;
{account_pubkey, _} -> Expr;
{contract_pubkey, _} -> Expr;
{oracle_pubkey, _} -> Expr;
{oracle_query_id, _} -> Expr;
nil -> nil; nil -> nil;
{var, X} -> {var, rename_var(Ren, X)}; {var, X} -> {var, rename_var(Ren, X)};
{con, Ar, I, Es} -> {con, Ar, I, [rename(Ren, E) || E <- Es]}; {con, Ar, I, Es} -> {con, Ar, I, [rename(Ren, E) || E <- Es]};
@ -791,13 +803,14 @@ pp_punctuate(Sep, [X | Xs]) -> [pp_beside(X, Sep) | pp_punctuate(Sep, Xs)].
pp_par([]) -> prettypr:empty(); pp_par([]) -> prettypr:empty();
pp_par(Xs) -> prettypr:par(Xs). pp_par(Xs) -> prettypr:par(Xs).
pp_fexpr({Tag, Lit}) when Tag == int;
pp_fexpr({int, N}) -> Tag == string;
pp_text(N); Tag == bool;
pp_fexpr({string, S}) -> Tag == account_pubkey;
pp_text(S); Tag == contract_pubkey;
pp_fexpr({bool, B}) -> Tag == oracle_pubkey;
pp_text(B); Tag == oracle_query_id ->
aeso_pretty:expr({Tag, [], Lit});
pp_fexpr(nil) -> pp_fexpr(nil) ->
pp_text("[]"); pp_text("[]");
pp_fexpr({var, X}) -> pp_fexpr({var, X}) ->

View File

@ -180,6 +180,19 @@ to_scode(_Env, {string, S}) ->
to_scode(_Env, {bool, B}) -> to_scode(_Env, {bool, B}) ->
[aeb_fate_code:push(?i(B))]; [aeb_fate_code:push(?i(B))];
to_scode(_Env, {account_pubkey, K}) ->
[aeb_fate_code:push(?i(aeb_fate_data:make_address(K)))];
to_scode(_Env, {contract_pubkey, K}) ->
[aeb_fate_code:push(?i(aeb_fate_data:make_contract(K)))];
to_scode(_Env, {oracle_pubkey, K}) ->
[aeb_fate_code:push(?i(aeb_fate_data:make_oracle(K)))];
to_scode(_Env, {oracle_query_id, K}) ->
%% Not actually in FATE yet
[aeb_fate_code:push(?i(aeb_fate_data:make_oracle_query(K)))];
to_scode(_Env, nil) -> aeb_fate_code:nil(?a); to_scode(_Env, nil) -> aeb_fate_code:nil(?a);
to_scode(Env, {var, X}) -> to_scode(Env, {var, X}) ->