Add self address to CameLIGO and PascaLIGO

This commit is contained in:
John David Pressman 2019-11-29 03:53:25 -08:00 committed by Gabriel Alfour
parent 03dd86c9ad
commit 0b3e057819
4 changed files with 20 additions and 1 deletions

View File

@ -74,6 +74,7 @@ module Simplify = struct
("source" , "SOURCE") ; ("source" , "SOURCE") ;
("sender" , "SENDER") ; ("sender" , "SENDER") ;
("address", "ADDRESS") ; ("address", "ADDRESS") ;
("self_address", "SELF_ADDRESS") ;
("implicit_account", "IMPLICIT_ACCOUNT") ; ("implicit_account", "IMPLICIT_ACCOUNT") ;
("failwith" , "FAILWITH") ; ("failwith" , "FAILWITH") ;
("bitwise_or" , "OR") ; ("bitwise_or" , "OR") ;
@ -139,6 +140,7 @@ module Simplify = struct
("Current.sender" , "SENDER") ; ("Current.sender" , "SENDER") ;
("sender", "SENDER") ; ("sender", "SENDER") ;
("Current.address", "ADDRESS") ; ("Current.address", "ADDRESS") ;
("Current.self_address", "SELF_ADDRESS") ;
("Current.implicit_account", "IMPLICIT_ACCOUNT") ; ("Current.implicit_account", "IMPLICIT_ACCOUNT") ;
("Current.source" , "SOURCE") ; ("Current.source" , "SOURCE") ;
("source", "SOURCE") ; ("source", "SOURCE") ;
@ -470,6 +472,9 @@ module Typer = struct
let%bind () = assert_t_contract contract in let%bind () = assert_t_contract contract in
ok @@ t_address () ok @@ t_address ()
let self_address = typer_0 "SELF_ADDRESS" @@ fun _ ->
ok @@ t_address ()
let implicit_account = typer_1 "IMPLICIT_ACCOUNT" @@ fun key_hash -> let implicit_account = typer_1 "IMPLICIT_ACCOUNT" @@ fun key_hash ->
let%bind () = assert_t_key_hash key_hash in let%bind () = assert_t_key_hash key_hash in
ok @@ t_contract (t_unit () ) () ok @@ t_contract (t_unit () ) ()
@ -802,7 +807,8 @@ module Typer = struct
now ; now ;
slice ; slice ;
address ; address ;
implicit_account ; self_address ;
implicit_account ;
assertion ; assertion ;
list_cons ; list_cons ;
] ]
@ -874,6 +880,7 @@ module Compiler = struct
("BALANCE" , simple_constant @@ prim I_BALANCE) ; ("BALANCE" , simple_constant @@ prim I_BALANCE) ;
("AMOUNT" , simple_constant @@ prim I_AMOUNT) ; ("AMOUNT" , simple_constant @@ prim I_AMOUNT) ;
("ADDRESS" , simple_unary @@ prim I_ADDRESS) ; ("ADDRESS" , simple_unary @@ prim I_ADDRESS) ;
("SELF_ADDRESS", simple_constant @@ (seq [prim I_SELF ; prim I_ADDRESS])) ;
("IMPLICIT_CONTRACT", simple_unary @@ prim I_IMPLICIT_ACCOUNT) ; ("IMPLICIT_CONTRACT", simple_unary @@ prim I_IMPLICIT_ACCOUNT) ;
("NOW" , simple_constant @@ prim I_NOW) ; ("NOW" , simple_constant @@ prim I_NOW) ;
("CALL" , simple_ternary @@ prim I_TRANSFER_TOKENS) ; ("CALL" , simple_ternary @@ prim I_TRANSFER_TOKENS) ;

View File

@ -0,0 +1 @@
function main (const p: unit) : address is self_address

View File

@ -0,0 +1 @@
let main (p: unit) : address = Current.self_address

View File

@ -1241,6 +1241,14 @@ let address_mligo () : unit result =
let%bind _ = mtype_file "./contracts/address.mligo" in let%bind _ = mtype_file "./contracts/address.mligo" in
ok () ok ()
let self_address () : unit result =
let%bind _ = type_file "./contracts/self_address.ligo" in
ok ()
let self_address_mligo () : unit result =
let%bind _ = mtype_file "./contracts/self_address.mligo" in
ok ()
let implicit_account () : unit result = let implicit_account () : unit result =
let%bind _ = type_file "./contracts/implicit_account.ligo" in let%bind _ = type_file "./contracts/implicit_account.ligo" in
ok () ok ()
@ -1416,6 +1424,8 @@ let main = test_suite "Integration (End to End)" [
test "balance constant (mligo)" balance_constant_mligo ; test "balance constant (mligo)" balance_constant_mligo ;
test "address" address ; test "address" address ;
test "address_mligo" address_mligo ; test "address_mligo" address_mligo ;
test "self address" self_address ;
test "self address (mligo)" self_address_mligo ;
test "implicit account" implicit_account ; test "implicit account" implicit_account ;
test "implicit account (mligo)" implicit_account_mligo ; test "implicit account (mligo)" implicit_account_mligo ;
test "is_nat" is_nat ; test "is_nat" is_nat ;