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()}
| {string, binary()}
| {account_pubkey, binary()}
| {contract_pubkey, binary()}
| {oracle_pubkey, binary()}
| {oracle_query_id, binary()}
| {bool, false | true}
| nil
| {var, var_name()}
@ -263,6 +267,10 @@ expr_to_fcode(_Env, _Type, {int, _, 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, {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
expr_to_fcode(_Env, _Type, {id, _, X}) -> {var, X};
@ -491,6 +499,10 @@ rename(Ren, Expr) ->
{int, _} -> Expr;
{string, _} -> Expr;
{bool, _} -> Expr;
{account_pubkey, _} -> Expr;
{contract_pubkey, _} -> Expr;
{oracle_pubkey, _} -> Expr;
{oracle_query_id, _} -> Expr;
nil -> nil;
{var, X} -> {var, rename_var(Ren, X)};
{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(Xs) -> prettypr:par(Xs).
pp_fexpr({int, N}) ->
pp_text(N);
pp_fexpr({string, S}) ->
pp_text(S);
pp_fexpr({bool, B}) ->
pp_text(B);
pp_fexpr({Tag, Lit}) when Tag == int;
Tag == string;
Tag == bool;
Tag == account_pubkey;
Tag == contract_pubkey;
Tag == oracle_pubkey;
Tag == oracle_query_id ->
aeso_pretty:expr({Tag, [], Lit});
pp_fexpr(nil) ->
pp_text("[]");
pp_fexpr({var, X}) ->

View File

@ -180,6 +180,19 @@ to_scode(_Env, {string, S}) ->
to_scode(_Env, {bool, 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, {var, X}) ->