Don't dip for vars after the second

This commit is contained in:
Tom Jack 2020-02-03 17:33:47 -06:00 committed by Pierre-Emmanuel Wulfman
parent b05e7ef613
commit 94c35e15dd
2 changed files with 579 additions and 481 deletions

View File

@ -7,16 +7,16 @@ let bad_contract basename =
let%expect_test _ =
run_ligo_good [ "measure-contract" ; contract "coase.ligo" ; "main" ] ;
[%expect {| 1842 bytes |}] ;
[%expect {| 1682 bytes |}] ;
run_ligo_good [ "measure-contract" ; contract "multisig.ligo" ; "main" ] ;
[%expect {| 1138 bytes |}] ;
[%expect {| 1003 bytes |}] ;
run_ligo_good [ "measure-contract" ; contract "multisig-v2.ligo" ; "main" ] ;
[%expect {| 2797 bytes |}] ;
[%expect {| 2522 bytes |}] ;
run_ligo_good [ "measure-contract" ; contract "vote.mligo" ; "main" ] ;
[%expect {| 626 bytes |}] ;
[%expect {| 586 bytes |}] ;
run_ligo_good [ "compile-parameter" ; contract "coase.ligo" ; "main" ; "Buy_single (record card_to_buy = 1n end)" ] ;
[%expect {| (Left (Left 1)) |}] ;
@ -74,8 +74,9 @@ let%expect_test _ =
IF_LEFT
{ DUP ;
IF_LEFT
{ DIP 2 { DUP } ;
DIG 2 ;
{ DIG 2 ;
DUP ;
DUG 3 ;
DIP { DUP } ;
SWAP ;
PAIR ;
@ -87,8 +88,9 @@ let%expect_test _ =
DUP ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
GET ;
IF_NONE
{ PUSH string "buy_single: No card pattern." ; FAILWITH }
@ -108,26 +110,32 @@ let%expect_test _ =
COMPARE ;
GT ;
IF { PUSH string "Not enough money" ; FAILWITH } { PUSH unit Unit } ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
PUSH nat 1 ;
DIP 4 { DUP } ;
DIG 4 ;
DUP ;
DUG 5 ;
CDR ;
ADD ;
SWAP ;
CAR ;
PAIR ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 5 { DUP } ;
DUP ;
DUG 5 ;
DIG 5 ;
DUP ;
DUG 6 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 8 { DUP } ;
DUP ;
DUG 3 ;
DIG 8 ;
DUP ;
DUG 9 ;
SWAP ;
SOME ;
SWAP ;
@ -138,12 +146,14 @@ let%expect_test _ =
DUP ;
CAR ;
CDR ;
DIP 7 { DUP } ;
DIG 7 ;
DUP ;
DUG 8 ;
SENDER ;
PAIR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
SWAP ;
SOME ;
@ -159,8 +169,9 @@ let%expect_test _ =
PAIR ;
DUP ;
PUSH nat 1 ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
ADD ;
SWAP ;
@ -170,8 +181,9 @@ let%expect_test _ =
NIL operation ;
PAIR ;
DIP { DROP 12 } }
{ DIP 2 { DUP } ;
DIG 2 ;
{ DIG 2 ;
DUP ;
DUG 3 ;
DIP { DUP } ;
SWAP ;
PAIR ;
@ -183,8 +195,9 @@ let%expect_test _ =
DUP ;
CAR ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
GET ;
IF_NONE
{ PUSH string "sell_single: No card." ; FAILWITH }
@ -197,12 +210,14 @@ let%expect_test _ =
NEQ ;
IF { PUSH string "This card doesn't belong to you" ; FAILWITH }
{ PUSH unit Unit } ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
GET ;
IF_NONE
@ -210,24 +225,29 @@ let%expect_test _ =
{ DUP ; DIP { DROP } } ;
DUP ;
PUSH nat 1 ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
SUB ;
ABS ;
SWAP ;
CAR ;
PAIR ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 5 { DUP } ;
DUP ;
DUG 5 ;
DIG 5 ;
DUP ;
DUG 6 ;
CAR ;
CAR ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 6 { DUP } ;
DUP ;
DUG 3 ;
DIG 6 ;
DUP ;
DUG 7 ;
CDR ;
SWAP ;
SOME ;
@ -239,16 +259,19 @@ let%expect_test _ =
DUP ;
CAR ;
CDR ;
DIP 7 { DUP } ;
DIG 7 ;
DUP ;
DUG 8 ;
NONE (pair (address %card_owner) (nat %card_pattern)) ;
SWAP ;
UPDATE ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
CAR ;
MUL ;
SENDER ;
@ -257,18 +280,21 @@ let%expect_test _ =
{ PUSH string "sell_single: No contract." ; FAILWITH }
{ DUP ; DIP { DROP } } ;
DUP ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
UNIT ;
TRANSFER_TOKENS ;
DUP ;
NIL operation ;
SWAP ;
CONS ;
DIP 5 { DUP } ;
DIG 5 ;
DIP 5 { DUP } ;
DUP ;
DUG 6 ;
DIG 5 ;
DUP ;
DUG 6 ;
DIP { DUP ; CDR ; SWAP ; CAR ; CAR } ;
SWAP ;
PAIR ;
@ -292,8 +318,9 @@ let%expect_test _ =
CAR ;
CDR ;
DUP ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
CAR ;
GET ;
IF_NONE
@ -307,21 +334,26 @@ let%expect_test _ =
NEQ ;
IF { PUSH string "This card doesn't belong to you" ; FAILWITH }
{ PUSH unit Unit } ;
DIP 3 { DUP } ;
DIG 3 ;
DIP 3 { DUP } ;
DUP ;
DUG 4 ;
DIG 3 ;
DIP 3 { DUP } ;
DUP ;
DUG 4 ;
DIG 3 ;
DIP 7 { DUP } ;
DUP ;
DUG 4 ;
DIG 7 ;
DUP ;
DUG 8 ;
CDR ;
SWAP ;
CDR ;
SWAP ;
PAIR ;
DIP 7 { DUP } ;
DIG 7 ;
DUP ;
DUG 8 ;
CAR ;
SWAP ;
SOME ;
@ -339,7 +371,7 @@ let%expect_test _ =
let%expect_test _ =
run_ligo_good [ "compile-contract" ; contract "multisig-v2.ligo" ; "main" ] ;
[%expect {|
{ parameter
{ parameter
(or (or (unit %default) (lambda %send bytes (list operation)))
(lambda %withdraw bytes (list operation))) ;
storage
@ -355,9 +387,10 @@ let%expect_test _ =
IF_LEFT
{ DUP ;
IF_LEFT
{ DIP 2 { DUP } ; DIG 2 ; NIL operation ; PAIR ; DIP { DROP } }
{ DIP 2 { DUP } ;
DIG 2 ;
{ DIG 2 ; DUP ; DUG 3 ; NIL operation ; PAIR ; DIP { DROP } }
{ DIG 2 ;
DUP ;
DUG 3 ;
DIP { DUP } ;
SWAP ;
PAIR ;
@ -371,13 +404,15 @@ let%expect_test _ =
MEM ;
NOT ;
IF { PUSH string "Unauthorized address" ; FAILWITH } { PUSH unit Unit } ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CAR ;
DUP ;
PACK ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
CAR ;
CAR ;
CDR ;
@ -389,30 +424,36 @@ let%expect_test _ =
IF { PUSH string "Message size exceed maximum limit" ; FAILWITH }
{ PUSH unit Unit } ;
EMPTY_SET address ;
DIP 5 { DUP } ;
DIG 5 ;
DUP ;
DUG 6 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DIP 6 { DUP } ;
DIG 6 ;
DUP ;
DUG 7 ;
CAR ;
CDR ;
CDR ;
DIP 4 { DUP } ;
DIG 4 ;
DUP ;
DUG 5 ;
GET ;
IF_NONE
{ DIP 6 { DUP } ;
DIG 6 ;
DIP 7 { DUP } ;
{ DIG 6 ;
DUP ;
DUG 7 ;
DIG 7 ;
DUP ;
DUG 8 ;
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 9 { DUP } ;
DIG 9 ;
DUP ;
DUG 10 ;
CDR ;
CAR ;
CAR ;
@ -432,10 +473,12 @@ let%expect_test _ =
PUSH bool True ;
SENDER ;
UPDATE ;
DIP 2 { DUP } ;
DIG 2 ;
DIP 2 { DUP } ;
DUP ;
DUG 3 ;
DIG 2 ;
DUP ;
DUG 3 ;
SWAP ;
CAR ;
PAIR ;
@ -447,17 +490,20 @@ let%expect_test _ =
{ DUP ;
SENDER ;
MEM ;
IF { DIP 7 { DUP } ; DIG 7 }
{ DIP 7 { DUP } ;
DIG 7 ;
DIP 8 { DUP } ;
IF { DIG 7 ; DUP ; DUG 8 }
{ DIG 7 ;
DUP ;
DUG 8 ;
DIG 8 ;
DUP ;
DUG 9 ;
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 10 { DUP } ;
DIG 10 ;
DUP ;
DUG 11 ;
CDR ;
CAR ;
CAR ;
@ -473,8 +519,9 @@ let%expect_test _ =
PAIR ;
SWAP ;
PAIR ;
DIP 8 { DUP } ;
DIG 8 ;
DUP ;
DUG 9 ;
DIP { DUP } ;
SWAP ;
DIP { DROP 2 } } ;
@ -483,10 +530,12 @@ let%expect_test _ =
PUSH bool True ;
SENDER ;
UPDATE ;
DIP 3 { DUP } ;
DIG 3 ;
DIP 2 { DUP } ;
DUP ;
DUG 4 ;
DIG 2 ;
DUP ;
DUG 3 ;
SWAP ;
CAR ;
PAIR ;
@ -519,29 +568,35 @@ let%expect_test _ =
IF { PUSH string "Maximum number of proposal reached" ; FAILWITH }
{ PUSH unit Unit } ;
NIL operation ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
DIP { DUP } ;
SWAP ;
PAIR ;
DIP 4 { DUP } ;
DIG 4 ;
DUP ;
DUG 5 ;
CDR ;
CDR ;
DIP 6 { DUP } ;
DIG 6 ;
DUP ;
DUG 7 ;
SIZE ;
COMPARE ;
GE ;
IF { DIP 4 { DUP } ;
DIG 4 ;
DIP 5 { DUP } ;
IF { DIG 4 ;
DUP ;
DUG 5 ;
DIG 5 ;
DUP ;
DUG 6 ;
CAR ;
CDR ;
CDR ;
DIP 12 { DUP } ;
DIG 12 ;
DUP ;
DUG 13 ;
NONE (set address) ;
SWAP ;
UPDATE ;
@ -555,16 +610,19 @@ let%expect_test _ =
CDR ;
CAR ;
CDR ;
DIP 13 { DUP } ;
DIG 13 ;
DUP ;
DUG 14 ;
SWAP ;
EXEC ;
DIP { DUP } ;
SWAP ;
DIP 13 { DUP } ;
DIG 13 ;
DIP 3 { DUP } ;
DUP ;
DUG 14 ;
DIG 3 ;
DUP ;
DUG 4 ;
CDR ;
CAR ;
CDR ;
@ -590,27 +648,31 @@ let%expect_test _ =
SWAP ;
CDR ;
CAR ;
DIP 11 { DUP } ;
DIG 11 ;
DUP ;
DUG 12 ;
DIP { DUP } ;
SWAP ;
MEM ;
IF { DIP { DUP } ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 5 { DUP } ;
DIG 5 ;
DUP ;
DUG 6 ;
CDR ;
CDR ;
SUB ;
ABS ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
SWAP ;
SOME ;
SWAP ;
@ -620,35 +682,41 @@ let%expect_test _ =
PAIR ;
SWAP ;
PAIR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
DIP { DUP } ;
SWAP ;
DIP { DROP 2 } }
{ DIP { DUP } ; SWAP } ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
CDR ;
DIP { DUP } ;
SWAP ;
PAIR ;
CAR ;
DIP { DROP 4 } } ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 4 { DUP } ;
DUP ;
DUG 5 ;
DIG 4 ;
DUP ;
DUG 5 ;
SWAP ;
CAR ;
PAIR ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
SWAP ;
CDR ;
SWAP ;
PAIR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
SWAP ;
CAR ;
PAIR ;
@ -657,17 +725,21 @@ let%expect_test _ =
PAIR ;
DIP { DROP 4 } }
{ DUP ;
DIP 5 { DUP } ;
DIG 5 ;
DIP 6 { DUP } ;
DUP ;
DUG 6 ;
DIG 6 ;
DUP ;
DUG 7 ;
CAR ;
CDR ;
CDR ;
DIP 8 { DUP } ;
DIG 8 ;
DIP 14 { DUP } ;
DUP ;
DUG 9 ;
DIG 14 ;
DUP ;
DUG 15 ;
SWAP ;
SOME ;
SWAP ;
@ -711,21 +783,25 @@ let%expect_test _ =
UPDATE ;
DUP ;
SIZE ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
SIZE ;
COMPARE ;
NEQ ;
IF { DIP 3 { DUP } ;
DIG 3 ;
DIP 4 { DUP } ;
IF { DIG 3 ;
DUP ;
DUG 4 ;
DIG 4 ;
DUP ;
DUG 5 ;
CDR ;
CAR ;
CAR ;
PUSH nat 1 ;
DIP 6 { DUP } ;
DIG 6 ;
DUP ;
DUG 7 ;
CDR ;
CAR ;
CAR ;
@ -742,15 +818,17 @@ let%expect_test _ =
PAIR ;
SWAP ;
PAIR ;
DIP 4 { DUP } ;
DIG 4 ;
DUP ;
DUG 5 ;
DIP { DUP } ;
SWAP ;
DIP { DROP 2 } }
{ DIP 3 { DUP } ; DIG 3 } ;
{ DIG 3 ; DUP ; DUG 4 } ;
PUSH nat 0 ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
SIZE ;
COMPARE ;
EQ ;
@ -760,8 +838,9 @@ let%expect_test _ =
CAR ;
CDR ;
CDR ;
DIP 5 { DUP } ;
DIG 5 ;
DUP ;
DUG 6 ;
NONE (set address) ;
SWAP ;
UPDATE ;
@ -779,15 +858,18 @@ let%expect_test _ =
{ DUP ;
DIP { DUP } ;
SWAP ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CAR ;
CDR ;
CDR ;
DIP 4 { DUP } ;
DIG 4 ;
DIP 7 { DUP } ;
DUP ;
DUG 5 ;
DIG 7 ;
DUP ;
DUG 8 ;
SWAP ;
SOME ;
SWAP ;
@ -799,10 +881,12 @@ let%expect_test _ =
PAIR ;
PAIR ;
DIP { DROP } } ;
DIP 5 { DUP } ;
DIG 5 ;
DIP 2 { DUP } ;
DUP ;
DUG 6 ;
DIG 2 ;
DUP ;
DUG 3 ;
DIP { DROP ; DUP } ;
SWAP ;
DIP { DROP 5 } } ;
@ -831,14 +915,16 @@ let%expect_test _ =
DIP { DUP } ;
SWAP ;
CDR ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CAR ;
CDR ;
PAIR ;
PUSH nat 0 ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
CAR ;
CAR ;
PAIR ;
@ -857,15 +943,18 @@ let%expect_test _ =
CDR ;
NOW ;
SENDER ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
CAR ;
IF_LEFT
{ DIP 3 { DUP } ;
DIG 3 ;
{ DIG 3 ;
DUP ;
DUG 4 ;
PUSH nat 1 ;
DIP 5 { DUP } ;
DIG 5 ;
DUP ;
DUG 6 ;
CAR ;
CAR ;
CDR ;
@ -876,11 +965,13 @@ let%expect_test _ =
PAIR ;
PAIR ;
DIP { DROP } }
{ DIP 3 { DUP } ;
DIG 3 ;
{ DIG 3 ;
DUP ;
DUG 4 ;
PUSH nat 1 ;
DIP 5 { DUP } ;
DIG 5 ;
DUP ;
DUG 6 ;
CDR ;
CDR ;
ADD ;
@ -895,8 +986,9 @@ let%expect_test _ =
SWAP ;
CDR ;
CAR ;
DIP 3 { DUP } ;
DIG 3 ;
DUP ;
DUG 4 ;
PUSH bool True ;
SWAP ;
UPDATE ;
@ -1125,8 +1217,9 @@ ligo: in file "create_contract_var.mligo", line 6, character 35 to line 10, char
SWAP ;
CDR ;
NIL operation ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CAR ;
CONS ;
PAIR ;
@ -1223,12 +1316,14 @@ let%expect_test _ =
PUSH mutez 300000000 ;
PUSH int 2 ;
TRANSFER_TOKENS ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
NIL operation ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CONS ;
PAIR ;
DIP { DROP 3 } } } |}] ;
@ -1242,12 +1337,14 @@ let%expect_test _ =
PUSH mutez 300000000 ;
PUSH int 2 ;
TRANSFER_TOKENS ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CDR ;
NIL operation ;
DIP 2 { DUP } ;
DIG 2 ;
DUP ;
DUG 3 ;
CONS ;
PAIR ;
DIP { DROP 3 } } } |}] ;

View File

@ -24,8 +24,9 @@ let get : environment -> expression_variable -> michelson result = fun e s ->
]
in
let aux_dig = fun n -> seq [
dipn n i_dup ;
i_dig n ;
i_dup ;
i_dug (n + 1) ;
]
in
let code =