Less dippy constants

This commit is contained in:
Tom Jack 2020-01-11 19:44:10 -06:00 committed by Pierre-Emmanuel Wulfman
parent 0895467f74
commit 710f1699a6
2 changed files with 656 additions and 490 deletions

View File

@ -7,16 +7,16 @@ let bad_contract basename =
let%expect_test _ =
run_ligo_good [ "measure-contract" ; contract "coase.ligo" ; "main" ] ;
[%expect {| 1874 bytes |}] ;
[%expect {| 1842 bytes |}] ;
run_ligo_good [ "measure-contract" ; contract "multisig.ligo" ; "main" ] ;
[%expect {| 1169 bytes |}] ;
[%expect {| 1145 bytes |}] ;
run_ligo_good [ "measure-contract" ; contract "multisig-v2.ligo" ; "main" ] ;
[%expect {| 2862 bytes |}] ;
[%expect {| 2795 bytes |}] ;
run_ligo_good [ "measure-contract" ; contract "vote.mligo" ; "main" ] ;
[%expect {| 617 bytes |}] ;
[%expect {| 626 bytes |}] ;
run_ligo_good [ "compile-parameter" ; contract "coase.ligo" ; "main" ; "Buy_single (record card_to_buy = 1n end)" ] ;
[%expect {| (Left (Left 1)) |}] ;
@ -59,7 +59,7 @@ let%expect_test _ =
let%expect_test _ =
run_ligo_good [ "compile-contract" ; contract "coase.ligo" ; "main" ] ;
[%expect {|
{ parameter
{ parameter
(or (or (nat %buy_single) (nat %sell_single))
(pair %transfer_single (nat %card_to_transfer) (address %destination))) ;
storage
@ -74,24 +74,33 @@ let%expect_test _ =
IF_LEFT
{ DUP ;
IF_LEFT
{ DUP ;
DIP { DIP 2 { DUP } ; DIG 2 } ;
{ DIP 2 { DUP } ;
DIG 2 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DUP ;
CAR ;
DIP { DUP } ;
SWAP ;
CDR ;
DIP { DUP } ;
SWAP ;
DIP { DUP ; CAR ; CAR } ;
DUP ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
GET ;
IF_NONE
{ PUSH string "buy_single: No card pattern." ; FAILWITH }
{ DUP ; DIP { DROP } } ;
DUP ;
PUSH nat 1 ;
SWAP ;
CDR ;
ADD ;
DIP { DUP } ;
SWAP ;
CAR ;
DIP { DUP ; CDR ; PUSH nat 1 ; ADD } ;
MUL ;
DUP ;
AMOUNT ;
@ -101,34 +110,44 @@ let%expect_test _ =
IF { PUSH string "Not enough money" ; FAILWITH } { PUSH unit Unit } ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 3 { DUP } ;
DIG 3 ;
CDR ;
PUSH nat 1 ;
DIP 4 { DUP } ;
DIG 4 ;
CDR ;
ADD ;
SWAP ;
CAR ;
PAIR ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 6 { DUP } ;
DIG 6 ;
DIP { DIP { DUP } ;
DIP 5 { DUP } ;
DIG 5 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 8 { DUP } ;
DIG 8 ;
SWAP ;
SOME ;
DIP { DIP 5 { DUP } ; DIG 5 ; CAR ; CAR } } ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; CDR } ;
PAIR ;
PAIR ;
DUP ;
CAR ;
CDR ;
DIP { DIP 6 { DUP } ;
DIG 6 ;
DIP 7 { DUP } ;
DIG 7 ;
SENDER ;
PAIR ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
SWAP ;
SOME ;
DIP { DUP ; CAR ; CDR } } ;
SWAP ;
UPDATE ;
DIP { DUP } ;
SWAP ;
@ -139,10 +158,10 @@ let%expect_test _ =
PAIR ;
PAIR ;
DUP ;
DIP { DUP } ;
SWAP ;
CDR ;
PUSH nat 1 ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
ADD ;
SWAP ;
CAR ;
@ -151,43 +170,49 @@ let%expect_test _ =
NIL operation ;
PAIR ;
DIP { DROP 12 } }
{ DUP ;
DIP { DIP 2 { DUP } ; DIG 2 } ;
{ DIP 2 { DUP } ;
DIG 2 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DUP ;
CAR ;
DIP { DUP } ;
SWAP ;
CDR ;
DIP { DUP } ;
SWAP ;
DIP { DUP ; CAR ; CDR } ;
DUP ;
CAR ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
GET ;
IF_NONE
{ PUSH string "sell_single: No card." ; FAILWITH }
{ DUP ; DIP { DROP } } ;
DUP ;
CAR ;
SENDER ;
SWAP ;
CAR ;
COMPARE ;
NEQ ;
IF { PUSH string "This card doesn't belong to you" ; FAILWITH }
{ PUSH unit Unit } ;
DIP { DUP } ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
DIP { DIP 2 { DUP } ; DIG 2 ; CAR ; CAR } ;
GET ;
IF_NONE
{ PUSH string "sell_single: No card pattern." ; FAILWITH }
{ DUP ; DIP { DROP } } ;
DUP ;
DIP { DUP } ;
SWAP ;
CDR ;
PUSH nat 1 ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
SUB ;
ABS ;
SWAP ;
@ -195,54 +220,68 @@ let%expect_test _ =
PAIR ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 5 { DUP } ;
DIG 5 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 6 { DUP } ;
DIG 6 ;
CDR ;
DIP { DIP { DUP } ;
SWAP ;
SOME ;
DIP { DIP 5 { DUP } ; DIG 5 ; CAR ; CAR } } ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; CDR } ;
PAIR ;
PAIR ;
DIP 6 { DUP } ;
DIG 6 ;
DIP { DUP ; CAR ; CDR ; NONE (pair (address %card_owner) (nat %card_pattern)) } ;
DUP ;
CAR ;
CDR ;
DIP 7 { DUP } ;
DIG 7 ;
NONE (pair (address %card_owner) (nat %card_pattern)) ;
SWAP ;
UPDATE ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
DIP 3 { DUP } ;
DIG 3 ;
CAR ;
DIP { DIP 2 { DUP } ; DIG 2 ; CDR } ;
MUL ;
SENDER ;
CONTRACT unit ;
IF_NONE
{ PUSH string "sell_single: No contract." ; FAILWITH }
{ DUP ; DIP { DROP } } ;
DIP { DUP } ;
SWAP ;
DIP { DUP } ;
DUP ;
DIP 2 { DUP } ;
DIG 2 ;
UNIT ;
TRANSFER_TOKENS ;
DUP ;
NIL operation ;
SWAP ;
CONS ;
DUP ;
DIP { DIP 5 { DUP } ;
DIP 5 { DUP } ;
DIG 5 ;
DIP 5 { DUP } ;
DIG 5 ;
DIP { DUP ; CDR ; SWAP ; CAR ; CAR } ;
SWAP ;
PAIR ;
PAIR } ;
PAIR ;
DIP { DUP } ;
SWAP ;
PAIR ;
DIP { DROP 14 } } ;
DIP { DROP } }
{ DUP ;
DIP { DIP { DUP } ; SWAP } ;
{ DIP { DUP } ;
SWAP ;
DIP { DUP } ;
SWAP ;
PAIR ;
DUP ;
CAR ;
@ -252,38 +291,41 @@ let%expect_test _ =
DUP ;
CAR ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DIP 3 { DUP } ;
DIG 3 ;
CAR ;
DIP { DUP } ;
GET ;
IF_NONE
{ PUSH string "transfer_single: No card." ; FAILWITH }
{ DUP ; DIP { DROP } } ;
DUP ;
CAR ;
SENDER ;
SWAP ;
CAR ;
COMPARE ;
NEQ ;
IF { PUSH string "This card doesn't belong to you" ; FAILWITH }
{ PUSH unit Unit } ;
DIP 3 { DUP } ;
DIG 3 ;
DIP 5 { DUP } ;
DIG 5 ;
CAR ;
DIP { DIP 2 { DUP } ;
DIG 2 ;
DIP 6 { DUP } ;
DIG 6 ;
DIP 3 { DUP } ;
DIG 3 ;
DIP 3 { DUP } ;
DIG 3 ;
DIP 7 { DUP } ;
DIG 7 ;
CDR ;
SWAP ;
CDR ;
SWAP ;
PAIR ;
DIP 7 { DUP } ;
DIG 7 ;
CAR ;
SWAP ;
SOME ;
DIP { DIP 3 { DUP } ; DIG 3 } } ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; CAR } ;
SWAP ;
@ -297,7 +339,7 @@ let%expect_test _ =
let%expect_test _ =
run_ligo_good [ "compile-contract" ; contract "multisig.ligo" ; "main" ] ;
[%expect {|
{ parameter
{ parameter
(pair (pair (nat %counter) (lambda %message unit (list operation)))
(list %signatures (pair key_hash signature))) ;
storage
@ -311,24 +353,36 @@ let%expect_test _ =
SWAP ;
CAR ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
DIP { DUP } ;
SWAP ;
CAR ;
CDR ;
DIP 3 { DUP } ;
DIG 3 ;
CAR ;
CAR ;
DIP { DIP { DUP } ; SWAP ; CAR ; CDR } ;
COMPARE ;
NEQ ;
IF { PUSH string "Counters does not match" ; FAILWITH }
{ DUP ;
DIP { DIP 2 { DUP } ; DIG 2 ; CAR ; CAR } ;
{ CHAIN_ID ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
CAR ;
PAIR ;
DIP 3 { DUP } ;
DIG 3 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
PAIR ;
DIP { DIP { DUP } ; SWAP ; CDR ; CAR ; CHAIN_ID ; SWAP ; PAIR } ;
PAIR ;
PACK ;
DIP 3 { DUP } ;
DIG 3 ;
CDR ;
DIP { DIP 2 { DUP } ; DIG 2 ; CAR ; CAR ; PUSH nat 0 ; SWAP ; PAIR } ;
DIP { PUSH nat 0 ; DIP 3 { DUP } ; DIG 3 ; CAR ; CAR ; PAIR } ;
ITER { SWAP ;
PAIR ;
DUP ;
@ -341,25 +395,32 @@ let%expect_test _ =
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
DIP { DUP } ;
SWAP ;
DIP { DIP 2 { DUP } ; DIG 2 } ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 2 { DUP } ;
DIG 2 ;
PAIR ;
DIP 2 { DUP } ;
DIG 2 ;
IF_CONS
{ DIP 3 { DUP } ;
DIG 3 ;
{ DUP ;
HASH_KEY ;
DIP 4 { DUP } ;
DIG 4 ;
CAR ;
DIP { DUP ; HASH_KEY } ;
COMPARE ;
EQ ;
IF { DUP ;
DIP { DIP 3 { DUP } ; DIG 3 ; CDR ; DIP { DIP 7 { DUP } ; DIG 7 } } ;
IF { DIP 7 { DUP } ;
DIG 7 ;
DIP 4 { DUP } ;
DIG 4 ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
CHECK_SIGNATURE ;
IF { DIP 5 { DUP } ;
DIG 5 ;
PUSH nat 1 ;
IF { PUSH nat 1 ;
DIP 6 { DUP } ;
DIG 6 ;
ADD ;
DIP 6 { DUP } ;
DIG 6 ;
@ -403,19 +464,23 @@ let%expect_test _ =
PAIR ;
CAR ;
DIP { DROP 6 } } ;
DUP ;
DIP 3 { DUP } ;
DIG 3 ;
CDR ;
CDR ;
DIP { DUP } ;
SWAP ;
CDR ;
DIP { DIP 3 { DUP } ; DIG 3 ; CDR ; CDR } ;
COMPARE ;
LT ;
IF { PUSH string "Not enough signatures passed the check" ; FAILWITH }
{ DIP 3 { DUP } ;
DIG 3 ;
DIP 4 { DUP } ;
DIG 4 ;
PUSH nat 1 ;
DIP 5 { DUP } ;
DIG 5 ;
CAR ;
CDR ;
PUSH nat 1 ;
ADD ;
DIP { DUP ; CDR ; SWAP ; CAR ; CAR } ;
SWAP ;
@ -431,12 +496,12 @@ let%expect_test _ =
DIP { DUP } ;
SWAP ;
DIP { DROP 4 } } ;
DUP ;
UNIT ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 3 { DUP } ;
DIG 3 ;
SWAP ;
EXEC ;
DIP { DUP } ;
PAIR ;
DIP { DROP 5 } } } |} ]
@ -460,8 +525,10 @@ let%expect_test _ =
{ DUP ;
IF_LEFT
{ DIP 2 { DUP } ; DIG 2 ; NIL operation ; PAIR ; DIP { DROP } }
{ DUP ;
DIP { DIP 2 { DUP } ; DIG 2 } ;
{ DIP 2 { DUP } ;
DIG 2 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DUP ;
CDR ;
@ -478,20 +545,31 @@ let%expect_test _ =
CAR ;
DUP ;
PACK ;
DUP ;
DIP 3 { DUP } ;
DIG 3 ;
CAR ;
CAR ;
CDR ;
DIP { DUP } ;
SWAP ;
SIZE ;
DIP { DIP 3 { DUP } ; DIG 3 ; CAR ; CAR ; CDR } ;
COMPARE ;
GT ;
IF { PUSH string "Message size exceed maximum limit" ; FAILWITH }
{ PUSH unit Unit } ;
EMPTY_SET address ;
DUP ;
DIP { DIP 5 { DUP } ; DIG 5 } ;
DIP 5 { DUP } ;
DIG 5 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DIP 3 { DUP } ;
DIG 3 ;
DIP { DIP 6 { DUP } ; DIG 6 ; CAR ; CDR ; CDR } ;
DIP 6 { DUP } ;
DIG 6 ;
CAR ;
CDR ;
CDR ;
DIP 4 { DUP } ;
DIG 4 ;
GET ;
IF_NONE
{ DIP 6 { DUP } ;
@ -501,13 +579,17 @@ let%expect_test _ =
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 9 { DUP } ;
DIG 9 ;
CDR ;
CAR ;
CAR ;
SENDER ;
GET ;
IF_NONE { PUSH string "MAP FIND" ; FAILWITH } {} ;
PUSH nat 1 ;
ADD ;
SOME ;
DIP { DIP 7 { DUP } ; DIG 7 ; CDR ; CAR ; CAR } ;
SENDER ;
UPDATE ;
DIP { DUP ; CAR ; SWAP ; CDR ; DUP ; CDR ; SWAP ; CAR ; CDR } ;
@ -542,13 +624,17 @@ let%expect_test _ =
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 10 { DUP } ;
DIG 10 ;
CDR ;
CAR ;
CAR ;
SENDER ;
GET ;
IF_NONE { PUSH string "MAP FIND" ; FAILWITH } {} ;
PUSH nat 1 ;
ADD ;
SOME ;
DIP { DIP 8 { DUP } ; DIG 8 ; CDR ; CAR ; CAR } ;
SENDER ;
UPDATE ;
DIP { DUP ; CAR ; SWAP ; CDR ; DUP ; CDR ; SWAP ; CAR ; CDR } ;
@ -590,27 +676,43 @@ let%expect_test _ =
SENDER ;
GET ;
IF_NONE { PUSH string "MAP FIND" ; FAILWITH } {} ;
DUP ;
DIP { DIP { DUP } ; SWAP ; CAR ; CDR ; CAR } ;
DIP { DUP } ;
SWAP ;
CAR ;
CDR ;
CAR ;
DIP { DUP } ;
SWAP ;
COMPARE ;
GT ;
IF { PUSH string "Maximum number of proposal reached" ; FAILWITH }
{ PUSH unit Unit } ;
NIL operation ;
DUP ;
DIP { DIP 3 { DUP } ; DIG 3 } ;
DIP 3 { DUP } ;
DIG 3 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DIP 5 { DUP } ;
DIG 5 ;
DIP 4 { DUP } ;
DIG 4 ;
CDR ;
CDR ;
DIP 6 { DUP } ;
DIG 6 ;
SIZE ;
DIP { DIP 4 { DUP } ; DIG 4 ; CDR ; CDR } ;
COMPARE ;
GE ;
IF { DIP 4 { DUP } ;
DIG 4 ;
DIP 11 { DUP } ;
DIG 11 ;
DIP { DIP 5 { DUP } ; DIG 5 ; CAR ; CDR ; CDR ; NONE (set address) } ;
DIP 5 { DUP } ;
DIG 5 ;
CAR ;
CDR ;
CDR ;
DIP 12 { DUP } ;
DIG 12 ;
NONE (set address) ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; DUP ; CAR ; SWAP ; CDR ; CAR } ;
SWAP ;
@ -628,12 +730,13 @@ let%expect_test _ =
EXEC ;
DIP { DUP } ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 13 { DUP } ;
DIG 13 ;
DIP 3 { DUP } ;
DIG 3 ;
CDR ;
CAR ;
CDR ;
DIP { DIP 13 { DUP } ; DIG 13 } ;
CONCAT ;
SHA256 ;
DIP { DUP ; CAR ; SWAP ; CDR ; DUP ; CDR ; SWAP ; CAR ; CAR } ;
@ -655,23 +758,30 @@ let%expect_test _ =
SWAP ;
CDR ;
CAR ;
DUP ;
DIP { DIP 11 { DUP } ; DIG 11 } ;
DIP 11 { DUP } ;
DIG 11 ;
DIP { DUP } ;
SWAP ;
MEM ;
IF { DIP { DUP } ;
SWAP ;
DIP { DUP } ;
SWAP ;
DIP { DIP 3 { DUP } ;
DIG 3 ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
SWAP ;
DIP 5 { DUP } ;
DIG 5 ;
CDR ;
CDR ;
SUB ;
ABS ;
DIP 3 { DUP } ;
DIG 3 ;
SWAP ;
SOME ;
DIP { DIP 2 { DUP } ; DIG 2 ; CDR ; CAR ; CAR } } ;
SWAP ;
UPDATE ;
DIP { DUP ; CAR ; SWAP ; CDR ; DUP ; CDR ; SWAP ; CAR ; CDR } ;
PAIR ;
@ -717,12 +827,18 @@ let%expect_test _ =
{ DUP ;
DIP 5 { DUP } ;
DIG 5 ;
DIP 12 { DUP } ;
DIG 12 ;
DIP { DIP 7 { DUP } ;
DIG 7 ;
DIP 6 { DUP } ;
DIG 6 ;
CAR ;
CDR ;
CDR ;
DIP 8 { DUP } ;
DIG 8 ;
DIP 14 { DUP } ;
DIG 14 ;
SWAP ;
SOME ;
DIP { DIP 6 { DUP } ; DIG 6 ; CAR ; CDR ; CDR } } ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; DUP ; CAR ; SWAP ; CDR ; CAR } ;
SWAP ;
@ -736,8 +852,10 @@ let%expect_test _ =
DUP ;
DIP { DROP 17 } } ;
DIP { DROP } }
{ DUP ;
DIP { DIP { DUP } ; SWAP } ;
{ DIP { DUP } ;
SWAP ;
DIP { DUP } ;
SWAP ;
PAIR ;
DUP ;
CDR ;
@ -745,8 +863,13 @@ let%expect_test _ =
SWAP ;
CAR ;
PACK ;
DUP ;
DIP { DIP { DUP } ; SWAP ; CAR ; CDR ; CDR } ;
DIP { DUP } ;
SWAP ;
CAR ;
CDR ;
CDR ;
DIP { DUP } ;
SWAP ;
GET ;
IF_NONE
{ DIP { DUP } ; SWAP }
@ -754,10 +877,11 @@ let%expect_test _ =
PUSH bool False ;
SENDER ;
UPDATE ;
DIP { DUP } ;
SWAP ;
DUP ;
SIZE ;
DIP 2 { DUP } ;
DIG 2 ;
SIZE ;
DIP { DUP ; SIZE } ;
COMPARE ;
NEQ ;
IF { DIP 3 { DUP } ;
@ -767,15 +891,18 @@ let%expect_test _ =
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 6 { DUP } ;
DIG 6 ;
CDR ;
CAR ;
CAR ;
SENDER ;
GET ;
IF_NONE { PUSH string "MAP FIND" ; FAILWITH } {} ;
PUSH nat 1 ;
SWAP ;
SUB ;
ABS ;
SOME ;
DIP { DIP 4 { DUP } ; DIG 4 ; CDR ; CAR ; CAR } ;
SENDER ;
UPDATE ;
DIP { DUP ; CAR ; SWAP ; CDR ; DUP ; CDR ; SWAP ; CAR ; CDR } ;
@ -789,17 +916,22 @@ let%expect_test _ =
SWAP ;
DIP { DROP 2 } }
{ DIP 3 { DUP } ; DIG 3 } ;
DIP { DUP } ;
SWAP ;
SIZE ;
PUSH nat 0 ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
SIZE ;
COMPARE ;
EQ ;
IF { DUP ;
DIP 4 { DUP } ;
DIG 4 ;
DIP { DIP { DUP } ; SWAP ; CAR ; CDR ; CDR ; NONE (set address) } ;
DIP { DUP } ;
SWAP ;
CAR ;
CDR ;
CDR ;
DIP 5 { DUP } ;
DIG 5 ;
NONE (set address) ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; DUP ; CAR ; SWAP ; CDR ; CAR } ;
SWAP ;
@ -815,12 +947,18 @@ let%expect_test _ =
{ DUP ;
DIP { DUP } ;
SWAP ;
DIP 5 { DUP } ;
DIG 5 ;
DIP { DIP 3 { DUP } ;
DIG 3 ;
DIP 2 { DUP } ;
DIG 2 ;
CAR ;
CDR ;
CDR ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 7 { DUP } ;
DIG 7 ;
SWAP ;
SOME ;
DIP { DIP 2 { DUP } ; DIG 2 ; CAR ; CDR ; CDR } } ;
SWAP ;
UPDATE ;
DIP { DUP ; CDR ; SWAP ; CAR ; DUP ; CAR ; SWAP ; CDR ; CAR } ;
SWAP ;
@ -845,7 +983,7 @@ let%expect_test _ =
let%expect_test _ =
run_ligo_good [ "compile-contract" ; contract "vote.mligo" ; "main" ] ;
[%expect {|
{ parameter
{ parameter
(or (pair %reset (pair (timestamp %finish_time) (timestamp %start_time)) (string %title))
(or %vote (unit %nay) (unit %yea))) ;
storage
@ -855,21 +993,33 @@ let%expect_test _ =
code { DUP ;
CAR ;
IF_LEFT
{ DUP ;
CAR ;
CAR ;
PUSH nat 0 ;
{ PUSH nat 0 ;
EMPTY_SET address ;
PAIR ;
DIP { DUP } ;
SWAP ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
CAR ;
CDR ;
PAIR ;
PUSH nat 0 ;
DIP 3 { DUP } ;
DIG 3 ;
CAR ;
CAR ;
PAIR ;
DIP { DUP ; CAR ; CDR ; DIP { DUP ; CDR } ; PAIR } ;
PAIR ;
DIP { PUSH nat 0 ; EMPTY_SET address ; PAIR } ;
PAIR ;
NIL operation ;
PAIR ;
DIP { DROP } }
{ DUP ;
DIP { DIP { DUP } ; SWAP ; CDR } ;
{ DIP { DUP } ;
SWAP ;
CDR ;
DIP { DUP } ;
SWAP ;
PAIR ;
DUP ;
CDR ;
@ -881,12 +1031,12 @@ let%expect_test _ =
IF_LEFT
{ DIP 3 { DUP } ;
DIG 3 ;
DIP 4 { DUP } ;
DIG 4 ;
PUSH nat 1 ;
DIP 5 { DUP } ;
DIG 5 ;
CAR ;
CAR ;
CDR ;
PUSH nat 1 ;
ADD ;
DIP { DUP ; CDR ; SWAP ; CAR ; DUP ; CDR ; SWAP ; CAR ; CAR } ;
SWAP ;
@ -896,11 +1046,11 @@ let%expect_test _ =
DIP { DROP } }
{ DIP 3 { DUP } ;
DIG 3 ;
DIP 4 { DUP } ;
DIG 4 ;
CDR ;
CDR ;
PUSH nat 1 ;
DIP 5 { DUP } ;
DIG 5 ;
CDR ;
CDR ;
ADD ;
DIP { DUP ; CAR ; SWAP ; CDR ; CAR } ;
SWAP ;
@ -909,9 +1059,14 @@ let%expect_test _ =
PAIR ;
DIP { DROP } } ;
DUP ;
DIP 2 { DUP } ;
DIG 2 ;
DIP { DIP { DUP } ; SWAP ; CDR ; CAR ; PUSH bool True } ;
DIP { DUP } ;
SWAP ;
CDR ;
CAR ;
DIP 3 { DUP } ;
DIG 3 ;
PUSH bool True ;
SWAP ;
UPDATE ;
DIP { DUP ; CAR ; SWAP ; CDR ; CDR } ;
PAIR ;
@ -1134,12 +1289,14 @@ ligo: in file "create_contract_var.mligo", line 6, character 35 to line 10, char
storage string ;
code { PUSH string "one" ; NIL operation ; PAIR ; DIP { DROP } } } ;
PAIR ;
DUP ;
CAR ;
NIL operation ;
DIP { DUP } ;
SWAP ;
CDR ;
NIL operation ;
DIP 2 { DUP } ;
DIG 2 ;
CAR ;
CONS ;
DIP { DIP { DUP } ; SWAP ; CDR } ;
PAIR ;
DIP { DROP 2 } } } |}];
@ -1147,10 +1304,12 @@ ligo: in file "create_contract_var.mligo", line 6, character 35 to line 10, char
[%expect {|
{ parameter int ;
storage (pair (pair int string) (pair nat bool)) ;
code { PUSH string "2" ;
code { PUSH bool False ;
PUSH nat 2 ;
PAIR ;
PUSH string "2" ;
PUSH int 2 ;
PAIR ;
DIP { PUSH bool False ; PUSH nat 2 ; PAIR } ;
PAIR ;
NIL operation ;
PAIR ;
@ -1232,11 +1391,13 @@ let%expect_test _ =
PUSH mutez 300000000 ;
PUSH int 2 ;
TRANSFER_TOKENS ;
DUP ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
NIL operation ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
CONS ;
DIP { DIP 2 { DUP } ; DIG 2 ; CDR } ;
PAIR ;
DIP { DROP 3 } } } |}] ;
@ -1249,11 +1410,13 @@ let%expect_test _ =
PUSH mutez 300000000 ;
PUSH int 2 ;
TRANSFER_TOKENS ;
DUP ;
DIP 2 { DUP } ;
DIG 2 ;
CDR ;
NIL operation ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
CONS ;
DIP { DIP 2 { DUP } ; DIG 2 ; CDR } ;
PAIR ;
DIP { DROP 3 } } } |}] ;

View File

@ -274,15 +274,18 @@ and translate_expression (expr:expression) (env:environment) : michelson result
)
| E_constant{cons_name=str;arguments= lst} ->
let module L = Logger.Stateful() in
let%bind pre_code =
let aux code expr =
let%bind (pre_code, _env) =
let aux (code, env) expr =
let%bind expr_code = translate_expression expr env in
L.log @@ Format.asprintf "\n%a -> %a in %a\n"
PP.expression expr
Michelson.pp expr_code
PP.environment env ;
ok (seq [ expr_code ; dip code ]) in
bind_fold_right_list aux (seq []) lst in
let env = Environment.add (Var.fresh (), expr.type_value) env in
let code = code @ [expr_code] in
ok (code, env) in
bind_fold_right_list aux ([], env) lst in
let pre_code = seq pre_code in
let%bind predicate = get_operator str ty lst in
let%bind code = match (predicate, List.length lst) with
| Constant c, 0 -> ok @@ seq [