From 4f3d990cc37f713e99b49bd8586abc7190206faf Mon Sep 17 00:00:00 2001 From: JulissaDantes Date: Thu, 16 Dec 2021 10:38:46 -0400 Subject: [PATCH 1/5] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 77a86a972..6842b972f 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ git clone https://github.com/crytic/slither.git && cd slither python3 setup.py install ``` -We recommend using an Python virtual environment, as detailed in the [Developer Installation Instructions](https://github.com/trailofbits/slither/wiki/Developer-installation), if you prefer to install Slither via git. +We recommend using a Python virtual environment, as detailed in the [Developer Installation Instructions](https://github.com/trailofbits/slither/wiki/Developer-installation), if you prefer to install Slither via git. ### Using Docker From eb671ec341653d9d55561ab665149f60495ce77a Mon Sep 17 00:00:00 2001 From: Josselin Date: Tue, 25 Jan 2022 15:03:34 +0100 Subject: [PATCH 2/5] Fix CI Update to gh super linter v4 Add missing 0.8.11 tests (fix #1015) --- .github/workflows/black.yml | 2 +- .github/workflows/linter.yml | 2 +- .github/workflows/pylint.yml | 2 +- CONTRIBUTING.md | 2 +- .../compile/assembly-0.8.11-compact.zip | Bin 0 -> 1345 bytes .../compile/assignment-0.8.11-compact.zip | Bin 0 -> 2561 bytes .../binaryoperation-0.8.11-compact.zip | Bin 0 -> 2142 bytes .../compile/break-0.8.11-compact.zip | Bin 0 -> 2836 bytes .../call_to_variable-0.8.11-compact.zip | Bin 0 -> 2636 bytes .../compile/comment-0.8.11-compact.zip | Bin 0 -> 1217 bytes .../compile/conditional-0.8.11-compact.zip | Bin 0 -> 2564 bytes .../compile/continue-0.8.11-compact.zip | Bin 0 -> 2841 bytes .../compile/contract-0.8.11-compact.zip | Bin 0 -> 2572 bytes .../compile/custom_error-0.8.11-compact.zip | Bin 0 -> 4957 bytes .../compile/dowhile-0.8.11-compact.zip | Bin 0 -> 1772 bytes .../compile/emit-0.8.11-compact.zip | Bin 0 -> 2080 bytes .../compile/enum-0.8.11-compact.zip | Bin 0 -> 994 bytes .../compile/event-0.8.11-compact.zip | Bin 0 -> 1339 bytes .../compile/for-0.8.11-compact.zip | Bin 0 -> 4850 bytes .../compile/function-0.8.11-compact.zip | Bin 0 -> 4458 bytes .../compile/functioncall-0.8.11-compact.zip | Bin 0 -> 7076 bytes .../ast-parsing/compile/if-0.8.11-compact.zip | Bin 0 -> 3355 bytes .../compile/indexaccess-0.8.11-compact.zip | Bin 0 -> 1685 bytes .../indexrangeaccess-0.8.11-compact.zip | Bin 0 -> 2352 bytes ...ary_implicit_conversion-0.8.11-compact.zip | Bin 0 -> 4235 bytes .../compile/literal-0.8.11-compact.zip | Bin 0 -> 2284 bytes .../compile/memberaccess-0.8.11-compact.zip | Bin 0 -> 3025 bytes .../compile/minmax-0.8.11-compact.zip | Bin 0 -> 1613 bytes .../compile/modifier-0.8.11-compact.zip | Bin 0 -> 1350 bytes .../compile/newexpression-0.8.11-compact.zip | Bin 0 -> 1811 bytes .../compile/pragma-0.8.11-compact.zip | Bin 0 -> 1025 bytes .../compile/push-0.8.11-compact.zip | Bin 0 -> 1961 bytes .../compile/return-0.8.11-compact.zip | Bin 0 -> 3055 bytes .../compile/scope-0.8.11-compact.zip | Bin 0 -> 2574 bytes .../compile/struct-0.8.11-compact.zip | Bin 0 -> 1420 bytes .../compile/throw-0.8.11-compact.zip | Bin 0 -> 893 bytes .../compile/top-level-0.8.11-compact.zip | Bin 0 -> 1616 bytes .../top-level-import-0.8.11-compact.zip | Bin 0 -> 2834 bytes .../top-level-import-bis-0.8.11-compact.zip | Bin 0 -> 2411 bytes ...top-level-nested-import-0.8.11-compact.zip | Bin 0 -> 2278 bytes .../compile/trycatch-0.8.11-compact.zip | Bin 0 -> 6480 bytes .../tupleexpression-0.8.11-compact.zip | Bin 0 -> 1740 bytes .../unaryexpression-0.8.11-compact.zip | Bin 0 -> 2476 bytes .../compile/unchecked-0.8.11-compact.zip | Bin 0 -> 2462 bytes ...ts_and_global_variables-0.8.11-compact.zip | Bin 0 -> 10270 bytes .../compile/using-for-0.8.11-compact.zip | Bin 0 -> 2365 bytes .../compile/variable-0.8.11-compact.zip | Bin 0 -> 4305 bytes .../variabledeclaration-0.8.11-compact.zip | Bin 0 -> 2892 bytes .../compile/while-0.8.11-compact.zip | Bin 0 -> 1765 bytes .../compile/yul-0.8.11-compact.zip | Bin 0 -> 5774 bytes .../expected/assembly-0.8.11-compact.json | 5 ++ .../expected/assignment-0.8.11-compact.json | 5 ++ .../binaryoperation-0.8.11-compact.json | 5 ++ .../expected/break-0.8.11-compact.json | 5 ++ .../call_to_variable-0.8.11-compact.json | 6 ++ .../expected/comment-0.8.11-compact.json | 5 ++ .../expected/conditional-0.8.11-compact.json | 5 ++ .../expected/continue-0.8.11-compact.json | 5 ++ .../expected/contract-0.8.11-compact.json | 19 +++++++ .../expected/custom_error-0.8.11-compact.json | 16 ++++++ .../expected/dowhile-0.8.11-compact.json | 5 ++ .../expected/emit-0.8.11-compact.json | 5 ++ .../expected/enum-0.8.11-compact.json | 3 + .../expected/event-0.8.11-compact.json | 3 + .../expected/for-0.8.11-compact.json | 15 +++++ .../expected/function-0.8.11-compact.json | 52 ++++++++++++++++++ .../expected/functioncall-0.8.11-compact.json | 10 ++++ .../expected/if-0.8.11-compact.json | 8 +++ .../expected/indexaccess-0.8.11-compact.json | 5 ++ .../indexrangeaccess-0.8.11-compact.json | 5 ++ ...ry_implicit_conversion-0.8.11-compact.json | 23 ++++++++ .../expected/literal-0.8.11-compact.json | 5 ++ .../expected/memberaccess-0.8.11-compact.json | 7 +++ .../expected/minmax-0.8.11-compact.json | 5 ++ .../expected/modifier-0.8.11-compact.json | 8 +++ .../newexpression-0.8.11-compact.json | 8 +++ .../expected/pragma-0.8.11-compact.json | 3 + .../expected/push-0.8.11-compact.json | 5 ++ .../expected/return-0.8.11-compact.json | 9 +++ .../expected/scope-0.8.11-compact.json | 8 +++ .../expected/struct-0.8.11-compact.json | 3 + .../expected/throw-0.8.11-compact.json | 3 + .../expected/top-level-0.8.11-compact.json | 1 + .../top-level-import-0.8.11-compact.json | 5 ++ .../top-level-import-bis-0.8.11-compact.json | 5 ++ ...op-level-nested-import-0.8.11-compact.json | 5 ++ .../expected/trycatch-0.8.11-compact.json | 9 +++ .../tupleexpression-0.8.11-compact.json | 5 ++ .../unaryexpression-0.8.11-compact.json | 5 ++ .../expected/unchecked-0.8.11-compact.json | 6 ++ ...s_and_global_variables-0.8.11-compact.json | 18 ++++++ .../expected/using-for-0.8.11-compact.json | 9 +++ .../expected/variable-0.8.11-compact.json | 5 ++ .../variabledeclaration-0.8.11-compact.json | 5 ++ .../expected/while-0.8.11-compact.json | 5 ++ .../expected/yul-0.8.11-compact.json | 7 +++ tests/test_ast_parsing.py | 2 +- 97 files changed, 369 insertions(+), 5 deletions(-) create mode 100644 tests/ast-parsing/compile/assembly-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/assignment-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/binaryoperation-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/break-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/call_to_variable-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/comment-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/conditional-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/continue-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/contract-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/custom_error-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/dowhile-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/emit-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/enum-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/event-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/for-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/function-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/functioncall-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/if-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/indexaccess-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/indexrangeaccess-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/library_implicit_conversion-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/literal-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/memberaccess-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/minmax-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/modifier-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/newexpression-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/pragma-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/push-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/return-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/scope-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/struct-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/throw-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-import-bis-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/top-level-nested-import-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/trycatch-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/tupleexpression-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/unaryexpression-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/unchecked-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/units_and_global_variables-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/using-for-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/variable-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/variabledeclaration-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/while-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/yul-0.8.11-compact.zip create mode 100644 tests/ast-parsing/expected/assembly-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/assignment-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/binaryoperation-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/break-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/call_to_variable-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/comment-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/conditional-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/continue-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/contract-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/custom_error-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/dowhile-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/emit-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/enum-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/event-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/for-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/function-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/functioncall-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/if-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/indexaccess-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/indexrangeaccess-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/library_implicit_conversion-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/literal-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/memberaccess-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/minmax-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/modifier-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/newexpression-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/pragma-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/push-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/return-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/scope-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/struct-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/throw-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/top-level-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/top-level-import-bis-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/top-level-nested-import-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/trycatch-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/tupleexpression-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/unaryexpression-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/unchecked-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/units_and_global_variables-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/using-for-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/variable-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/variabledeclaration-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/while-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/yul-0.8.11-compact.json diff --git a/.github/workflows/black.yml b/.github/workflows/black.yml index 6242bd1cb..9834a4654 100644 --- a/.github/workflows/black.yml +++ b/.github/workflows/black.yml @@ -36,7 +36,7 @@ jobs: cp pyproject.toml .github/linters - name: Black - uses: docker://github/super-linter:v3 + uses: docker://github/super-linter:v4 if: always() env: # run linter on everything to catch preexisting problems diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index d6f783c4f..00c1ad61d 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -36,7 +36,7 @@ jobs: cp pyproject.toml .github/linters - name: Lint everything else - uses: docker://github/super-linter:v3 + uses: docker://github/super-linter:v4 if: always() env: # run linter on everything to catch preexisting problems diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml index 80b213aff..a803ad932 100644 --- a/.github/workflows/pylint.yml +++ b/.github/workflows/pylint.yml @@ -36,7 +36,7 @@ jobs: cp pyproject.toml .github/linters - name: Pylint - uses: docker://github/super-linter:v3 + uses: docker://github/super-linter:v4 if: always() env: # run linter on everything to catch preexisting problems diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 99447671f..20440aafc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,7 +37,7 @@ To run them locally in the root dir of the repository: - `pylint slither tests --rcfile pyproject.toml` - `black . --config pyproject.toml` -We use pylint `2.8.2` black `20.8b1`. +We use pylint `2.8.2` black `21.10b0`. ### Detectors tests For each new detector, at least one regression tests must be present. diff --git a/tests/ast-parsing/compile/assembly-0.8.11-compact.zip b/tests/ast-parsing/compile/assembly-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a05d93b6198ad6c50c5080c43e6977705223820e GIT binary patch literal 1345 zcma*nYdF&j00!_sbH7y+xx^tB4MVQW#*j*Dh|!IsVaY9OV-5$S=F&5aDOQ9cN`^o=`xO<&ZQGKc2FcAD8byvth7+MUDi zGQx~xV`ew&zc4@x9SW zUzL!mn`&Pp{j3Lqz_%2JL+CVZP6T|z(ml9M+5oFx9ckUMt4l-NlcwSBS3Qc^pUP<8 z+dg2ZbB`xn$(U!>6sul>k(%-EEy1TNByLl;&kUfXExN+!Tc=&LMDvfRm)d>aX4|Ob z6YONFg{h>ZURX%hP}9RNkqdcb&+pF}FoW&h4OdozDq0CE@Iu{rt*)KYPP*S9uy1>jID5JLO45e= zGrnHW5pT$8kMAne&1DSR-sP%@kgVUw)ot{x0{Ga5RrW#9P2%mtU9Cjl7?+~lY-jyH z?hp-X*Xy!BcF33C0K}8aIU6WjF5`C&6F~-RE#XtTxtUkm%|thkSDkFSZ}5uF3d#!+WX` z#IrDbV*A?K$U9@<%*((fBOzX=U$houS#|c5tFET=96Hp3A(uKmtY_?saX7#Jn50+u zlVe?};INOTJbq0?sAYa)%*~1 z^#K6YY>n*5@`cr>X1)QzmC4mDx39*dRT&QZ)Hd;qucZml9CiR-x`K4Nj|&Xq2pJ_PTrEUbvZbaNf<-!T`0BdoEUQLWjoDG-_s1|1zY*{25=K#0uaF!~ zok5zq7BjO~T6`o+>Y00dm)xx7^RRscG@^5DP=Zw(Cm)5jUIP!7=>4| s@j!`wBnYjb=mq+3+BS9jH)Mq$^M9ZVLMyBM_$q8RcynKELJ0u>08IaBSO5S3 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/assignment-0.8.11-compact.zip b/tests/ast-parsing/compile/assignment-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b4d165e6534d66d9b6bf5c330ffd76a89dddb3b6 GIT binary patch literal 2561 zcma*p`9IT-0|)T8x#!GHt|&(<*A$bGD?$@KZj)m&a)lg)&E$%N<}P!7eAwJa2a;w| zu4p7z8s=Dst4wC!KHuNJkH`1*`r-A<>koL^+pu#O10X;UP>X>%Eh7m4oEHExF9CoW z002Ibk*FJ?A;{3EvsxOu8hRR$VK=>zvEgC2qP%@>`30hGBQ=5|!$NsEH~}vJKm)+V z^z<9hLuf?B#AxRQfwF;6)Tx*9_p%*ij8vQWUYu)Le|@K>%awg`O8|==e)*S5@G@d8 zeWU{qr|;Vo-KYaQ9WC=>5!&8-jGY6}me(`$n?x~SxP*R>EuCEu`&ZWkxK*?ovv-YGQUc~eey z58yoXGlgDoaK3dLnzFL%a7O%?sh;bzPvu;SJ4?wjPovl0Oaf(XU$kxT*J#5@`>iW1 zrtUT$tdSTTLJ@>&R&PF{6}@flZ#aDT6tiJkD#JVH9_tj;h_6juH*Cg@b}$Qduu;QL zC~fmXPEdRRJ2TY4QEJg|(}LP=kd1QZ@eZ5A-&=k)ttn)874|Ke93!JJke z;r0*ev5tyU+h5pT>8+!(5{fr2;>HvT0*q&^!Evh}J{1PE6&E({eC?I{HT&4Lghxro z_9zR*uQZEA_^WP`++;wE;kPP~+d0N}QYB9ss*TFU!KQNL#GaeR-121w`jQVu;`+3O zL*}wmF0}MkQ&FA-;p+;_0(;WqG*PUu#%l>rCTrNtqPff7TJWIllAmVKmA4_t%)Cz4 zb#QO6JguUe>4_?dF5n3#W_7ODreY$o6S7l|XxSdzjLBhyoqK*D?u!2o}o% zWp^vK;^HZzCJ|j>Ifqs*k=tIf`~I~`FEp1K&9Dti{-9qMx+-GqS`&xx!@mqa$nKsf zRBU5!zv>j%2T5Jdq82C6I<&~uM8*}bw0(b8tbK5%xK=7RH(&?OdQX>JRIn9P5LE!< zE&Q5uygz241BJ6o-9d4YS>2UM=bYiwG|q93+6|Kh6|c@06GAf2>f6;#s;5uxyMY3S z5XXuq*%e_`;r1_kag4HrH`e#Bb@)~*)_?=y&ZO;T%qx;5_Zw4*-|N_bN;p2f^gNco z5%42JNp`aOi#Orq74F*iYW8^I8vcRkz?%QwJ5pl-X9)3dFZxtUv8O zXV5sBD*|_0-=1m@ZK(S+^4)`|+q!oU{h_V+>9TO|;8A5TX%^Te*QH2%^r1-Z#(2~|vkfznc)!=j=M!ttMc!GaEorw? zD5NL}7S8j*zPZ?@=()j``!Kd=LSy8!J89E8LZizraEt|1@@t=; z%8&S>#Kb$UQZ4e7k2A539S&z0U#j$?9)xXoc?BX-DW{RaRtKgEZ|}X-q#PM19)h?4~9t zsBt8C2IHl?qGsD5P}o2@t5S8+ON95H%WIkN$A8&I)m#HfSWK8-U?G|LD~>;kiZYgp zX!T+Ey1VikiuE=H355%^pafuwM|W7oM2Ikk5h8$vN8 zsf=jlmzdd?@#+!mCzh}wD>ewrw}lHR&di~|b(PzvRL6NJc0Y8qmCkT*8vXLasZXp+ z=^kA5m_N*;-$Y-vBLOpp?o1fQ3UMKUzjeMQ+_G-kHIXYfinyy+eh(NCSWk`oTP6_(%-JmwOhU-zKO+OUK?zIDve zHe${6d5vRf0<4fqInd4QXlM@WWt=4x=CD#)=V*y&`VW-O4pt2NGyk~-VUEDati zd@_zq=dEJ~ESl)A_RVGTXcl*Eo1QOPU5d4G)WQt`ON4E4Ug0=tvajDMWtFx};eKkW z)a%n0gnBGs^81O_wM3jYu#BA z^RSNuuX$*3Wgx^~?vbA+UuM+ZjB4R$R+{Ryd+p(;a zCPT7>c;r@p2J34u~tJx+LUa>+5=z#{Iv`yNz-VG&Y z*(&eTjcYBBd%P>4%A2tmv}a}ZHf$hc_W#YYKQjAo&}{$C|BEzx8&0l&|7?Hi{AY20 Ipa%f|0olFNZU6uP literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/binaryoperation-0.8.11-compact.zip b/tests/ast-parsing/compile/binaryoperation-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..2005dd1eea28c7a2b4be3ad64c47edab9c7f3dc0 GIT binary patch literal 2142 zcmb7`X&}=N1IK^4J(=44?7oB<#j z0JM{neIUn>&}Soq6fK^D?qI)5t>Ou3HljLmHC$Bn+Lg|z@+N!c*)5*9=#Q;v*?^xe z%gMCH605a+WUf!;X%u79WU%m_)8q8*rrJ-f{8ui9)G_k`EH~<8iON^j^gcK;hh+Wz z;L*u=0wIvq;if{N-jc$VW45UN5&o7ZO~n2$hxwMji_P)+JQlC}d`R7ly<^k@zo}{P z`Mr^GE%}*bJ0-sJ!J(C}VF{X~!` zu)QDjZhWDX2+NyLkZl(3V3_NxUja^0SJZNp5H zvp{ZNw;aM^+nkhN|5a2PI|H+jm`(%)pep z%&1dFiG_|9=(>HijP{RZg7L-P9%%BD@szQFU0m1l{C?%a220TUD9?|_^qVs+4^3zx z3!9Mkf3}*0-RQHoOmnqUB;vU{9*T{}kG2<;XK*Up-Yi;7810f2>8o*r^w$F!4N#>^ zm7H2)+@9*afM|`iRhqs_`h;2fVpd*3_1K2qaT5B-cBx|{#}_O>8d>FXI@sO@wVkC} z$svV7f}d3syyGj-ze|m!1*<2`>}7=a$ZSzMhIFjdTQ}MprRbQ!>#sIGzaLzf?WXT% zUXy&72Z=?s{5?gnY|CW_z91Fx%r~f$6PcUXyoN5hYKxpR;-G1dy`YiY%&fVeohBL zQ#W%Aub42QpLBYB?|&MS$_CmFW4kI zs;=M9Ck~ejzW5+|UX0^f6*r;OC&#qSwkcY)w}mx2R9t~*MI=wKS!>E4l22O@K7~u| zl(E7*Qy)P0%0AcM`i1M!O>-|AejHoB)Oq|o0dErd&5k8C_Ab7zEN(@e&iwR6!)A1f zrgbMggk|j2EOl|+rZ&S_N*FROW{hy)n?6@!zliE+%s*%CXsm&D5h%brt!xg7R4@br zCWPPU+i43SA#Ec@Cql3*Ju{Wgd^C^ZR1Np7APtg=t)XHAi+{+Enfs+lqzn#t9ur@4 z(D)hQdGjieq1ZAHkE?=SpkM@C!XHMxv7YKd?6l@W1a-@0?=DDB#;5vE1XFezcb4X~ z44^Am;Fg9U<7{)mCiJ^oN6HTHElB=jlo9t?99W*9MzEPLFzL&wl?xnRRsXAAsW|4R z5eX{M`NU_*;RaPGvAHa5E3LRu4a!g$E7uN?w|Qw>`0fxz`UgXs6>$|QQXbqQXND-8 z-9>&^n~ZZ352Fp?TV7>(3P!(DcdGdIqKEgm{+E=qkzubm=J76Mad~n55WogEyfU*mJijkt%gcN%Y%eo%Fa1 z#zrvRbGlRX&(CK(DiDW1O=v(K9PNF?8vtTFec^ZY`XwpYS`5d@Ft)hdd9nYJ44T(- zbhubwOmUJZ=|d$-H)!pK%EY2Kmv3W%;6fTXx`NdvQ1J4itP{#`_jKmruw#C-9wA)U zU9+QS?L>8*6=K?IcgYCPZmJYDCFqS*KbG9-{pzmGY~^SotwMNdc~H}~gx?ze+RWK~ z4{8Q<$5(k}Xe+%zA8o6aWRBvkkP@=54OB#J^cmA))89iSm1SolDX+8pNZ4RxI!5|3Mge!GuN|5xOmNJZt-}3c zd$I=J5Jv0;f!LB~`mU~NvMpgO-f&D0UwucGAinMQhef$hDu&=pV?3qIE2ye{>+g=Y zP-uH=SJQ`li51eJQWXTV)|^-BC!2P z{{wEg3)4kgT}*$}Q(@0tTFGmII!o@y@m~z|fq}tBuWVH61#+q;e&rL32Ogg0Xt76jWQA~>h=VN=h=rz-OwCP95X%u5)=SQaX yB@q`BPd1L1qO6gpm=MhWTlasA|KCKP`WOF~{H>9!Z2yi<{i)L*uK#%v0Pr6kcle(G literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/break-0.8.11-compact.zip b/tests/ast-parsing/compile/break-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..4ccb9f85a985314e797558bd65adb49bfd50acbf GIT binary patch literal 2836 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/call_to_variable-0.8.11-compact.zip b/tests/ast-parsing/compile/call_to_variable-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..de5429ac4ba2499fdc9244684c1bf4599944bcc4 GIT binary patch literal 2636 zcmb7`Ra_H}0)>aPgoJdr^caYA_oVv|GHHd8W2B^v6eLCrfdP&NK@ml|Wi*I%3IZdA zNl0G*_x(QHa~{6mc{uN%37C*b6>tYY4G;>Fx41i`S(-r(0DKSv0K@OOrM@F$w+m(MzTf}ogONABlr5y_$^7Fryna@7VsH1&o;(QT_gX6@dWQcfx7Bu zd3*EdNXO5GMTK-yy_!Bpg0iJ8DM;+E7I;m?1w7*+H)|uJtq3mNxN-S8# z2wf@e(dpCYOX_0L)K>_EK(0$J_}*S#SlJ!?`((MAtv`p`E6;bO6yW;aU*WIHJ4%)1 z6YJg@CN_?4rRx~IJdaWBtmD-TBIP`dZrm)9*o+aGY8a}16(TKMKX5us%qZGarpHPi zxG0hKz(F#I6^%sFouj8a1haKU4>plmsY1EF{Kr93U8JijYaEqf7ZU`X+8pun^uhg( z+*8nOzgYVlby_fA$wzOW5d{j~!?-}q#d?kBxOM>WX%PmGg6Q#GglAUf^u7k?_zJQU zlVU$i%puzu43j_RZr-9V{$x(l%ZSQ#UR7yB%BI=01Vq4%sev-e+7c?(N7p8t?hZxD z5aTX$#h!NMk7njocI^9ewOU)B5MRLzoBrg<)B8O@G5UZh$3ZPtmGdCuLB2ZjyxhJ? zQ*KwNJcrk~qpPw@1LMp74JI;EVELlh(78}IdFUvYRy~h;8tA7}1TM^$elxm3VH3gp zg8gP)WMC`ofqL7eqph{ul+L}!T9)M}{ZxIF7Yyxt`o7g~$np&^ODik(^{!L1z0|cv zXU}BmL4+e9QCzYXhX-5PtOI}KZz-GRSPgxa4rZ@!1U{m$<$QedDxFhZU{Q6WQuZkAl7pBE{3-JQB_qEq=pz7ENXewI#_F0Ayn!i!cV>JN8v#xax}p z_NJdQ>b?j9~PxE-S?{BpPYl`&=6G+t2qK@b%?+f7~Q0K3Tda8ActLPa+mOZYNHAcCOxwpJOBoo;->NgLZ)_xOcQmIx!8>25t7cFc}LVVF_g_ zzL4*tf6+gorR_rI;GKeyzp$ER6&RhdJR#yj;hc(4O_$&N(QsoD7PaNR@U9)vas;R8 zyF~Y&+M&hWDskg%kE5I)MV^7$_6rNnwvbW9>*TR>3Ov|Vs0tu_Gww`#-UmF2Y-d%X z?Fzf(>+F$M^zvZ-Z zHJy}-DhYT>)v^`o#Vf{BbMy~nCdFe$JXC=D=C|#h{)EIF2Q2xzePX+W;YgF^B1tyG zkR?v#a>Ii8xdmQuS{LKN3SxEnA~w@C(&hIo2dQDE&XN0yY_;vrh(Icwk4}Y3*2^=;qXKy_r}NPcEy zOtJ8oKsQ&@)NO)~iOp??vOb@LUdWF!oO$wy0sVVdNw?UUX4IpT-Z^uAjM8Ml$QWzp zPo@w(DaAG(Q#W3330DeMf=%NKE#-f$7*M>A2q_}-vIBN_K+$7(#;TVY^;zLqVURR5 z)tY8^dQZ3|Q;JA>Io&Dd%V;TD{pnKgyk_#Lvl1&Cw~tI+kRhrnVCQAJ&I(DVX^Z~H z*~cKbtUVT3)|*jBwnc2-=TOtN5OS6nSKoUcz50Nx^$MkJV*<}J!a$sIoHk)7%$5M8 z$Xx?p`}j?2e8%sUSsd(<+CtMH0rL0dixg5JICQ8pA=X-e;+nIp`#yOeO8?|*CYI`C zp)SktWhw76iOMSj{8YfT8HzO>VjN^qT@ESTS<+yXZGx>k62zIjTo5)E@!&bhq)Y@1eJZ?3N|Q%lOrgHS~g zCJ^fKbA%~R`dt}h zv$I=iXRG(UYftv=&$-MWY8oz68OggRLVR6J#;`Or;jeoZ#_tSg%?HnHl0w0_aK-&l zu)a1MX;U$hC4W1_cUHcyU^Uu<3t}cX`f-~7_M-L7+yqQ;N0sn@+udKm`){HM{>A^} WdM03El7Bx0fBVm0F8*~!0N_6pz5fmX literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/comment-0.8.11-compact.zip b/tests/ast-parsing/compile/comment-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..85bc0d91a6e0bd1e377fd47495257c5370a441d7 GIT binary patch literal 1217 zcmWIWW@fQxU}E57&?vVI$yj5bFUi8daF>UHL79PpAvr%cH#M(BH!&wiuQ)#^KDDAC zzo;ZWu_!qsvn*9Ft2jT8lZBNbmVu#xfx)(;Bi;CqapA&C=eAk%&N-Twsk&dTwKqu0 zPJKQ1Zqtn~4_7bU9>IM7BX4uVnf;+^*-zqLbe!F~!2it;?-}VUxI+Hj^jl~1RgR@I zX!4~m>?Mox`i@+>yR232)J(8pY!bBISGI7T`tXBi zBIDup;Wtv1%Ob*e+|bhd5>vImcHNbWvB5`5j-(&FW8Ra{pk-CXddA>X`7&8+vH118 zr#c_z++~=PzamiMieu6%lK}D)N58}NOD^nu3M#>;G+Kbz#_HF%S7CK=AKz{ zGU$2Br<*)}RzF$ommcwTC{w@2ZtwYIA@5`sJ>eG;@s%#O<3A~0u-SfbwGOvcOR;H} z)uq~u;1cGO46GNmQ|h9HcJBHX_F8pMfPcV4J1_Oj0Kd)6UYGJOt-8?=7%IAPe`Q(Q z&G)%!g2HAuq~7+Y8?gA!*kBg?YRTEJwI$2yLW{p1DV}sM$E`CUSbwj^kv*551Sb3x z{k6Mn`H8j-+fSbS*=M5iR-8$8`2h`;{syi2i>@787$daoa2(?VmL<&xgUz^RTnp}% zvA5f}&uY_ybCLb5U(6SLIpQOA*2Y-O#AWMCId+HDZ@8wfU*0ABS^0RS@y6RhPxk+v zDYT_DSe&8!j`_8x0%7eLTXm-wJ`}u>-c$Y3FE;Gfv03MYUPN1LF|oK2T&AZn;p&Du zrH(3jtKV1dzCUL+?DWclpL|<2K3WnE1X`$N%JGOR0dx=Qqh#m6U!qvx!On zE-C%(YmC91U7y{J>TJ}1er8RU^=@j?5&M6Wq0uYAn~}+$8F$$NEMCB%fe}OzQPKo> Tv$BDdG6G>Bkd6WtR16FNe^)h| literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/conditional-0.8.11-compact.zip b/tests/ast-parsing/compile/conditional-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..760fc233c6d6fe0ba27ebe70986f3b68310f2f81 GIT binary patch literal 2564 zcma*p_dnE+0|)T8aX1lKhYFE(W=KY79C2K7WMoR$V_&|m0k8cGZ~phHc863 zPslubW!<;W_xJDP@qN91c>VJF1D+@(6}2ir30wxC{)$GUR~)>IzyOdB2LNFJ0319$ z95Fr^PY*k+gdG+u>FtTNaSFhBdimJcc{#XX{G23Ry*)j^)F8kL073x(788S(J(GQ$ zKR(>3%$U{dff4-36B%#Fts-1~spU3dwL7@5$&6}#hw*vn;74O2w?*rfn4yL|{f%Q} zCc1>)=we!Xn&Vqc2buq}bn(2!P{k=#dYiYjk;RcJU*PGjxp(3U8CqDfS(<{CdBW!i zVgPuq@BM_J(iFrbjhbaZdMWGd7?4v0TxwztLuo%0=hr-YCCCq!IS;gx1vl>5G<3iFN3Cr5XJ=)$dKMsjsFKt|5PBQz zKisjbqnQz{uufWPRNmRMbksKqwFI`WaZ1LMR6JPR|6zuY+VeEixio~QLylZE!u85s zdNrGueFREZirVzm=ynM^& z*j5u(#=)hJ`1~U(*6wu-rYtynavysAvE!@TAhTu0FPmQtd;O{I=%${iNCeSW8`rVa z=?#S)OtRUv&L{>2m4NydiiZ>5WhU_*C(TjuJz=@=Fu*%O9!*j>fp?sbK&q@Sz!jBe z;d}lf`=z|qgUrT9jX$D^{Kp5`QdcZYI%vCeY;`?j1hvn*1Mj#?cm0g3cl5}5VVktS zcvDNvFtV}t$0uq*qquJVE3wW}M-abUT0z+Ck@l-I=MS`t>WxdFdCr|0Z^vv)l0(>y zEyB%HGp^_S`-9K&_$oV1KdU?{_~H`tdM0&#Yvxqu{>f6Bv%lWP#qfwEW%+zdo)r*J z2(hDv$?*x`_FtWh2Hap2EnxTdv$E->oORls5AA4~8o0b<)RsG{VI0?#tU?G)Y)3H4 zw8?xMfV&M4*WPe&HKlqWTeOwj-(K-B?v@|-
h3TDKc)2rOn*j0anN=YUT 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/contract-0.8.11-compact.zip b/tests/ast-parsing/compile/contract-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..c39f89c8b97cf77e64e1f1d521cdf6e4f5ac6e34 GIT binary patch literal 2572 zcma*p_dgU40|)SPoN-37PL#7t_Ws%&an4Abz2}{AHfMgxE<)dAWMq#Vmov*cdu6+b zWTX>vMv9a?eV^Z-*X#Lwe)#pSD{gsiqW52>wDI(?F5T=kNWm|$^pUrPkUt?+_{%0Vulu^bPO0J6} zj+Z|ig~<>6mh=v4P4;>|b0p`NA5NMpjcp)!OXIg43Kn+G%hjP{Qx)6A8OZHM)a*T> zBT@^nO#zzxO&0qLDubtd85qP)v^&ZI4Bqzk;i zO6B5WVXs_bRD*cF493zBt5!QHDx6G^K*p)GD0>wD%^k;@GuLotd*Db2OXVSjFSZKB zZj9utkX$a}*`r6tO?usbLdm|CQ z2@TfO3-%U<#v2draz0WMtBAU#if0!tzRC+i}}fjUDe^EfT#G5BH~v z9tkCqbpS7VVi>1J-LuF#D}*z!lWrdu+X-KstvbbxM{MBy$F!Vis_cWdt5?Y z-IJLccw|EUgz!`;J)1{ybvi$lnn_c4it#xQ0!@qb{%GkYb8|OZ8z=K#hdP!Na8Av0)T^n&H}XWVDdv}@$v4Kzi?@F7$sdE+kTjFM;( zs;}vQ)h#7=82?&7pB>{kzrlxn=lFD3pf7>3-l}II5AVRfx<8V?$C{^>U)FvjYG$0j zg&}1LT0rl%c+XPT^+#rMQDO7*uwH44dIJYMzatGa4KdHQfYnQ&A8~c8x?DucuV2DS!X54%lbGu)8e8LufvElHm11)AntJ~ZWMiEcc z2(pS*9MbGa)DC5!n_o}?xx6@daQgYHUjj-vvhNTxeEhaZs4bVyn_S?MctVRbTX~{t zUogMgn82m{>2?`8S_~acigWm(UJ2hVzkVoNmajK_W7sZzT|aB}L4B@qOJ)l6w8#uO ztY(!0t90rcx`^G%R_4X{@I&3*N3P8Tbb`NeLfSfVwJd{sgIs$c5~3#Ge4mlO$Qc$!yG&0w0p~2er96MSpRO9 z{k}gLA(+?*Yu^4?E#)RuFy?TS{VHNziJg-VF)U$b<;X zsvF_%qUbo=tD)b4s2}tXJK^^*_d)c0Qojgv)v6{S1&A zvUG>+CTE_H0EG2YQ_XZh(LQ+CGvm->HYSmd;(2N`$#2`6P?fDZAyTS&IWUv8IN7{p zC=wSxQ>tuCa*O!DR=L}O_g#6(@wKc8nly7 zaJw&K?fbwe77r{}!*4qh&T?wOdK+vUBWVJg);%y{vVDf}b-ImnSGu!sy0e*=ger=# zk*N*@Lw?wp%4J=6?y;Iq(K-o;5z2=gxvJkHl@aU>C#f`I01;sIh6XS(N3gFnLm9{` zt$@4;gT1P)n zpsa)pw5o0Je#shyA}TI{8#kH%7M*&@Zq?Ql)A*#q^U67UW4c|dq!NzFb{)?Da^1!{ z_IX%ru#iV_9{X9N(iH!Wa~e2%e5CrA_hFs1{0apj3Z56oef#0Dxxc%XG3y_!6;-7| z;QO%4r3GF}Z;+Y@P9QnlkOVvD*Wm>m}ZePHXxanSY3aSJ2m|YGJy?bFg zO4m88F+pY}P2;6}xHq5JKvIjocc>zz^*Ve-sUE7&UkK{L;dym2y*tPklG{CFoa?P; zXEt(d?&jhV!l$!xwl3QfgB8XNU1;?ZMV-Hpq+2WyP_shXNLvn~?B{aH)ld7M0`QJ?12bU|+%xa~Z#HHFMC4@3|bLEiWYqBL4 zf`2>KQ`fRjNqo-+DQpj4u_M-Bc*+^TNa4++%x)7Y8Ne?gn-Q~ki@!e9A z$dW$_&xj6?;e|^=uar4=T6A~I&|5qjV+aluc*nz@^TQN%m2L!^p*0?3)w_(4!7!>7 zhL4b4yJ#n^p1d=Dk@vaxpq5Z)=&by!h*#Qk?H`GODs`0p)m~Kr z6%5)z1FQRw5C=f2j)rJc7ZkQRX`RhMi{mmu8^}9*e>5zy=K*1EhUC@6dQS|Y5aA|% zHU=-7Hj3|d*TGGm3IezGuslaA@3P1vheLZ}f62>dci1Urdob;>45#iKMsu>#(WO*( zSBF)g((J((E(58$HP)*e1(}Kt)n?{h$3bP0B1W{Mw16mM-?zSd#fil?U@erQXEFGS z)Qx-Up=A>${zsiW+54)+0_Utx4b}d3Ja)W1aQEUiGok`&QU7nF{bAaF6HoQ;{C{FI UGXl~6`=&}5?wE87NDicg`@Z-4 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¨3SQ7WtH?p;*2zpQbAi{a%CK+ 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 Dt?ELS literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/emit-0.8.11-compact.zip b/tests/ast-parsing/compile/emit-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..97188dd874dd78c340f329fc992c6adeebae5688 GIT binary patch literal 2080 zcmai$c{~%01I9N;IU2cgv&r07&21(m<(y*4(F&uvEpIb7n=40-$ho z0001tA2wK3LrqIfL+yTmFB%gP7=Q~#-^ID#!#=>MdEXE4=VW6CxB>vt0Dxg)q8IEK z7F04e+++YM?D5A!JEY=LuZtn%>$uyr8rHhQDw-Wx=eIz_=)n#LIiIh$R}+U`729s? zTjqLIas3%LKep+93p>*EU^xz77Ir%u70(M^|aqB`i#`UTx3i+Ta%pz`o zUAgPA+t^rJuAAWLYUDKG%q)p5`R^_&J^hHUIWWOrm)W2!dsUI$!%Tn71esRZ5+gmFakFKmU;6Xi6D48FyBHnDFTH{3{ykbjooeLIdc;uC_jsA>_V=)e(by?f9;74?y{Jhf#WIwtYv zOjwpyR^QECrEs1#7qKNxgdKSA8-GZOQ7A6Mm&ZGz5dW(5i%dhc;i*toH>p_#$R4A4 z|71M?o>U6z`GmEev`THO6^PM~B$?%iO~s|88;OflL$a;~KiHQRpikNM=-At`Si(I+ z%kyLQVMb@|)tfE@#pkRPqtb_9cl*0)Fc;mUcKJ@v{>bt_3C@z4dPhyRYzrid>svUE z9!zG!@a_}yQc3+@-<2x*<|%m*db^*CK)rB+hWSF>Zg?jhs~W{%Yc4Kfw3g7*zcxO% zi?9D-=JUj0ZdX&e_{1soGA*MgR}blU&$_Pk7g3vrB;amoHV?w4kzg*o{|jD%fV`T+ z(5wwrg{E0-ud=t<_p1zT9poj)wkcOW6D|`noKa!4%yL#dUY*?j*xcyMO;r=BWBtG= z!H1XXCffYh*dqwPv&jSt`|n0x(3=(=v0Nz)6#R<2O^|_$@5--AQ_sv*d41i4UO%Qw z*3Vg?aQN!Qeq&A*S*Toxy=rccezG$_%l+DX~UFu^b|7OFxMv5Z;bNE?|yCUK#1OyJgmm-O)Cr?c(AnN>>; z(q^(H=DsmG72y5U9n>g;SsSS34mG?kwBz#N+$$|{>;B(#zTOpDnFtMEp7ZuqT0Zav zDrZrGOX8eGWV-_{O~ch~CJZcjx@0tP(to74k#AhwtCUcys3z-w!gHbC_|P@l;lXY9 zjzB*YI59bETif^`gB$^f5iHf5F>mv@1)sC*A z{aR~Unb%4RWv4mA|3=16G%vY|mQTL187&1@f{=zz(&yj0rou1EA6#GPOs&)nd7f8L zI2iV*>YbeE1?0H0CRz4CkbCkA;DW(If5UtTcEDGOZ z_3p|TR+sDJX0pssR*UC{U z6}iORGog!NmVUYN^pLq|z z%iKW1r1d1Na2}q%#N2TUepSmo4AVOZjv9%yQgert()K;2|}RMM7-h(6EVB zenw{^F~+#M)0YOp1ij?%xt&2@sj`Q+fNY}@{E-Id?H{sjs;N!FDjNZfItH(q!OU3X z))b}Du6U++x8P)dYC8mJ31l&1{dac%!T0|a4g4qmo8(AK_EY~ffq#trldXS#008hm D&g|30 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/enum-0.8.11-compact.zip b/tests/ast-parsing/compile/enum-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..31dcb58e8d49d8fb5c5192da5ece2c4277a4080d GIT binary patch literal 994 zcmWIWW@fQxU}E57&?>hKnHGPj(}tOW;RYuIgAxM+Luy`WuC9Teg`R<4aehvGYDGbQ zQAvDaQF2CRS*l)Eaef{r3oAn`149D?gKbAgy73?5!iAU4ZL{W`b2Kkgb-!F|Z;+Io z`g-o&rW;=#u3ox5g8BYO-sXlg`$N^TpTxcBIJS zw_JSew)N>JM%n>hiyn$8+$hif`EhG+dl|Qh;laz3yu;?ST7NMWZkq9M^^>>8({EgI z__jXK!_qe(|hB_I*)(zU)o+ZHe(8Sn}B?uGL_ev}u9uqPb%rerJ z|6wy*^*X0=$di*X-oiHcq7i3;o1H*d;WMepJ9u)cvfuT(Q@^Y^zEZ=(Y>d5 zckAX~KJtB+(DI`G;8VM7d#1#kR-QO-!Gr5Nc_vmYT*b2Qr|YKupZLUE(z#|%_Ntga z*IZybNB*3@Ob5bx&u;FF&?*Y4a?bd_QfpQy-&*4x4EtIq*Lmk_zW=@2P_5$pQMJd$ zkM7;cJu%;{c`TlZYsZh&hjS-iQ;$Mj(asJoVsw;xpzBPvxWA{ z&f7w7_C<>wJ2)%)Q~iWK#Sd4QWg_nFe0^s6tliHI7f*Y7tE>C&>NSV=taxxE(!=-B zVSf3&o<^3&b&AUMXGTd1d#`H_Qa!pavzrO!nCfAt$ tKeJuyAK=Z%WY3H{_W?5?7&I_~D8hL$z?+o~q>>Q`1Auf5FefuG003Q<#W4T? literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/event-0.8.11-compact.zip b/tests/ast-parsing/compile/event-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..6843ddd976a2f28fd05edb3d516be7a067e11e19 GIT binary patch literal 1339 zcmajfYdF&j00!{CZD@utS77LJ@1UvaLoIt4)RAVywUXT#M)4p@8{`z~T zKd<08fn_RZ<)c`+k9qf>gyq85#e| zEp+Tu?^o5bksS>X(MD1%-hfUf=s25M=K!-aSlnEx>VPMTAnwert#_h1GtVHtmVl$o z7e{6r`8Td#=;rO+hxI&PK&x@<+3!`fboyK1hZ`*-4(x=_q;xFuD)w_>&`ag2!d(jp zHr3opyEKD?u0IslPaB}OO%7{3$9Kv7^5dNAx?++uY!uN3D{mNMG2-y>YTRS8a@;1t`P1C+q zC!Tq`)0WDIh6@yYc!9GG^rc;XE3muFCI;;C^Sy344Ma&qbAL7(OqP^|ffJ9)`z9$9mI?(U>jiEd*hSAWqq`S zAK&91e2Vuo-RaUqy*cQ^A)sL~P?ihOhf%cXnS}qNdrx!nzcUUYAQcMO(_U zT0P$1%v6PRjlx{#6DPznZ&@|l&nng~m9B6A+P*{k4)SSh(DHJqOA?fGxGke2f$V?N zBF_F&*QxA46OwlQS(3qaK$-jP`=DvPv!)W1P#o}E`P`~GiZ43?>WL3{tG_I1SVQZ{ z^Rh7hlhP-T%G58y{Q{U3jcNdl`zlZ-bv- z#1ZfsN=KPOw%%z*4`);+JruCuX-YCJ#}d`?*>+?_Z2YwuBRS4bk(ro^1Uv6>pjP&- z7Q_(lhWK7O7NOymyNl!#W!d^b`#?OSOn3LW(Yq&xqQ#H7S3v8$>ji3@FX$)M3d0LS z6W>($9wZjW2$Qt~(UO60z9qfl*j?1PRg<*pe+6DnfiqjhGTtm|y`v-PlcHCoPcmZ8 zJ?MUq9^qBH>aS3G#G_!JWX;-6$(RsGQd@(Q1AO zA>4G>Nz|hzSj3y%_IN$$1#cee=8RyLd@2N`RpDvRG}kK^2``Xmj1?uZq>0!RJ$Kq{ z)5ZqPoo{h)pb_L?Ezy65Vb*ejV#ZX~|Jsw&X=)Cx^Jf!Vj58$j5_+%E1pR*b^vqMk zroCMd9^43|e9JQR#s>@JFS4az(Bf+5a$SY4Vq5|@9g(zas2>K`apw~ewo6s0M=BU- zL{UqO=~^OYN$|LzEuRxGzaX9qtvDz*=r!h-IVCalE?zy$JIYlw$1HWIU$D~NkV-Je ni8uw2Bly2v+obK^Fckio|5c8NQ&jrrsIb}7oBM8)NC5a7cwlXN literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/for-0.8.11-compact.zip b/tests/ast-parsing/compile/for-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..4a5d1efea7a0adaeaf32e1830f4489b8453512f8 GIT binary patch literal 4850 zcmai&^dt zfJ9hufU{>*NN{MlvumikkMC1Y3BR!5APQm|I)2QT|OG* zE6~rKoNd9bD%3{#L9QJ){Jf#Zj%e+OIw>CAZ!PG*<+PhN-BoRRaAEk$yZN5g?Xn(? zsM;F)sE?mjgL_eotYTH6*0^#u+Z3qO3izj@ff$nc)+oIAVcmDXHgtEG{nK!Y4L(`d zZY{z--_?*skm96Y`iavXRwj7F(rX$LV&g@UX|N~ilpHh}I^2HlFj<*ymP&>dPdWzm zFQSpu(?~r#K|l3?y?N1NtzV*G3)8Dx8;yM{OU`23ZaH9;!;yP4x+L(HHO#=3A;?Ft%hA9MUtgFKhy8|{&nVRBf5X~-VaILF)X66u z2^@&2kkjpIQ)~m}OJKoBB`u#guui=!hnK6;G)1*DPjvaEG<#dmrdjwy*mUqS6z#W9 zBjjJ?y9B^VI`1AVF;0^UdUb~0?tQAcY;1V6_|Kt5h2OKS+ZTGDU~7mdgsj$`Y3 zNvj}70czFD&I&thNYi&8QFX@&Fv+r?9vnKeja=IO(XSqrMt|q}Fn`B4#>aru<`Z1t zY9W6eQkJ4lK4#Ph3MSqkqGjA@5wncO1jkb#o1m}jJ)WIYd~7@s*|~upU9cc@<&7Hx z4z@a2XweyyD0t5fqba8>i7JpvwU=Kk`o%+4Y+ZIrbSpr=9&0%^K&N*dgK>m}qz-%@ zM0p*iD^R_hlr9h@{C*}q%p3Yyyw>WMZfX0)b>H&h16Qm}J*qnpC`JLb?R(y%^oqm| z+N5yDGPb06__gQrjwx^494rRxCdApvI*E+CJ~1M*Ws9(lr4lg9w3Syuwo4f=517*B zJk`U`>ey&$1OWHnvmL`^U?Vrm?Rf>y%1YR{x}0@WU<)E5C^;=nWJiB%kzCs?m>PJ0 z>Qmo?lyUQka0B6rH_T%A*t;cx1yybMTQ!W!5Qu$E{p(-PmnG|6pyv%b{?-P^ja5!7 zl0RV-Mwc1WSFcuHucz`JmR z1wms~MODXb?+JH6y(`;D=5y4Pf&CcbqoJjaFZKfiV;O5{&Q@pdPO-#cx1Pd>RADPMp)sc@Q$v*GHLfSC%7`h zj9S{7e)o-P+pxSw{-yBRi?By%lNirF0k#~4Lcf-q1sxJlKLK!AITp&o1z3T=Z6fw< zpNJtGapkdQ??q6g-CpmYLbA+$$F?zTZtjliW{YGOSQ?h&;$gbPu?yl20mc~{8u^0W zB%i3Dt^}O~)63Lotu5o~?54g?r9%Gw5Ifn7DR>K zweKiVSNqX;yc@Pl=yv7uxz0iUCNLr?0H;mVF~pWo&1Tp3>*|#b%rwMwi++AcQCc|TQ zDETg;@QMTuzUyfA+>dXb7?^YA9BHiEHJ@bc?0B4t)95b@q68^F{dL|sK4~oIR zcW8slNvhk}Ndmr6DX}rcH8~+qCGxc;=$h`ABPANGN2~hM+kEI<@BPwOWccX3T@yPg zgWLiUM|w>K%`l+#>koNfj;Xg=d}{R1*P#5}rY^dH2_esqHBF>*n3g*BBIZe%DScKyH+N){ zkrG7Go|V7;Y~#d7)>A{#w^4iwV;~m$`VFx!ug$~({KgL$i*m}5`wEB0q$abF!UnK6Gw~`w6hDq+i&uJw%^@K6*wZGez`{nqOUa%qO&#%_-Ly$fw zlGO^sSAUdhk)B@tz?IRP-?i2K~vaHYLp=TZbqy=1(X#}qNY4MqcjDdYKcAb9v-r6A$ zxFT<_c@PayhCL}suEmVCiPH3Nq?}6sCT2^awd9|i<{1Xkg%6|mH$N- zW_0}74>?m{*(jl^h2-L8T!SavYre&5BBof@W#3hcJ%#JgZWKoxZEG$Z8=kal%6Q^#BiD^GLioM%3KH{2P0q4>%{W3CII=E6%0nPF1j zro`(%Dxb4TT(uN0TqDYNm~T0(5LBw5y8`Qyv6-QJGUWTZ_Pl%Tmua1d6>J-(wqfDf z-_xOYhi;rcPIy9wDVUV=_GXQD>7YZ@6zG)PSC*BjWsCDHJ=BDpb$K2iDD;@`QnPd3 zu2@z*BraT#AU|zb%b3pI_@e z3^<3&=8@{7SlRy>1gYW;(gZI-fxutR0BcHGj%9X&>&l>P$q2@?wWjP9tr#_NEQ9>) z)M+<99!<04KJ}af(Z*^>2x|T^)`{yBI!ogNe%ur*ub?&HQ+JC(ISv~Tnx=+RQT|pk zuOpvwQe%&0&Z;HY?%A1RliV9Jl~TvxioHnz7`6(y(+|sVh4t?A)hhp~^v+jpo}Tpp ze>p@c6TMl^6W~Y83BXa@M!wsiVSZM>Za2PFI-msDgYXneDO~)qMCa|$OE0^a?}QxX zcz^M!uh4=YYfXY;XIrR?_g)WNIL^FgSHwW(K86uXAJ(^hH;A@ikKNMb(LfWj6I(`N6O1zY5Cxr6%=Gsc2=3;!7N)UG z5-aZt?8IZkUj$J|kkoihsBA5uXH75lE6Sr&hJ;ryMhb2@HlOY83M5Qhv@V*D_+u~5 zEg|ulK>)ho*p#Q)DFvERe+ot&=i=%=yj4E!;y5QOsE9K{=OsBEP#7&27kqi!<-P6j z!f~hUXtvzex0Q*Q<#H;QMn5+f9dqDc?*bB~NSEZix{(i;xf%9AAA}?IydEg8p2pl! z^*bh90Vh#2=6vQk7$XpSqJq2$QM0xCbC(rEl*(jzfX`?N`WxnCO5eER>QiM>ug?~5jZiHymf z2T*>E^lJ*@Oo4z9u|FoidE)*ha(c3@L<^F*oyYK&lYE^}!)hH#$29H^eV2OTr!%{1 zB8nk-eXLYltnx%ETwgN&gOk$&+t<&}WFi70{^}c?d$8ZB2OAF4xaD`rmEG}N@lY^` z<={&2b-gsurwGrF!<#e?XLt7BgI>fpGG1-P`p!^Q1bymQj!e)0#)L(8Gl~5Pe4!fJ zrFpj>voYDDQhOrtK;}U=ooj^g#%}Sy*-FP&m~FZH$+mDZtf}qqu?`P*Ch<`!Ch^w~ zac07aEhXG>$`d&-ZHeBqpzGbHeRpNvEV11hqjh$f*hiU+a=s-I%yQ?2DD(lj+h2al zWM6Cl()}6`gw8cx0}MU&qr9)2=UtTzEVLeVHzP85lwva`%UW^txC>@ks>M@!^v%^5_BJqyiCvJ}Z%~vO-HT6W38w#|~j+!#B9A4Th7PD-?NMhL@C) zY~Djr2g>+(S3X4$AFn25%`ng!^=?ix`;R{UxLFRb*quY>^l8XLDY+3m20%64KLpNO z_G4W~O<4ze2`1B^wB;*^o6YZET9kZhKqC#X6OSJ>GvW{~LN>E}Ee z)eVF3a#k};pKNphobB%R=_hoG_(bfr1`!?a7% z`a-VW?F$2r6McT`3`g0KL!Ip8c3uvRudKBRD{o}}#Euy~E`7p3#@pFv7gixA`iH(~ znr^DwG}+wFe2^EU8l?4&xvMm7ae_!JE7+IE;++@gmau~8Vs*0Uu<3Yn2Hzv@SzV!l zU{QhMf{`dKCg0}nUE153F%eq*-2p!97kValu@o+g5q(LMa5LRV30#?{5q4{8!P z2fP=CTKa-r-{1I=y6p#&aFC`Z8+}N>Rq<-p2rFJ3O+Ce!3w5Tl`K9XX{WM)~U){ZxNNcSO^WwkOGnO}T-NWjqA*;45S&CLbD2hv5wF55RzC4u}seFje>UKGB59luhI~&tQq_%B3rZ@15LUySx`mA7XZNJX8?c`007wgxZ8L;dAJLJ zfD%9iwsfr zkh>E{4`WokE}a}#EkTD^{oz1hajP-L29hWuY@)}2(`DD<06y8Auk{C|p5ai2um5*h zl_WqhkadQMop}hG?HoI|A>Pk_V@BK6L<>36p}xh2PF~MAN1!KjmzXa~*Y>jo<>gkF zvi9ea%8Y&ZRDd8N*W!JH&+mzL)6Cj6oPgqtA~CJzfqW*;BITWb%0NxK8!YcV$jT#7 zB)^w^bQX7DTNMX{?zTnGkFsT-@it?le$@2w`3LdbSk=Wy`iW1O6&4on#`+e`596Ck z3@GY^FaXK$CtVcDl}JOl45ZHT=?ADvSrRIJwvLHE5qGcn)Z`$?Quv`6?rEM^3^EG} zYx;<;FF|U~#TE4k3^`&&(OI6-ckC)FQ>)6yp&2F=L`O^4hVDEmDvw0d@X-UyD)P;? z8hXAEtPL{(iK;veEDIIsyR>kvnd}Rua><&AVf3w~5?fb+Xq$-cwPC>ARcSo>W_nx?12eBjzM;fI-2LHRCQvJ8j z+ngUAlL^Ed|4cGYAN17B4yv{ft`kX1CFP|TRu>B><-Brs&)c##iy_~dPdADP%(?gP zevs|Bj58#myjHxRAtJMCwcYmIp%$g%2(gV>pBuqs-lCN*X(q9-xaB&z|{eE?se8KUJ6+h8ju(^S=6g0%DL)`e*KQke@lhqbXct!gv-frN&wNd zzm&vsW1A=#T}$`x^eNbUSo6v$ynmO9hUI8;?*SqFztDsvJ(`iurRPZzpX% zXY08}={mIdBj(dkMi;Z%swnJjam5gxX%8jdLorO{aG=aI={6C?9-o{Z6VGnu22GfPuvr~#Wep|H_WaI;DV827 za(?)B>zw=|+Y+waZ;Ka*ahy$qxk2^Talirjl3c5CZzNTwFt3bLi?)h7138C~LkcVD zZ%HgTLip>&_ppW*uk?!HcpT}&jA1y|PpU%~E0|yi-DFD;UZ!8VLKV6uu(c^?yK?6u zC@43+-|Q88e6}nb!?Kz!z-nM5WwX2DS+oQ;k*yuA;ZH6=3wmJPu!gYK2y= zo~Ipu-b;3J1X_m}RDw;z0_G0~Z6Y{}rt<`O@10=Hp`+nuyysF_iH*40oMz!pkncy58c&zK6?*0Kb z?bRUH)zduxd7JXvRg5QrRX+&StF^Jq#eKms$2wP+#XY7lS(eutlfa-N&5v`F+^Uf= zZy?Zme!*xOYq-*VFuWO{l-0nk>vY%``qr7w`4H5sU{=m25B-pU3U=tfIP#2{vXCFf z#Ewt4h5q?gJ%I!r@msidI!dNVG`BSIwo~72fI(yQOQ$=UeTYs@eHC?ae14M8fohR{ zPXyU`OBo4cmH2`mX=U*X@^>6+ybzL8ObtKQy;o5!Gr59mpg}i#0nu@P3UkZmMPx$~ zL7aJ68&&;WItQI|(RlG*qk$|7c7dy5WxlpipW}I-g~k}~3wcXUn@I)vR%oLzEsLFI zkzOvGe5F_T#NI{W=*sxCO)Np6W`lvLyJ>nbDWoMYY4{bs5K7O>a*^7wy80j@u^+9> zmNY2Z)=hhTurbxNH}tcRoInYPo{Y<7s4$$o^;bk6f5_LPPlMXTHV35&M{-r%FcJWD zu6#qH8QR$dty8&|U(^_+maJld)I(6FfvagAI{6|b)&aMl3S`Y1{rkp`L4tXuX9(=xKi3*s49WD^U$#%u;zhzV4<1V0&PRiG{-kMUAoh0eJw@lLZw6=t6-jRbs zt@NBBlL7;_1Uw^6uPb8pNoS1Yii?P9ByB{T*AgA>Btv{;@(lS>T;Vz~kH!`!!#3ydSuuE4C!nfSk5~%QW zlB@2#xEUutksg6_Mf8S(`kISt|9HmwaRG3`QA z-yI-UJ}pOAtZC1$H?!;O^{1x+8h=XaAX*wfuV;?dYCGAccZB8D6_EekXwaHS(SB*I zAW?OM%l^ZUzw4i;ZA~DKhFIJ;KbYdmjJ0`ER0!L4VvQtI%n~U<8Er>DpV;VtmJi z=1K-PiJ0-(=#iKx>J9elVS45|qo>K$gd^?lOo>-fdJ^LW^sJ9(ob5w-5EnfYI&Q8F zwZv?=!F74;=isV|+g!UY7lykgx56IYI^js&(2nj~6;WP8>i|cLdOYtJJyFOqM*ZvQ zYGynFTpF$C_4x7Y@EBgvG*iaDA>*_Hc&rX$z*Wy?dJHU$?IcWB!i#1SBBPS@CgMvx z&-+z}u`7+}O(A;zB%{FhZmcCjBeAB8XEG7VXX~2EYS?Uy)wl(}@IrHox5B>4o{HwV2->X9cUH_&2K&A)`PTZ?UpISgbuafCc8jVlfG_YqLvH`*cC~BS z;;hg4NPdB1%JRFE9U+-%}e;0cCsI6kZ0D_Lx3Vsf0Zcc|+G(1H}K`g!> zZ+K0NLvVYxkG71vF>L>ytbFRgsal-{9+rVIrhhmw6&Iv7knlx4>U)~~yr9jgO@FLB z^~G23a!W^~ze%E~L@ejU4r0F55lDOwW9iLEz`zxHs&QnJB@&?3c!#PZB5*&WApA#C ztG!#dP3LB{D4$lmc*puY9;n)5XcWSm&dZS_$};4CP;togO~*k~V*6FaFA9&7t^IyS zWrP#f`he}C6%)wx)i9hWXDQA`feuvq_&Y3enJ{3=B;~i^wxEkjLrzoh9kJoS2WY1B z8W*)I)`DNuZ~x7Zl8;B!+GvVrvj+C4#FlZY6;tLE78WABlLaOI_{R&3TMnU6dG##!t0aE z7k7c?_pfds68DYE_us#{p2CIPCm;A?KadlO{gC{Y^0N86&|cDl%oM}E&EEs%b-XKU z$dc&!ui9H-=gZ%rRFhgXO;!AXmM~dLE_!5hxz0oCuFY!of z2oe`3C7XybRgAC|(Oz#47+$wQ&l4A&)4|FQ6c1#ipiOEzme&t7cssdC!afB}6sdt` z7P|Bk-Eds4S~}gQhJwJ<)tyt~`J@ztKH@A{)3nX_^>u3VP^#w#`I-T3bu@H&jQ>tR g{sTe&Utwtf*8j#swAHb&|9zwV$NK*c(tqRs0JhqOCIA2c literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/functioncall-0.8.11-compact.zip b/tests/ast-parsing/compile/functioncall-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a29f514357b320347f578abf7ff3c823d761686 GIT binary patch literal 7076 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/if-0.8.11-compact.zip b/tests/ast-parsing/compile/if-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..d67fe05e5c7c7d0f02b4592b9be2074d57f2f102 GIT binary patch literal 3355 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/indexaccess-0.8.11-compact.zip b/tests/ast-parsing/compile/indexaccess-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..8294b6554473d7286089e664227da347e5a70e46 GIT binary patch literal 1685 zcma)-c{tmL1IE9IbApbx^K+#_oHf5zv@4>EV(!#Lt&XrX;)tZgO@|Oi1$7H)l_+J7 zsge-n2~A5&*NU`Mk!rP$tV$h28|(J}o@ej-$LD#U=l%bKa+3ks1JZyBV3P2iPros; zeo+>ta6krhk3ISz}!R>}6tI$~+vk=F<+z+x9vrZ0aUPWGr2A!nkKJAn= z;6qbLYuJ=QOF~~{Jt6CShn9)UwxcSWT-ikL+dnEfUbCvwQj&edg#d4Q66?y|znT*E zZ9Qh~R&ByOUNEHLgI3?1dC^JieNk zaHE?oIX93MY>3lD;z*$;5r@00Uhb0qu+Wf1e}>_nZM9ih%i9%Tm5WZ9llL@aIr$I! z)CcsGY_>GZLV&L#Hh*dSG{+7|E4Suga$qQ>=M=x9^1~ZGw~`D{BdP|Ujg)oOQtf^c z*;!(}HN`^ZbV4O`UBhV{jts6GK@fo)LN0!D_ zgVd6Dd1&#m@bLF@3MXW)O}Y_j*-;y8&@uOktF%rQkofL>W5AKsWnrj z=qtyPW23essTBR3;^GI!;8ArJdP)gLR=Jb|(p6ZbD0--$>>HcemT>I}I^ zXBXZ1F`#QOYQf~kKA_OgPtk#^y33{0hlF1C7uo@i{uqLKAO&iK8C4fwF1}c2tJswGF~sU}v;R4me%Y{V+^+q%l}QWtm5?B? zM_FXdd-$JRXt$*G?YPr{uf-2nj1gTap^O1sjg3g*ZnWnk*66@mq2>eRwyBYl?(MP$`P5$)0~H+-`3lItHG&wZ1zi zd?m~^CK)We3- z;Cx4st?Va5Wxc0UWOO2ov!z)W!OS4W(%8>P)xYXMGu2t&L<#WP^VDVqr8JE@bm5 Sxyj1?eV6)D^cR}`v;G1`=NljZ literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/indexrangeaccess-0.8.11-compact.zip b/tests/ast-parsing/compile/indexrangeaccess-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..128cdab6ab3dd980d9d426346399b8e50cec62de GIT binary patch literal 2352 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/memberaccess-0.8.11-compact.zip b/tests/ast-parsing/compile/memberaccess-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f0f8b9734414187cbf36bbba275f86374d489c2d GIT binary patch literal 3025 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 AEdT%j literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/minmax-0.8.11-compact.zip b/tests/ast-parsing/compile/minmax-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..43d5c7dc6f9c6f53ce40b9ddd892264754684063 GIT binary patch literal 1613 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 ye@;a939`lFGAuj literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/newexpression-0.8.11-compact.zip b/tests/ast-parsing/compile/newexpression-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..9de0dcebb80e91c7b1033cd18481f61f5e8d3ee2 GIT binary patch literal 1811 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/return-0.8.11-compact.zip b/tests/ast-parsing/compile/return-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..13ee2afb55466616ae25cb89cada4279fbd8cade GIT binary patch literal 3055 zcmajh_dgU40|)RsXGTuK*|U(9ac3qgdrO7PjN@=;Wqw0eWOU{knI-ddgv*MALx{*Y zlyR~zB=hj}eSUvl&*$^Q=a>3nGJhoZf)ZyzEh~40=_A84hP#Pg8`~Nb0xx0iuaQUQXk; zqDg7%gwS>rv!+ZHyv(q~xa;hcd}^W57Mjm=N#y3y1B9L|f(Y5LgVZ!>J)%bU*z%@I zSd~7ijYpXLK+79G229h2V@2kD3Ee?Q@yGwf+x-dtbX{PK6vLAAuokw_@*XwI>^=)^ z+9H*v>^o6ig$XBXPuy61mG6xX65%B_`msF3+Y)|j zBW}?t=+%vJ1rr9UcUh_+wt!x#dh3LA2m!{XBof_IosL zg)sHj!0yfoJPZx4tFaCeBVZN|GJFjudm4cpE4H*PnuHY{mzD3?+hsabSFbhDKW9U%x*IscF_X0$xQX^mtFvx;*fR53hp3#pFIn?@aBA?De3M# zBgi9dT(|hkRa8fLI*iVR&tMo1ro@_7f(vK%ZRyj?>k3kO<7}DK(rqXP`T|A|oA_@% zcx{3^OuBHwtb#w3FH_xFNVDS4xz_|=>&dZC>ombi&L#B8O~;^$@_3u%t0YX*X=uMR z0qHVqp}&h#-*c%B?)YL*Z%^ z-FsiZ1CM@<*#mq^ulC4PilE}nA55kcB%)2pTm4yur2N{4T4wUoSw0!*X2JmzS=&(^ z!_q$sBQT|hk^G;_i#W2gaAR(q3dLwwiLebk-Js2DKuf{v+RM8a{rXI^nXwHHLM*2H zWYYOgtCs0!T@&c{>Luas(p)l|z^1+j#=7W(E44*LFGBToqh$zn9wF#kB-c_1Wy07| zn2#I$&`8%+-}hb|2auusGOG~-0WPX;eXpm+H-Pl1`dmsEKZQ8x=Di(sVZH7$z|PrT z*8Sne>@cG3eQRY?_yXV^O^F^A_P9jAu{D_o;pa0qKuWt2=ZX=J<`#44nE!2{nBmw- zqAFINTLVyeJHvex=?Si(s)ndq*X5`l>CcY8CbOnCy4?=MhxnLlUi-N<5nvIEv|nL_ ztyBL)i;qRb#juQLM?Wm3E;n>g+Vc^lzO|5Cww#%?D3N%@Jx`UJGV3&q8bP|9pWK{> z>)4xh#o9|wix1z|>OPVTaR>Ei=0H#0_Tk+7QrU8<8Z~6OWU)+@4A7z>;A^|TAD-7 zol*xILn|F`yW}$O?1%KB8Kqt!IHP|o1x{4JyrVDj@u#0e=tgxO1P|Y7a&{AjCyXDq z@!1odk}okWpDR8oY&NpKsn{NGvmpdh!g9vJ`vQr!ut|KgzBl(x*3>{{DLRuens?2( zJ&pX`Mm;2zkw5-9lSG^TVot+^p=tDvTRU;96XJbf#NmJB)$7?{ul3~^X(t!N_2k90 zn}d2cOA7;A?EJ`cvJW&2$5o`UN1gGBNWa4x{sNTAf*#C8e|f)F-K{6(TNG#YltsaA zin{ANjr7F&KhJYR|$y_FsmnTVPfZ~_^t#Z6ZvzDJ>1^6+1J6)n-i}uvRjd z3lx>39%GPVo_ovu66R`#WW!Kn#HA3L^s+07R`rjv1hYr?$9GZNb5ea7FX^{DCuENs`3zj!b2xh;JuG7Pk&|r0SPN3rsJ%%r$63&Jd|mC+`?gxhFepLa}l8 za=-kLIxnC|${a(*k4!vM~8E|Iw3#d8K_j4;w8%uaH z(<6H4P`Nbh+NtXOfRo2@z#!)oJaVe=-o_cNZ8~X5lF?hc6cM^pZIHR(H(JM5zt#tP ztE}mqJ2;eDBNlp_%=xi3h<6X&W{VYyFu;w`AjW#vL0TFc^Zk{a3NBnp3~FGR2CXUO zHE5sF0@{NZ7X_)(TFp5CgF)L3x!ELbiZXX#OA zYo!`sHX1KxGjLRWQ72av`X(;cjrYuD#Pd#eTAv&cE$G^l7)B|d&`&x87aM`O2FE5T z^*oF!k-(ROxs=(c$4ikJkpR2XV@mb>g<9tl+eMoCjLBComl-)4j(#O)C%pWqj4rHL z5mp@{#TTdh6tMbnLyy1lknjtl1mFJE1({)01cDG_lU%C7K{H7=WVe@EjMh&T(ba}g!=t>v9%7_S-Z1jrN-nq3e&0+j#43wl!!3lqPgtLIp_`? z-}tchY= zYVW-_r~kP>&vU--;=TDUzl+yMmjtK`AO_F?L|@37y{0`pbG`!rv?>Asd;kEz-@)6* zNdf|ff+1jkZx36iARlkP0Ndw&4z7qmC$O8px7QsYDZmB*hy(x>6B1mcucUp8@dFL= z)Oj6V2mvf-Y>El1l28>@3$$kaM`&3ijAVA78X4J#H5YVWg0Cg?*B2RXo$2PdlvA4B zOqzhM)VQIwma6XNH{u_g&N>U!OTeChi*(4b`@%)KOtM%Q3jO0Xx8BYo*iwOJ_4~7ytFHH=m?e!hn zNqWREv3D3Q)`plYYLn={*HqXQAtv^xdcylFk4=&&Z)z>^Qi%M`H94)4&{*{4c$7_ z?9&NzvpoV_(1?AFQ_bVTzg8AxQcVxP>EnNnKh6A#Rdl^4e5Cx`zlL*V(Dne?clm4; zs*51mJLw4-xoNiAD`0QVe`8&!@C}#3l>ME%!V1maj444aZgq8!Kuu(!{AxhavrOU? z1KlTCck}2$%TWluk2zKe@k_McB+XMfDL39$e)XDARqwq|@`{_hx8vOT$y8&%4#5&L zudJdDVKm*rXsslBEZn4)O74e&?XqZXuSS{)U6@!BBWuu|IquSQr?TpIdf~Ov74po@ zaR+zjZ1U)Ukmuob-7pe9(aI;J?NLC;JL2(*RJcsL@S#ce;7fHs>ukuA^uXUqXwi~0%n{&ABn2)N-aa!Mif=(fKsWF?6 zCb8%f?rqVP@Z0wJ>Zk|aH`UR@G_@as#%9IE?J*RJ%zli!VV~*z7-ZnJfBBq&l=CjE zS5#2-3v@b87ZfR{88eWUj(*C?2IMpbzMy-I$P5{2ECsjCZf}fpUy77^%p4dK_tlZ% zCvflk2@5NxUKdDV>9l0zSTzhxPAK}%h_L7E6sm^<-R~^@GV{tERNodM&N^S}gFi$lx zsG;|AO88--t%+qban1nS(Tv@)*b(xrk42Sd^-1g`6(GYupH}#ZS)p$nPwc)aZ%{|- zPDP{V-Hko;i=Ci|S$RK8=iz3L$e!-Fy`cE4F*~1;trz;cKyXMz00+F%oq;3?MwOr{ zNlBwqjjIu1S^-(u>Q+&dy<6f?n?3az1#X6N0hk7%WOD;zn z-MDJG6|j-BqrT_~=DQsQ4y(O%o)A;Z=Cja%gPBo@=n7xJP8-tosU);5ii0a{ z0&-Z_<}DM@JDgt$onxaDR0BgaTZ@L^ajwo+y`G?1p{gzm>X?y0Zq~RU zKt@>6r7+Mx=$fUv^KXO2Xlzex$uYWoefW6J(b0JM*Y3R@eQAGY4hFOE+NMO7tH`Eu zK^*o+Qwp&-@0Blt%U7TRSoL$*ku)LCVuB-7mXy>hyeogCm*CdGWV7u41xuZ5U@P5~ zEfegkz<*z#dyv`2ae3f(o7m=xcT0`zZ>EoE{j#po`{>Z!1}5qBL~}%fs+m2|6kp$! z=7ERO2$7Zf*FhZhZJZ2mZcU6~D{nfDl@i*AqOP|t4J-`=o0 zor^LcEDC29Y)&Ck7kw!2#qgQWk9wjG-dA&~WPIggYI5ZXVRW~@t{7?kSrKEZj{h{e zH(X9olj)R;pPlOpVzE#@Cwz$U*Gk`WfW**F*Mp*A@V`^8#{KDuqpl|mGVA!`IlI=t z9d^HS?JXn`Ml?)taVJUl{#)00d-ORxv@}1w+ptN5O`Wyk>M<#G;E;BmZ-!xpP+iSk zDku)K@(-vrwqSFFJk$&VqrDS#^!!-{J*F3=(#4)u;cu(4^e87?f7gQeCiDX)by*OK z&9f%c%{jcTLnqU&rJ#U3Fy&!W~ojWbaYC(feB>2jygFY9RANgonY=yx3bVJ zl$ov4;hj=UV{_7ya@;hv?|WVv_gms8sS6{P>~Gn+L>i@$ZH*0SCm2=@>@L4ZVG%@!#$5&;!g%uZnMZCApi8y8C%~3e)bGDyn^i;t-08O zbeveNI`3|e2kdEw1wW?e;up3*4m}Shbh4^yb^{X(zi$sav!yAmp|Xz@I3+)xcI zqY;DA28me4s<`~17ETqVbt(n}(NEtL2S#f5w3=hHUt{_>8z_HG_#>Y@dyRY_ly^Ws z|7wMWhfXtModIGKsGe@a8em3HnSaVW6z6CM%Z=1HWj6Y3uwwv-tsEwiCk@uL#kATT z5P1%}Wq1W}9OtZdMIXLqTSXa$N0yK$1q~T~OkNe)A}`35PT3J+^pEbngkzRxaEQR7 z+Y1*GOBm<0ym}M)Kly10q~B!sUv_N@<3&HF_|r@T6tk*4xNe~zL21`ud$YPyYXwh< zMCXp#&HWWA8U06Z)ODPC5e^z0@+ei literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/struct-0.8.11-compact.zip b/tests/ast-parsing/compile/struct-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..e52ba4f5b31366a407c05e579820291c708bb0b7 GIT binary patch literal 1420 zcma)+cT^Gx0LBr)y=UPp%~2QUh?K&WTXN*UJW(US9V+5w=fZNLXs0Eo)Am@R>?kC+ZrR`Ue`t8rA_G@KK^1hThZBxLxhM5Zc0r;*SyBc(A$N!s zp%*80;usO0`8RBdih#|#scI*e~meSi*A3plm1EOnJ$qN~ZE z#p8i(pFaoJ3Gyem44FAjgbZ+xxBLOU`+692Ex1{Ln0D5@^;U5zV8DK=M!nWn%<5rx zu4*DTq_2FRUScn;rAdcEv>mOVL?x@#me$PL6m#w;X2m|{G~9;Iy-xSgd1$p#&7RTT zrVzut?B2*$XBL#FuZQr=eDC}rcD(rLE8)dm-3$UzyhXp?9v6r)ZB|z%=?8_jaAZbC zQdL~WDXw1ai&_pT7LRMO6JObN$s9ED#%U9&OZw={YvG;3)m8D;G&(ARBr#@OZy=i2 zqA_sJrf-}H3CQx(X^7lKhP}IGjQFYYNNu9Kx-8 zR=p%XGu?mR%Sb~{DZTYrfNTcHoR8~iO{fR%-rZPqLBO{rWqmY)pNe7Yd50&pmzYix zXN4sE&~8I*n}|E*F5f&=SE9<=lAls8&p}a1sA*P*pC);u*TQ|Y^3qP~2LIdSp+fP; z@BMfEU9pS`x}v?^=PQ8AE)^7p^UP#M1w|d-VG`Y1B-S~vfs|pk!p;=-P!Q3|yyoS^ zekP`YFBiU%l+(YScEIozc{N~^{PAVk2f4-Rp*h12!cLwrm*4OK*LK72(rmCLezeMO zDkSg)?YNT-mo^nz77LPMKRQ_x!yYcJ>3JlTqDJG-^d;5x!V%gB=s+%Sh_gBZ94VaP zbQEd#z(Elw>AqTw0jkMn)+fG@IVcVyulW2$w4FjqJZ@MpUs-VMD=kK9ge}AB|>PvaE!>i&8nzjmT$sjxg3%-*`c5BQt z3wz*^%*tqTN)vEhl5$kk4-fAfn+nzr1hJ&k9!MdemGFOC@`ot@4O!?X{*N;~kYJIY OU!foM{6Sst&-D-7W0DyF literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/throw-0.8.11-compact.zip b/tests/ast-parsing/compile/throw-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a5bec52594f536683949acafb26f95f43969626d GIT binary patch literal 893 zcmWIWW@fQxU}E57&?vVI;fXG~bCrpKft!PYL79Ppp(LXyzg*Wq&s5JquQ)#^KDDAC zzo;ZWu_!qsvn*9Ft2jT8lZBNbmVu#xfx)(;Bi;CqapA&C=eAk%&N-Twsk&dTwKqu0 zPJKQ1Zqtn~4_7bU9>IM7BX4uVnf;+^*-zqLbe!F~!2it;?-}VUxI+HDUUo3@^o6U1 zzFUxzYZ-z_)i zGT+K2QHcwgqXigG^so8X>YeZ~bjw-cilD6v_t%7e4-L?A**(Sb{gzj|HUDSa?JV3; zs&nmv;00Ix&&+fG8NOe`SZHiy{B-ujNlUic_OvyW3V*o0_lI=(y9U3g%jLxizk{pZ z9{Ux`FZxh8qV;6<$w@vpR;`?*{%`&X)+5@>-?3(xM|nM0QHhoRu3p7+xNXs+-sktl z7TVs;+N&%q|9r*_eeH;OHi5aQs8LZRu!$EdKH*U`qx@>a ztwlvYWs;4vcIvl%Z@0|7z`9Me?9r4RW{)a# zn=E$t|oRiu0Hq87W~wWPd?hE`tvzzJM)TN+ueRQoxm)%au^rMzZ2<5PH!U2wLx zsrv6tA0BqkAUcpit1g-A#OK>&~e z00<&6!g$L#zJ|+bJ1Tp^L+o=tsp9DE~M5mEmIdt=Ks=&2q!#4RGxgi90 zC|0=96?`lHx$(f;{q9$gcGQ zEEo}04jnI7$}iz9c$~$_S-lZrE~W05bV{Ii=q~Q~#Fn??TyIfHZ@Ea>Zc;3R*RNNB z!XedOZx?Fn-k-L{=-wtQ9Mg1J)k*EC3x7aw2(DSGm92Oo-`yWzx_89U5F^y8r{JG9 zJ}DNLXVmFfP6RH9s!#S?_D_*~eD$K{Sd;VcPxga*_?C>ITg_oc zqrxKh#7Euvl=zmf_ddT%(7MD_$$EV}8B%z&=rJM+0bUXGH6?G@ac|IhQzaLx-GVi+ z`%+>9GykF9Szl$?SD~P?nq*7wAah&vbDcdi3 z{vg|h=xny2F5ZGwO)<~!NGfdc_G?-5Jl0{9eS%WaAHy1Q5}~L=?q|y;TjhNe^AeHW zD(xQE1Y-*YgJX;5vSCdhHpGv|hL;yoU{vC|!m0616>aa$XK+*6dIktGPKVDanCbU` zjh!GGwTy+`)4WWU61`nfe*jGN@yNe7K4q%5?O=7}N^^qRuAX^{8>SCQcbV*r$(~UQ z3K|TbBJ6Cd{Q)^Y08_b+&oQB33TmDV<-mR4D!sw$#f<(%yS|J~JDTZSt@NcAVtg1O zxD6U+LhI+~&~;_USCfY^i+L08D->ZlPTK_#vYvE1-s9P6Ckzwu;klrw(jx*fBwfJP zYN~-gKh^+t9`@k5A0AS?AUA(VEKKA}$uG~BC2cwIjk#7*4Jb4@E^*kc7(B`Y{e0yO zN#ck~pzCbQ3671_y$f9~!wOj6f{mDbQha%sqwiF?3FJiac^$^*)9YM)|HZ4{RNMKm zeXH=CD&c^Kq^pqd)4@k+T{sTXHl@)T?O@W6>!EM?!R%Ax>ZJ^q;M=#>NLQ|wf0`!P zcX#RE#09?^3cF(@_*4MB(70?j(;OT=E#J8@eo2O(<;i)O$CjH=_)TFVO{#QPhvTMZ znkp@)^E-r^9gez$xqBK?O zS4izM(ZZlo%FyDVtzo;S7KLCSvc!4!Kl=qq}~E`Zn!oexPZt%uo6J4HNn%rw$(BB zuCSbi1O^0Xk3zI3`EKr)9?2Eu868R}MUAI<;gkzZkqNjLazq>QIzCb54!wC$iK*kLzW5nXjQ1bOfl*h*~Wx&?aW@X zMJ*CZpELJdmdbRd*?+7tn+Zt~iN1wtuhsmD3?a(t);XOL?2%ZQc2OTRp$Ydr^TwWk z-xPXZ{-EvUQeB*koKl~ZKN(}_QdwAq*1yq-9y(FU(LS_PmQVv)s}48`Q+`KYZM-@d z(c`G5tTiJ!9r2yZ%WLy;69ZX`|2O7$NdK=g#D2v8gua)XB=|>NY{&jPIk)p00PqjD CT=^UT literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-import-0.8.11-compact.zip b/tests/ast-parsing/compile/top-level-import-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..fa5af877d0713a76744db9d5acdcee34d78775e2 GIT binary patch literal 2834 zcmb7`XEYlO1BIh8LMe*cTkNf5jj zC~9xD3BJDH|L@0l?~mu4d(Qp;m_dM~8h{&sTL2-nl2!S%6txu<01&AL07wD=fFNH# z2^1m(fs*j__VW!0l8}~El$4PS^hLQKLjN6HpaC$XX9z;_QJ}96B`F!e831?+0I0>s zd&m*x{0oK$>Qrc6fAjGKw{gWKTd=7MRo!fsuU_wrD6Y2y{@SO(Jne6@7W7(rxEBB8 z)0+odr;sd<_f%F_n^iuT+WM~)MPJkmi{bAmw@a6qaHQ1fTP10!b6&;ZkjAXXgtsn3 z;T3eOE%bExhq+Gym;(B#iv`^L=9>0JyHcmI^qgdAlvolaxX+Fl^^h(Hkty8W=6c?G zZFgl*b{)-$_=6nEj`th?B${vEWm*2g7GWxs5TKcQ$6W0l2|jD7(o}~9AKjhBTylkC za(@!kEG{-YI$Pz(@K#rrSMRbtK2nIahe)=JUGhT1^r@iy-BbcPbZiEjick)t8W+uK ze)R1re~LTl=87y;X3g*82%$7y5Gw~pvI8t1s`st-kL)o%eZDJDs8&b*?#01eeq8yR z3)4|Cw%SFuq0o$kQ5O?s|J=d+S|w{XA}aaIkCPd3M)_AjxDs?P{^$7*r3@FIH0qXy zMw#>Q-9t{9aQDHD)CKe#V${6%ZjpX(;Xa$5rySxQHm9Y&zEL|2?_vYp**?q51@*)` zC-_N#a_chIc|Pv2906Z+!OeY|QjVF5?jksQMn5xflUCer7d++#Is%t`IvjZ7^o$P0 ze(avsNO%;~g}t*BcsneZngOpaYH<>%*D(>95~?G07J(YERMcLcz7wZmoog&VL4->o)PSk&YhXI9 zNn0m3IjVb82yx=QkqiVXoDELne~f(?v7$7!ROyX=Z`#XcvhH64Rk_>ZLnaca@&H?{ zebxE$Gb0z=U6n~>G%CVw*HupWor9G(*P?j3cH0Ow*m$AK^Z7^5C!St`I@7CDv4J+* zBzFWamxEyn{YK-9W7#fYIl02+e8d&HW{T#@D>=j8LNE;HzW+K-=8XmOiAT&o`;CxA zlwRkhR69~j5KsgMVMj+aBpqgd30GLMG=RtJ)4Wwm7EAGUBjeJa+;#yF5FBjY{XB? zC{5~3A*eJKl(2hAN%K@e1-&S$41| z)vIr`RxGkR<*yTO;ExFu)j;eQaN5#!QU=?=DMUANx{pWA5!}EsGt<$}ydo8|mlay} zXZo5;);#7eAsS2T4r_UC4E-MH-B+x*@~x)it~udmD>p`bcw6(DamsD2;e%|j6Yp+D zO6C?x1DWa??VVdafd-bac~N0; zX0fI70vZSziy4q=c?~%@{Tt8txSG%WTw`_qh-5lrkfGD&En88mox0iW;jBnIU}Kp{ zaltt}+cOWLlc6UY2{DF7{k)0|UpQTkV!R*8EDYDboFbckRRBmU%r43875uu9{u*__rk20MtZ5dPTNQvc8d9cZpa~jr7P9b!2 zeJdy+V2RveLU?t=+Eo+T$IM&oBrUqwpd6x@p6u{};RvV!CUV^c2?X!!jqy{r1(rV> zAj*{pO}Lx*H%WwJ;k_&3u*w#kwr@IpY_zH~tDnI=SyW;W*E~#i^pScnIr&DC5v#Y+ z7(DSP{PAHNYOR{IAw|B?DYJf#iDQAys#ueQ+3g!qFW53k+uuAA0%G-QJ7^?dP+Ei3kPf^UOBSi2Fv(=;7v10c4 zh9XmuIE2>w4!L2W9Bor*H&K~RW^L$(vSG^_>95DlVPU`Ynq`6pS9&t8RWCD^xR1?O zRWggXre30Z1-ZruUulp?!%i@dU>w13p(RHK48-K&kTKboO=nJC7hm8d5L`=Us&w>< z&i&bgTF9%$i1tjtQQ|x;w_korM|Yp~Z3v`yj%gf^W0>E+<1}2M#?mBzLfE2Ju#04h zt5Lt0HGHG=kcQ3D9(L=ivm)1AP`JI4C*>y64S?a&!?v}zhZy0)8A$biP z%|MkGB2VSSF;Y+;UVS_CIXZ=J(LEu_;0sn%ez4{&IXWyIuq}%gEF3x@afE7yQ7;&8 zU_*FKM|;WOXVR9_8fzmj@Z)R@Ng@NXlRzMQq)N&){k@@Z>$^Ff*|`C_49n3G zqSmcWiEcU}`9P_wtvZU9q~5-q-%rlu$=r=7${}z`@pFDYEfjV6Hv=E#^`pJKz_+DZ z!*y(M*0t;1qkp_dWIzSg#VKD{L}@klfG!{%=G5E2;m@Q<8u2|M{vJgpB;(7s=l` M{pFj#<_iG)2b?NLAOHXW literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-import-bis-0.8.11-compact.zip b/tests/ast-parsing/compile/top-level-import-bis-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..59e7e93f2fa59fd8ededb830859f5b29584d9215 GIT binary patch literal 2411 zcmb7`c{tOL1IIr?a^@)af3VBt>+aNxjUBxc^vffOXEogfl;oUlOdNYeVphed6)-Oi+5cgEk zBsJe_m6f5;(1|U^-?-qG&8@FI7s2d_jZ)ha<-+BM53V@%fZklN%G3l}96#T8QoD}v z$l76jmtVrnJC5*MAfNe(lMu5wuQcx6X>cBo9V#rju0=DYuw?6w08_EBvhOb-Gj~0;a7*vSZK!OiG9g~;7{|q9W{`ckco)q4ZqX&2K-FS#_z^719<3@ zZ>nUh8lot1BbocfhnOPvE8wD+R^mtZ?T5+Gb?38fy?IR?AC#;j=N`z~@)A*#>I;?+ z`p?Z=HN+}vm1u;esYZG=&PDI}aChq64lj&Uj&1$uEY%}J5j91Izm>jJ&90b|adt8} z%l`3Pvg8k4)>d4rm2k#R-(~W&HR4l;K%L~uGT$D;B~?M%59z^`Hze-?#+=HZ$e~{@ zFG8vaj5PNJ%QVeF^j?qCD|^wCGuM)`0oOJD6aI7$DS-_I^_Bh{>0j5;sG=c`cHT*qyF?Ei?N z^3uo+gCOueM-$pCZq%4>ZkzKtd2m^CiORa9u}WasE2-6k&E_KuccN~_6#OH?3W|r> z3~M;&x3!AUOuM%1Z}gXFXX<<4%`m%M`2tlcoj+!o)A%-r6fXZP9@0^GAg zG9Ud529wEP%>-3XxZ$T|yW!++XvBb0Mh$|va2>OBb_Uf*kfqYROik*ksJ&Ui26=|2 z%m@soI{FS@{Vw;n*I@kXPSwkna{P!$PsbNR_niZ11OpuTjr>&T+J?o%z(fF$@V(IA z#K~4lyd;~RPLr~Or9TvmZqc)zQrUUBpL4d!2|}314km@#zm4;k*sa>S!VJ>C{;ee0 zlNDQ`BIK5Compp7;9pu6j#3WWnG21yg8oBb3#^E9kfoX`b>0B&bnuN zvPvoCcFJ^Kx|Fr}DtMHBXk;Z4*^IV;OS>*`^j-v|MrHTB>**YC5e^(i8wEM^p1I_e zo?b+7?w~f+|1eINC{-|cD!AJ!n%$isPmA*tBcz^h#s!)QP_cXh#w_yE)*U-1GbT_9 z`|smw+wY$D+ZwKG3_32Y$Y|n)5W-*U&*LJ$F=G!z@gqdeMi{*}Ok$~Ek8(t!U(Feq z+1r<}CZHT{rK}ter9fjJmffknwtQa4A{SG{Hvi*YNwZ~EOdSmZ$%q+;%yq!b@1c_1 z-|MZs^c{#05}SKaEn}%h6&>XKxOfC}P~m>!$wN7D?vq0}PKERfCwenOE3jTL&~{rg zPaRj5etm=+MQru(>#M%BM*C6c=^lO+x$ZuRs}I=|-wzJ^JIpvWQGw zfkqP#=NyLYgtv!()>SOT zon4D9HFA8Kq@29@RC?zv>9w$HZO&W>(*P^W`)(6#p=~*HZtk5O>`_gOm$yl~e(#H= z;d!@-gEeGL(yYF!U* z&{;Am@()7FzD$R>t}qe+2a^Cnkx|uWUwno^b4$tX&ptCrSzV}mm6P1YjT)WtWR_}u zqp(L?kPU`N*Ocy*in^>S)Uh%!@ts-*wTzbQUw6dt}-ExMb4cQhYq}}wg zL~7i*p#BB6)k8Q>x8mc2Rr3QPhl+q2U;1n)x)7%T+BCeWU(z$ejXob6Ei3s}edcy& z>y6el{}&EnA&lNRCoTogO=7Qn>&ebZwAN zzyiU`&DFGAufJYLx9QOYtl$i%3>g2n_WUuQ|0a&%FaCcCvVt?8{`+M3Q};jI`=e9< F@Gk^KdZ+*Z literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/top-level-nested-import-0.8.11-compact.zip b/tests/ast-parsing/compile/top-level-nested-import-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f7c01751dbfde5a55e6f248b3ef0ef3cd62f0846 GIT binary patch literal 2278 zcmbW3XEYlM1BOFlk7`A&Sl6z-i5d+Z8dr^&)uQ%{y@J{^sL)WmR*hB9h` z0XzZ#q5%M{K*m~;|*WB`vuHxh5y=1|lvN>CND&6pJO?F3FLP4WRWyT9u zawH;^CFeYP>L%wZ8dZxIdF4pF(un?C6TF#=Jhb?>`YtK+CPer8u?H&nk~HmtN~@zI zbiGb=+7`Wd(*GHmmu2&~{->jGa86+y0@HIze|yYe>wCAfV-vrjtG$YX#rW$Fdj98HeFu6ZqJ zaj+y~80}ueDopOfUDAFZ?FM$JUT;h&v3-U{cN!fzw$L4kn?}0~@O=t1=q-ajDz`WW zrV5-)1`rec_-|76JDHl5M{7~wXB>~h9=7$m$}u~5WD)OI;d4TLz|T|kLG7c*ozOS>l% zpri+5ZFGalsRnU2KJNB|egbI#x^kUeVe`8JHOl5+hNdn(*=|3_x`BMN zv(muyp=vR0O-;4h=oa`zlNABSc{cwXKl@GxBP-p?_cAj_Rd>fib=R7<)iJ^=TnbtB{augqVLeO zT%8ju&KXaiKS<+tNBPQvTpCREjesDPLL^wKFNNE$gm#-b@}zvZQOkj0Z^X~Fm3-L% z4$4THRSnD5dofeFFEAd=zk|0oOIHgg^Xan4toog@##7o?=>FclQ_Re+iBMuItiL~K zm?ABaeet{@_F?T?-WyQ7z+5ziWU-VB;Y;X`wLOckrqh-@WnMHH2dD{Aulu6^qH~y; z0aP?pR>S@gv(;B%(M|o>@3zUvBgf@v4XlmVjY_VY42ww{L8i3Ssyv;k83f)-vw$I4 z?F=j{c{O|y9VUV!0i5y#75lJ+mzwiTKd$KQ(@tW}$06W`o$&7(YmY&$HA|qbsRi61 zY`pjV`s4OO`5i+aAGhcUnZB22_)k3iQ9ZA!aOh~VR zjs!+WY`Wzcv(fO;6(D^`$yM<60+h`=chQRp3zn`vPF8wIA+BMREI?9~03Sc~35jPq zu{>H`?jQ9b5c3!FgoRNa{Gt&C6rt}Uem51-OkbnW z7yyHq!CSVvCf_4N?2n0Y6DpPsx&x0omMVthzjj7A40)C{TD7B1WdfMkH+EOWJwNms z!KUX>xP0jlkxBP1uG;X;_jDz-S|tNgx2D!Tz?pu(b{&z*qmk3g?YLpb^E*3u z(6NPPUOOpOebiv{2*?hvZ8D}WyDa%+JLu`9(ETdg`X}b6q1aVgYz6gMzXq(=osvmB z=Umbd8*dJ8n@~%bj5>!iTp)GX`B5V=f3J+z`sZmK$x24ku;s>OQ@AYqDU;>Ng8`dq zlm57kgM?JcUZJ*Y$L`q07vc9jV?SOBMHr^;}4_9BO=d%B5BmvO=nuF0gfc zE!OOc64+ryK1=kf1D-*EbE;?QP=De~D(aq!NC0TNN{Q5rm{9HGgXZ7vZtVORMY9-K zGM2HRMH9HV=8e4^o&9>395oiBSqz?40^#_b-0do+Y_5$iWp0p6(V!yFG{&7iIJp-;rCi z{3y9rAMfhAkL(uXRR_ZqMmUcuBzkCs;uZm~DW0|tLM(K$2c^$g6}8v3J59I0;}jXf z2aHf{&Wcs_U)T*-(pVWhb{Wn78t}X2z>d72?QL1(D6)PdQzDE#mi}cvm3wK3!>)$D zec*lZiM&O$LTB7%a#(^E62wq8`bY4AFTt=S@N0&dKKrh^*AEL;cTLkZQh(a zl^t0x2_2Zz0yAYM1PoJ<3l9B)Q}H{ytOLo>j9lYigXMNVVeUK+naM=dO?(^1M|8vx zn9`qNM-e>bGL%Flz=VfjTqi!{gl)Sa_+D#B-@2G-KeloyjLzUe`s~b(e=*Lnir_KfF6v^I16Vvg7Rg`MR{R{J2r{bLvE50MR(dUqT&eyhr2BcW>=3JMVs zTqpB$r>l8iZ@z%gpLH9kn@c^#O>e-l)`a?g^UK43?jelfRMa}a|E(LpjpM(Gruu{b XOFoR@G_-%tRKM%^o8G@|1_1aEyjnY* literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/trycatch-0.8.11-compact.zip b/tests/ast-parsing/compile/trycatch-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1b30a2ec2a35aa4785d7aec5e3308cb4707fcf1b GIT binary patch literal 6480 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 z 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 TGo+&a_eA!~_P-M;hWW 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 R_rG`GKSlgQZN7ike*mu6mu3I} literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/units_and_global_variables-0.8.11-compact.zip b/tests/ast-parsing/compile/units_and_global_variables-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..3244a816dba8c15d3f81d15ede317e1866a1ee9b GIT binary patch literal 10270 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 Ye+ma>&oA)Lo#$uWf9}XnBmuyG07D66L;wH) literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/variable-0.8.11-compact.zip b/tests/ast-parsing/compile/variable-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..a2812d048c6f9f8dc873f851a3dc57acd363ed8f GIT binary patch literal 4305 zcma)=RaYAfplpLni(8APSaFKAxRm1V4#5Ki2=4As+}$BiT!K5nrBFeOySvN%&V4^? zotcOIGCyF}R#iYj6$2mxZ~;sn0-ETBR5f(?0KlhQ0Duty0Jxhv+nAa`EZIMC@N<0P zaB+l~Sb9Poon1{#oz1~E?v@<3E{+aZsAvEq03Z+m5Q&Vm=6T|ADx95y3*qD-9BdeR zsKa8_$wfcbzUknr-yiTPZP7(pJ;wPg*mpy^o9z?a$7o;JrIDes&P@)Rt+OBBHjzq z_TVYpdVswIw6R4}Z|+;6>nGGY8&w==>ID=cn~mKh@!^adRcqB=x+eS6V&|8EcxBTb za0;G=2+s1{F;D(@Zhi}^Ke{DrQbfoEPR+&cH4rfq%S(z~Kbw(Dc8O0xjmw~n;;~pHU zH2I=E?&(TQN8@U)Cc^Q0K4%E~MwAp6>mcx`Iz zMQc1$N_wk!I?&VAQEf{OzeL$9HVMo#+7J5YyM=0}l4^*#Ke~W2_0}a~zuLXK+93pG zJ%Qd&(4PV1 zkdlsLa@}@Mv(KBI&p8s1E+ zd5q2voHCI2LYeIYEp^gE$R#3j&zuk4i>vgXhK3k4E9-;#|MA@$>DCCJmHg5^&-IT| zaGYC$jZLF}2d|7oIY3W6zVq~(3)$MH7Gf*L?ZhBaR}fcUbUF_a&OtDqeyB)voINX+ zEZu4Y@qTVHm7lf>H!}&@5FPP;Zckh+Eg43^yN{UC(nuu0Hmm&Jf7!5oX39-FaT;9c zB4ncay6nd1&3Au@dva9yx7^6i+tBNzXT!Q(AUZYA>R%v*V)$&Q;Tm+~+Ei)TxJu)p zUZCl#Bt2#878&GWF9Gqo^s^qa3->cj-B9BYJOIzPPqq`Riy&-UvC8z3o_?OjA+P50 z#*R+8Ju*uiuNvZ4YvB4G{CNLel>ypN6=b>Hyu;&R0=c&d9aG>a#VM&}#cu$`0DSoe zFsZ;8iTN;aft=)SDOoYUUL?eI{o+PdWt##k30CA=RT9r5c$dOij@LCfS&(x& z4jw7lE9S&QMTTpi?vJ%z^GL8|7FWz&?%3ZwVCSrosI+wUM^}Umn*PGZtsokDFfwJq zu{OIodS2ULG5WDn`O`reV$ZM?Nn4^N@3+mvg~r@^j(IDfCw8WX`1acft<33PQ;70` z)K~QBbtjXbJ)y@fg&C>p{-O5vcrlXq%nh||{48_qG%U!%N)dvQF%7x@NcJXdg(D`{ zrfk$w<79F>{yBrOGq{kBGIIzx@MO?NdUBZ&( z-LlGV=vf$;78u!ME1!ulL!g>rp~dl7?t40OW2qmwy_i>YFQl%42^WN`Ejwme;Np(7 zO~OBUR{Uf9#T>8Ua@5YpX%o)x9E49V99|+RDEdcw#V&IHtoyMH((}2`4OI~u`}zxg zW0iR`iu0})_(;TNjBfk#se{3y-hS3ZX@HdFy~s0@cKkNNH^BnGDG1{aU}i`k#&tu4 zO5ZaEunrc%%_^~%ePJ%jTt6?)3SVflZ$E{lX*y}NHzj&q7`W~Y!5g>hrwXsnwKn82 z3PS1>C<236YU?58Ed(!jl>5q8E+QNc~snoG<*!riKTnaA~? zRx?mW-|Z(al1x_h7DkMqD;<*Epp`JRf62CQrC)9!Tr#H$pR+s~#5)<>_Sw9a{Z z8MzdRuV)#3es+^J40RTixlk7rj_>%iwfE-qC&u*x3DQ4fHhO6dq154mhpPSGmqx!} zw(Zs?XZZKDwP-NAJoP%}yu34N6B~Yv27yFvOrzn0ob>e8jBYt_TgSY?I&1fW8&xdg zm1fqcdLA7|UgV*wyP~d8U?z+)*cj{*7u33UCGX1XW~lnr#3c9zo}ou*509Kh$l!|NdF% z_`&U+ssp|v*BKFtvFPk@$_lr_4v=_qRC7V8fZazrTAv^%t-1_T{-7>l@#f1%Oka?R zB6H*PBnFe>;r#$jxi1OLXM82ZUFpbH zbbU~dXSEFXtX~GvO9OV@H#j&eksem~QclN5V9a-9-1T&^PrCd$4~9jxzI+%wiJy;< z_Ulqlp)Wu}SwYZO2+@3>*|h}bc1frFtst+>6k4VLUcl7bZgqvefA(EsUC<1#GOvU* zqZHUgg~JrwoyVrGir_icY@4=FQmSiTq}q72Fy=eXah8UNZIW{yA}B?p+`lZbrwcRY z4;fM6;Dm9o_JOK`@zMYMr$zpZ2Xy;o4O#s%70UPehMIhEA7Fph{=s zWOR*O-1s1yVG>NJgp~_u$&I|jI~_b_4o!c9;h5dSkmzpPGpc*Z^0Ml`j@_a7<=~8V z#7+)zH*o_nH3oHjYIagZO}zw%7cV9k1Ha`RVD-Ihd3Zm1(2?s@gD4aEE$NQxhCGT4 ze0+To7`PStyZU4%#$$FY$NCd25mMb)at9@=CY&kd7(JZV*ms8ADUY7L9ZKW$V>xxN zC=BHe7CV;#ni%QaKFhT`2F%2}dYm)g&>nfjE~g9t=yx{}`v*?*;-j7TB|hD6Kc#rr zE}(4BJE>hn=(DUX@P^z#$N^u^Wj{LlcJ!$ASSulj!p+rD!CDLY|C$U1D@1_D%J>>`}WnHt==*7n8%k>+lPh~svk6< zSvJWiecewIILu*@nlQsa>ICmbyypo@FI=0@tz09obj#vzP4G>+LlNOW9wWvI2493r zBEn)J*iZ5$Wn3L98YNqy_@qNwlQ>+Hs3a)gMg^oaDelv!i1qIKLbAz@iDe-?iI$N3zL zNqb&JDy~f2JN4$`YTz{}T!Q9ElhpgxanMQV8UqR9(&zUstHnGAN+5p0`1@l7A#3R( za&Gf%p81Yf66p7eplZ+(U9y1uxLbpXu!%-vc#8>|D0z#XZ;a^m@$IlNI1JH!`%oSn23S9jrmMwQ4aj9)V_GfaKw zDVA1T>JCOgWPb^1N7<)DQ!>CP99rpXatHQ6N8wS9)O1lp&lv7;Q0JG8nET>T1xZTO`m5BA@IQsMG}3U{;(_t_MXnu)=y%y z?sjFP#SbOMuF<=nkOxkm27Gz#upExZaDO|HH2{@Sqg#Vgb*_7J8i6F^-bQ(F0_xO_=|^Y2W!6$9x#BBYo25NXHzg#y-cc$ zk`g@5H`$EHZvjNqXI0HZuBi#gMV`PM)i`m%?nIvXMo%k4*dR%&k|3-2dw51tIvf{Q zNZfxWH%e{YYAw6Tf;0>h6c$%AN7#J66opS0$C!fbCGR6>E6S$edH)0SF>iMpXHHje zcX7PX*Wt;Nd}nibL=z`B$Wxns3bl}n zO_6t+(G!@~Z+1TpvrU`o-fR7p>rQ?swM2wg8>0DP(t7_Z3O3d(b23yIZtuIvS%#T| zrs7_*gy;4k$l#XV)L_xShUJwbM&a5#i5Ad)Gz%dnCY?IDJF~q;7j3~i;k+KH6M5F0 zI;!0FPsIm~7lChQ8khdOc_ySMK8Zu!rWD-@X1m$t5F;usj8A7_(*q;SB| z?iIm`vhc9o(Yq`f^-<%1m1iMLnu>+DN@vcaNG@A<-t>7~D9WLXNk>Q3x794^tR=jB z5KI3(n4TTPkm*B++5e&#MA9G`wN5lqmj+c%wlH!7r>{GRS@%rO0NdwgWkK;U z)Hi>G-n9{3&VLlEf|6~)Rik&)iMLkb1BfktNvg#1DR12T5aryqi32Iq^dQ1R0`B97 z=`Y_Kb?e#Rv?~@NQ~6GQe@yb#4rI4$5}M-~qJl8(est0c==2a^HA!5f5QT+&hhYy_ z`o_28;|_4fidPiEEg(65Y5N#8ZGOiFG6c&hZn&R4xn28y!^5hlMkP8xbZR#!UTDxP zFI=P{tCuUHjfv#1G_=c;J?li(@hAN2_V1mD`U)=6Wh#7IL-8_<#j?;`zr3#PIM=OZ z{njU!O14YVArQizrf6G4V%|BV>d2I```qWz8|4%jcap0YCk;7ux(_$WUeo}Me#v~} z@3L|taA(w#B=vVmZm=>_bYcEDJB-RUGx$=c&*SP1!PQ&0ow5vBb`^^Hj- z>~hg^YfItU-cLzr= z=cmq2UJm{a0q(v&Vv^!eaY=Ecua~{^b3b4I0DA|2CpY&%XK@dtuMasf34j0q3;?La z#=6SswhlH2jlIVduI-hV6`VcsDuMt)U&;A1e1MFu&zGnD=ZmbB0H7kz~*3XRDUEENw7@Z_^gtPAaiDu{Yn$pd*Is8-Plp2e&!0*|1vth z)jE_JwHQXx^T!R&Ep*8!-wuOOVY^XU!Edbis>Q@4@q9XAz{S*XxWw#Y!s0g(%3>k= z(mns~7y2%4aFgHFxW*#3(y+eov^$wRF9lRld1%FYSQTrIyL^^2V~I<7O*AQ1?DQ#ii89k}`F~zX=w?w8He4a~1m$Z*w334g z;B1zjF+pV6{$Ag$CLRpvbi)d!=(uRDMzFrOD~9dU`-4)KGG_~`u&@=RxHaFtEW8&n z!DxCmTiBY?H#U*bN%6k2V*96wQqIITMfPHCnTtxOcf(A!U%IL1S_pnl>?N(7lrW1- zolFrj!?lp0*8V&<%&^T{GsB3nfroKKmt0z*?W^d=X`O@3tWR2L%Nu^zh@EEm#3Ql^ zwCu-PI;t@L#v_>nhq6Xtm}g!p?)dg9?_kMPr)GWYT$&SepQSBL33+4S37$-&{Y5~p zFpZzT){~*2Rs3tL2NSjLv>VHv-cd?cFjoa~XoAYM$KCqYfTH`kogi|DCfGRpG2h)t z`H79(@BCDsHm12%#{~HJH7Dwrju`vVhn!a~6|?(&&O8eoO0}Ww>w+~r2C|AN%?1@X zzsH7eMH}gfZUj#UjS;GanxMhbd#n$?*hdiWQ$M&rudZB#Rit5UjhoMAc_t3*SClS{ z|122ikeTSD*o~>yIjA(a76B_>R>mNMP@OVQBfFWA1zb9!bZ#&5`t8=tpqsM9wtR7E zRW+&gahy`MQZviQy6z!Kb(@pPqzx9D!dEI+nj0zn`)3}ca1CntpKTtv#Si(QS~1T& zkEPeEEvN-*6@8))^7oS)C0_}0LLMJbNJq4u^)c-}=I4~QON~f&f}{)Si=ZHqEnm6a zUPiR6=o3 z)#Tw$bys3wr|whlR!+;6YUOyIe5p;N19mhrU7<_p ze(Bg=n=C4q3x1ETTUuV2K~N1O=LR|L=1Bd})UJ~0Lzy{Nn!PEMdINdp2{S6fM7Dl& zG?u52`Xz{&VPoG;Tkp#O4W7sI zDqGfiN~yNRG}NJBhRdOQPYEgy*6jkfVdyA1wK^1g-W!TfLPiMqQ8cHd|HAlYhFVwN zc&2>x8pTDrwMzE7QmpI)l@)O~P@=*9mV!+7&cizM!G+1;z-015aFJ`IL)k$Jj%a`T z9~?1NPU0_ju;17-jAD_tjIK7lNn_=AcgmPojNbrr<_9IdADH6I+`r#lPPGlGN!rr- zGrnkazrIvN=G!R_;WfBCJ71Z~xNbrwYQ9nNhbV)@unttNhvghlE6vgq^dhK*suQw5 zYL;#%Hq~-^80QI_J=1Zb7UI+H&4-%@>xU^>WpwyS$Q_P{BhJ4X<-f+70NsIjm1=UE z&!EJ+fY0!;p*m*^IlX`2AJ;5EeDhAf-m>GaSj2F~T`3Y0@V3J6h+lZvyOn~u;OOrN z;pJ%@!Rgp1H*K`)g#U@M29h{HPK5>I&=4sN$j3;Bq60Kcb<1Ej{$4Jg9!+Cp36V)l zksJerV|wBSLm59WYL|+@0&lE2BS?{#gQ;9GX~f z1&zM%`NsgHsj>5(CQX8v`HaLOhq$&m2A?U*)RrwU)6(~ZqiH*&T2D!$!zXY4*jo&m zv5|e&aHM&3==Z2Ydx0Z1lqL#eVvZ&j*|Sga45xr;jc@KNhql=myz*Lgrh^C;&dV`z z6#Z_-J+gMe0wJAi^l(Rsb;0%H=80?Sp|G86{;>3!+v2W!$%_8PrV-3PY$C7{DX52W zEjLx`LJ3i~EzSIb$i6JCZ0mVR8Mm@3AeW*Q z1nmt)uD#=-J9W$B>-=pXY;2A3d#u-2&loBFycnbX4#wJZas;A@is5D>9wLP{Ck5tK zD?ymkzs1c1 zoKv&ZvTadYux4`77|#sk(bi@A7b8M_5tNT-5O>W4E~UFlx%tqw+4_O%gIsoE9lpMG((XTlWS^aM z=?8jnx_(m88}WI&10mRg(0yecSDi%cCNL0KmFR!N_OEUK8w}__^M5nf1V(b}KS$8t N+W+03f6WX4{|3n{WQqU) literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/while-0.8.11-compact.zip b/tests/ast-parsing/compile/while-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..0d0cb687e5dbdc31b7c9e5ab76a482aba25d3e8d GIT binary patch literal 1765 zcmajg`9IT-0|)RoGMR{+QGA$VuDO{zpAeZj;zN$)ST@(@$cVI$qlTyti;1}s+h=SM zA&OD193eT9EB9GMa(?=Le*Zo`uh$Q+$LlY6+S_oPFa_8FK0q0-@6^feS7QbOfRJ+l zAPoQj9*qe?sd@(m!NRdYUZ^M>HY~!+JIoi2iA2Ey!m%OTCpZC503ZN>F_Gx6b)Xem zG|>CPkT>sb2u7|+GAYeb+(d!N)1Xti)Ee`&)|F%O8*c)kyUAHTaQ50Fv8SfcZgtm& z>`w(d9gSMs&3An;2$1ijyx(rku$s)v`#434&M&QE$K90rNXb~&cq?O@K4-kweXxTW zRO)&Jk_pFHsy!#R=%0M85JNKh%&IdnJjrSBShi2O>f?JSOql6m@Z@h3k@iwqS+IC; z2Y#=yaL_ELuaiCypmRyCw?*vkji|ouaoTaM+vz3c09#%1eKjN;agGGW7OcJKtsl7p z{_Z(2^?5@_It02u(*AHalwcXcadL?(GcM|{1qJ>H&uO1|QHJ92_jp?e5fXA_Ir^eb zdAfW#d;vY$Xe&4(KP-x=I-lHn zr!F-bZgKCfVvj=V>5^&1%AvyOdujw1&ENMD3~40D&nVw%#OPu#^us_#uv$4rvyuCn3QvAfv=d!f@+@ZQ{51pCyfJBYv zPYK^{wd?aXCPkWFi!RKTMqsM*tS@e`u$18u^S$k0VNxS=VR1{AdAIIwz07585ATRM zJhmO{&ZjENv2U_P1kzz$o2x}tXXpx*qf2Q;HoAO5fN;8>W#GVz@S|xAHkc`_W~_a7lQ1d#eVf_PsW^a@YB=& zy8@IF{vcRxbg9z`#rd?Wt@{0R$3DnIS6hVQK`ULCrY0C)4Bp0F*%(&CX(=7F$X zjF_AY+cNyE=&J5<9Ahz!nxrqp_@LTBU=ERs`@AY@gkaY{o5o0iw%TV65~lL{pc!W+ zfAUU{@?97R9=-$$8TB-eoH0)OLXT{V(9LkUBs2hS&>cXW4=~;(9e)e*i zef7hAjf0rYXRxJUX_p!q9^9CAWUZ0^R}%at?F62AiL2Cqsz5x$f2-VxyqG(}tR+=e zYkaLlO1Z=oABp91$E?*6xmxERv=sYDXYiLD4_?vCE)1t@N7}5yBpcCKVM=Di?NdfELG$oUyc}_~7DiS1E-0XNHQ|SU zcgd5?$7WRx776I>?}>TqG6H$+K9REl#3n;Bg3~^R>#zY?_th4I1~WSt@?#+ge+GpnFqusU$7GxCbN| z#+yWBJ>0fG!;PYKAr(&f+bYG$`U4 zyL4Ll&X&T?WCxuO0__HJTm#YE&2@?gBma02sAS@so0CF_^g?LFm{4wcu>%m04Wz`A}Oc1$8~<6_-y zJr7~GH(1M0GI!rKsh?4Hiu0yG9p$66@D9+IZ#3-cUzvFet2dw*SP?6ywB?*<$RX=P zbMw=W%k`gT9^lu1k|C|5x$liwY7heFt_N#WkmhkWU2V#p! A9smFU literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/yul-0.8.11-compact.zip b/tests/ast-parsing/compile/yul-0.8.11-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..8b29281f0b79ea2111540336ad0f4e136fb03c74 GIT binary patch literal 5774 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\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: INLINE ASM 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/assignment-0.8.11-compact.json b/tests/ast-parsing/expected/assignment-0.8.11-compact.json new file mode 100644 index 000000000..8f9f9857b --- /dev/null +++ b/tests/ast-parsing/expected/assignment-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/binaryoperation-0.8.11-compact.json b/tests/ast-parsing/expected/binaryoperation-0.8.11-compact.json new file mode 100644 index 000000000..8939b57f2 --- /dev/null +++ b/tests/ast-parsing/expected/binaryoperation-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/break-0.8.11-compact.json b/tests/ast-parsing/expected/break-0.8.11-compact.json new file mode 100644 index 000000000..b9b7fc93e --- /dev/null +++ b/tests/ast-parsing/expected/break-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: BREAK 7\n\"];\n7->3;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: BREAK 20\n\"];\n20->16;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/call_to_variable-0.8.11-compact.json b/tests/ast-parsing/expected/call_to_variable-0.8.11-compact.json new file mode 100644 index 000000000..113bb5a14 --- /dev/null +++ b/tests/ast-parsing/expected/call_to_variable-0.8.11-compact.json @@ -0,0 +1,6 @@ +{ + "C": {}, + "D": { + "f(C)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/comment-0.8.11-compact.json b/tests/ast-parsing/expected/comment-0.8.11-compact.json new file mode 100644 index 000000000..a53745acd --- /dev/null +++ b/tests/ast-parsing/expected/comment-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/conditional-0.8.11-compact.json b/tests/ast-parsing/expected/conditional-0.8.11-compact.json new file mode 100644 index 000000000..6ef3d40e7 --- /dev/null +++ b/tests/ast-parsing/expected/conditional-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->6;\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->9;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n9->10;\n10[label=\"Node Type: IF 10\n\"];\n10->11[label=\"True\"];\n10->12[label=\"False\"];\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->13;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: END_IF 13\n\"];\n13->14;\n14[label=\"Node Type: IF 14\n\"];\n14->16[label=\"True\"];\n14->26[label=\"False\"];\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: END_IF 17\n\"];\n17->18;\n18[label=\"Node Type: IF 18\n\"];\n18->19[label=\"True\"];\n18->20[label=\"False\"];\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->21;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: IF 22\n\"];\n22->23[label=\"True\"];\n22->24[label=\"False\"];\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->25;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: END_IF 25\n\"];\n26[label=\"Node Type: IF 26\n\"];\n26->27[label=\"True\"];\n26->28[label=\"False\"];\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->29;\n28[label=\"Node Type: EXPRESSION 28\n\"];\n28->29;\n29[label=\"Node Type: END_IF 29\n\"];\n29->17;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/continue-0.8.11-compact.json b/tests/ast-parsing/expected/continue-0.8.11-compact.json new file mode 100644 index 000000000..bba15d9bd --- /dev/null +++ b/tests/ast-parsing/expected/continue-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n3->13;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: IF 6\n\"];\n6->7[label=\"True\"];\n6->8[label=\"False\"];\n7[label=\"Node Type: CONTINUE 7\n\"];\n7->2;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->5;\n11[label=\"Node Type: BEGIN_LOOP 11\n\"];\n11->14;\n12[label=\"Node Type: END_LOOP 12\n\"];\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->11;\n14[label=\"Node Type: IF_LOOP 14\n\"];\n14->17[label=\"True\"];\n14->12[label=\"False\"];\n15[label=\"Node Type: BEGIN_LOOP 15\n\"];\n15->18;\n16[label=\"Node Type: END_LOOP 16\n\"];\n16->24;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->15;\n18[label=\"Node Type: IF_LOOP 18\n\"];\n18->19[label=\"True\"];\n18->16[label=\"False\"];\n19[label=\"Node Type: IF 19\n\"];\n19->20[label=\"True\"];\n19->21[label=\"False\"];\n20[label=\"Node Type: CONTINUE 20\n\"];\n20->15;\n21[label=\"Node Type: END_IF 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->18;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->14;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/contract-0.8.11-compact.json b/tests/ast-parsing/expected/contract-0.8.11-compact.json new file mode 100644 index 000000000..1df28fb3d --- /dev/null +++ b/tests/ast-parsing/expected/contract-0.8.11-compact.json @@ -0,0 +1,19 @@ +{ + "A": {}, + "B": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "D": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "E": { + "constructor(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "F": {}, + "G": {}, + "H": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/custom_error-0.8.11-compact.json b/tests/ast-parsing/expected/custom_error-0.8.11-compact.json new file mode 100644 index 000000000..995b49f83 --- /dev/null +++ b/tests/ast-parsing/expected/custom_error-0.8.11-compact.json @@ -0,0 +1,16 @@ +{ + "VendingMachine": { + "err0()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err1()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "err2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "err3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + }, + "B": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "g()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "h()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/dowhile-0.8.11-compact.json b/tests/ast-parsing/expected/dowhile-0.8.11-compact.json new file mode 100644 index 000000000..1cf317575 --- /dev/null +++ b/tests/ast-parsing/expected/dowhile-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->4;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->9;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/emit-0.8.11-compact.json b/tests/ast-parsing/expected/emit-0.8.11-compact.json new file mode 100644 index 000000000..b043ced39 --- /dev/null +++ b/tests/ast-parsing/expected/emit-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "emitWithKeyword()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/enum-0.8.11-compact.json b/tests/ast-parsing/expected/enum-0.8.11-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/enum-0.8.11-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/event-0.8.11-compact.json b/tests/ast-parsing/expected/event-0.8.11-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/event-0.8.11-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/for-0.8.11-compact.json b/tests/ast-parsing/expected/for-0.8.11-compact.json new file mode 100644 index 000000000..fe24348d8 --- /dev/null +++ b/tests/ast-parsing/expected/for-0.8.11-compact.json @@ -0,0 +1,15 @@ +{ + "C": { + "normalLoopBlockBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopExprBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "normalLoopNoBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->5;\n}\n", + "loopNoPre()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoPreCond()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPrePost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->4[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n", + "loopNoCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->3;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->2;\n}\n", + "loopNoPreCondPost()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: BEGIN_LOOP 3\n\"];\n3->5;\n4[label=\"Node Type: END_LOOP 4\n\"];\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: BREAK 6\n\"];\n6->4;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->3;\n}\n", + "loopNoPreCondPostBody()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: BEGIN_LOOP 1\n\"];\n1->1;\n1->2;\n2[label=\"Node Type: END_LOOP 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/function-0.8.11-compact.json b/tests/ast-parsing/expected/function-0.8.11-compact.json new file mode 100644 index 000000000..50465d36d --- /dev/null +++ b/tests/ast-parsing/expected/function-0.8.11-compact.json @@ -0,0 +1,52 @@ +{ + "C1": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C2": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "fallback()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "receive()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C3": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "modifierNoArgs()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "modifierWithArgs(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + }, + "C4": { + "hasArgs(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasReturns()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "hasArgsAndReturns(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C5": { + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n}\n" + }, + "C6": { + "abstractFunc()": "digraph{\n}\n", + "abstractFunc2()": "digraph{\n}\n" + }, + "C7": { + "abstractFunc3()": "digraph{\n}\n" + }, + "C8": { + "abstractFunc3()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "abstractFunc2()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "payableFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "externalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "publicFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "privateFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "pureFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "viewFunc()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/functioncall-0.8.11-compact.json b/tests/ast-parsing/expected/functioncall-0.8.11-compact.json new file mode 100644 index 000000000..f266b62b1 --- /dev/null +++ b/tests/ast-parsing/expected/functioncall-0.8.11-compact.json @@ -0,0 +1,10 @@ +{ + "I": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n}\n", + "publicTarget()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "internalTarget(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/if-0.8.11-compact.json b/tests/ast-parsing/expected/if-0.8.11-compact.json new file mode 100644 index 000000000..c0c884b4e --- /dev/null +++ b/tests/ast-parsing/expected/if-0.8.11-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "ifWithoutElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: END_IF 3\n\"];\n}\n", + "ifWithElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->4;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "ifWithElseIf()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->9;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->8;\n5[label=\"Node Type: IF 5\n\"];\n5->6[label=\"True\"];\n5->7[label=\"False\"];\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n7->8;\n8[label=\"Node Type: END_IF 8\n\"];\n8->9;\n9[label=\"Node Type: END_IF 9\n\"];\n}\n", + "ifWithElseIfElse()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->7;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->6;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: END_IF 6\n\"];\n6->7;\n7[label=\"Node Type: END_IF 7\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexaccess-0.8.11-compact.json b/tests/ast-parsing/expected/indexaccess-0.8.11-compact.json new file mode 100644 index 000000000..43190fcd6 --- /dev/null +++ b/tests/ast-parsing/expected/indexaccess-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/indexrangeaccess-0.8.11-compact.json b/tests/ast-parsing/expected/indexrangeaccess-0.8.11-compact.json new file mode 100644 index 000000000..f4529bc86 --- /dev/null +++ b/tests/ast-parsing/expected/indexrangeaccess-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f(bytes)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/library_implicit_conversion-0.8.11-compact.json b/tests/ast-parsing/expected/library_implicit_conversion-0.8.11-compact.json new file mode 100644 index 000000000..81b56547c --- /dev/null +++ b/tests/ast-parsing/expected/library_implicit_conversion-0.8.11-compact.json @@ -0,0 +1,23 @@ +{ + "LibByte": { + "t(uint256,bytes1)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestByte": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibUint": { + "t(uint256,uint8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUint": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n" + }, + "LibInt": { + "t(uint256,int8)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "t(uint256,int256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "TestUintWithVariableiAndConversion": { + "test()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/literal-0.8.11-compact.json b/tests/ast-parsing/expected/literal-0.8.11-compact.json new file mode 100644 index 000000000..e1a35a0e7 --- /dev/null +++ b/tests/ast-parsing/expected/literal-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: EXPRESSION 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/memberaccess-0.8.11-compact.json b/tests/ast-parsing/expected/memberaccess-0.8.11-compact.json new file mode 100644 index 000000000..b66694f7a --- /dev/null +++ b/tests/ast-parsing/expected/memberaccess-0.8.11-compact.json @@ -0,0 +1,7 @@ +{ + "I": {}, + "F": {}, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/minmax-0.8.11-compact.json b/tests/ast-parsing/expected/minmax-0.8.11-compact.json new file mode 100644 index 000000000..228af371a --- /dev/null +++ b/tests/ast-parsing/expected/minmax-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/modifier-0.8.11-compact.json b/tests/ast-parsing/expected/modifier-0.8.11-compact.json new file mode 100644 index 000000000..34aad8ef1 --- /dev/null +++ b/tests/ast-parsing/expected/modifier-0.8.11-compact.json @@ -0,0 +1,8 @@ +{ + "C": { + "onePlaceholder()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "multiplePlaceholders()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n1->2;\n2[label=\"Node Type: _ 2\n\"];\n2->3;\n3[label=\"Node Type: _ 3\n\"];\n}\n", + "acceptsVar(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n", + "noParams()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/newexpression-0.8.11-compact.json b/tests/ast-parsing/expected/newexpression-0.8.11-compact.json new file mode 100644 index 000000000..e46dafe75 --- /dev/null +++ b/tests/ast-parsing/expected/newexpression-0.8.11-compact.json @@ -0,0 +1,8 @@ +{ + "B": { + "constructor()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n" + }, + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/pragma-0.8.11-compact.json b/tests/ast-parsing/expected/pragma-0.8.11-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/pragma-0.8.11-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/push-0.8.11-compact.json b/tests/ast-parsing/expected/push-0.8.11-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/push-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/return-0.8.11-compact.json b/tests/ast-parsing/expected/return-0.8.11-compact.json new file mode 100644 index 000000000..7eddd38f6 --- /dev/null +++ b/tests/ast-parsing/expected/return-0.8.11-compact.json @@ -0,0 +1,9 @@ +{ + "C": { + "returnConstant()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "returnVariable()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: RETURN 2\n\"];\n}\n", + "returnTuple()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: RETURN 3\n\"];\n}\n", + "returnTernary()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->3;\n3[label=\"Node Type: IF 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: RETURN 4\n\"];\n5[label=\"Node Type: RETURN 5\n\"];\n}\n", + "returnDelete()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/scope-0.8.11-compact.json b/tests/ast-parsing/expected/scope-0.8.11-compact.json new file mode 100644 index 000000000..00c3dbb1a --- /dev/null +++ b/tests/ast-parsing/expected/scope-0.8.11-compact.json @@ -0,0 +1,8 @@ +{ + "Scope": { + "nested_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n}\n", + "if_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: IF 1\n\"];\n1->2[label=\"True\"];\n1->3[label=\"False\"];\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->4;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: END_IF 4\n\"];\n}\n", + "while_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n}\n", + "for_scope()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->4;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->5;\n3[label=\"Node Type: END_LOOP 3\n\"];\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->2;\n5[label=\"Node Type: IF_LOOP 5\n\"];\n5->6[label=\"True\"];\n5->3[label=\"False\"];\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->5;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/struct-0.8.11-compact.json b/tests/ast-parsing/expected/struct-0.8.11-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/struct-0.8.11-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/throw-0.8.11-compact.json b/tests/ast-parsing/expected/throw-0.8.11-compact.json new file mode 100644 index 000000000..0008a4469 --- /dev/null +++ b/tests/ast-parsing/expected/throw-0.8.11-compact.json @@ -0,0 +1,3 @@ +{ + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-0.8.11-compact.json b/tests/ast-parsing/expected/top-level-0.8.11-compact.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/tests/ast-parsing/expected/top-level-0.8.11-compact.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-0.8.11-compact.json b/tests/ast-parsing/expected/top-level-import-0.8.11-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-import-bis-0.8.11-compact.json b/tests/ast-parsing/expected/top-level-import-bis-0.8.11-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-import-bis-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/top-level-nested-import-0.8.11-compact.json b/tests/ast-parsing/expected/top-level-nested-import-0.8.11-compact.json new file mode 100644 index 000000000..a1a35e654 --- /dev/null +++ b/tests/ast-parsing/expected/top-level-nested-import-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/trycatch-0.8.11-compact.json b/tests/ast-parsing/expected/trycatch-0.8.11-compact.json new file mode 100644 index 000000000..6099f6be4 --- /dev/null +++ b/tests/ast-parsing/expected/trycatch-0.8.11-compact.json @@ -0,0 +1,9 @@ +{ + "ERC20": { + "balanceOf(address)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": { + "tryCatchFunctionCall()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: TRY 2\n\"];\n2->3;\n2->5;\n2->7;\n3[label=\"Node Type: CATCH 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->7;\n5[label=\"Node Type: CATCH 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: TRY 7\n\"];\n7->8;\n7->10;\n7->12;\n8[label=\"Node Type: CATCH 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->12;\n10[label=\"Node Type: CATCH 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: TRY 12\n\"];\n12->13;\n12->15;\n12->17;\n12->19;\n13[label=\"Node Type: CATCH 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->19;\n15[label=\"Node Type: CATCH 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n16->19;\n17[label=\"Node Type: CATCH 17\n\"];\n17->18;\n18[label=\"Node Type: EXPRESSION 18\n\"];\n18->19;\n19[label=\"Node Type: TRY 19\n\"];\n19->20;\n19->21;\n20[label=\"Node Type: CATCH 20\n\"];\n21[label=\"Node Type: CATCH 21\n\"];\n21->22;\n22[label=\"Node Type: EXPRESSION 22\n\"];\n}\n", + "tryCatchContractDeployment()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: TRY 1\n\"];\n1->2;\n1->6;\n2[label=\"Node Type: CATCH 2\n\"];\n2->3;\n3[label=\"Node Type: TRY 3\n\"];\n3->4;\n3->5;\n4[label=\"Node Type: CATCH 4\n\"];\n5[label=\"Node Type: CATCH 5\n\"];\n6[label=\"Node Type: CATCH 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/tupleexpression-0.8.11-compact.json b/tests/ast-parsing/expected/tupleexpression-0.8.11-compact.json new file mode 100644 index 000000000..b5912e6b8 --- /dev/null +++ b/tests/ast-parsing/expected/tupleexpression-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unaryexpression-0.8.11-compact.json b/tests/ast-parsing/expected/unaryexpression-0.8.11-compact.json new file mode 100644 index 000000000..f7fcf9203 --- /dev/null +++ b/tests/ast-parsing/expected/unaryexpression-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/unchecked-0.8.11-compact.json b/tests/ast-parsing/expected/unchecked-0.8.11-compact.json new file mode 100644 index 000000000..557c3d932 --- /dev/null +++ b/tests/ast-parsing/expected/unchecked-0.8.11-compact.json @@ -0,0 +1,6 @@ +{ + "C": { + "f(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n", + "g(uint256,uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/units_and_global_variables-0.8.11-compact.json b/tests/ast-parsing/expected/units_and_global_variables-0.8.11-compact.json new file mode 100644 index 000000000..f1a57c142 --- /dev/null +++ b/tests/ast-parsing/expected/units_and_global_variables-0.8.11-compact.json @@ -0,0 +1,18 @@ +{ + "A": {}, + "I": {}, + "Test": { + "ether_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n", + "time_unit()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "block_and_transactions()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: EXPRESSION 16\n\"];\n}\n", + "abi_encode()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n}\n", + "member()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "error_handling()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n}\n", + "math_and_crypto()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: EXPRESSION 10\n\"];\n}\n", + "address_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: EXPRESSION 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n}\n", + "return_addr()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n}\n", + "address_edge_case()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "contract_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n}\n", + "type_related()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n2->3;\n3[label=\"Node Type: EXPRESSION 3\n\"];\n3->4;\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/using-for-0.8.11-compact.json b/tests/ast-parsing/expected/using-for-0.8.11-compact.json new file mode 100644 index 000000000..27fa7c323 --- /dev/null +++ b/tests/ast-parsing/expected/using-for-0.8.11-compact.json @@ -0,0 +1,9 @@ +{ + "L1": { + "f(uint256)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "L2": { + "f(bytes32)": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: RETURN 1\n\"];\n}\n" + }, + "C": {} +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variable-0.8.11-compact.json b/tests/ast-parsing/expected/variable-0.8.11-compact.json new file mode 100644 index 000000000..97689fda1 --- /dev/null +++ b/tests/ast-parsing/expected/variable-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "basic()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: NEW VARIABLE 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n11->12;\n12[label=\"Node Type: NEW VARIABLE 12\n\"];\n12->13;\n13[label=\"Node Type: NEW VARIABLE 13\n\"];\n13->14;\n14[label=\"Node Type: NEW VARIABLE 14\n\"];\n14->15;\n15[label=\"Node Type: NEW VARIABLE 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: NEW VARIABLE 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: NEW VARIABLE 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: NEW VARIABLE 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: NEW VARIABLE 23\n\"];\n23->24;\n24[label=\"Node Type: NEW VARIABLE 24\n\"];\n24->25;\n25[label=\"Node Type: NEW VARIABLE 25\n\"];\n25->26;\n26[label=\"Node Type: NEW VARIABLE 26\n\"];\n26->27;\n27[label=\"Node Type: NEW VARIABLE 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: NEW VARIABLE 29\n\"];\n29->30;\n30[label=\"Node Type: NEW VARIABLE 30\n\"];\n30->31;\n31[label=\"Node Type: NEW VARIABLE 31\n\"];\n31->32;\n32[label=\"Node Type: NEW VARIABLE 32\n\"];\n32->33;\n33[label=\"Node Type: NEW VARIABLE 33\n\"];\n33->34;\n34[label=\"Node Type: NEW VARIABLE 34\n\"];\n34->35;\n35[label=\"Node Type: NEW VARIABLE 35\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/variabledeclaration-0.8.11-compact.json b/tests/ast-parsing/expected/variabledeclaration-0.8.11-compact.json new file mode 100644 index 000000000..f9182c607 --- /dev/null +++ b/tests/ast-parsing/expected/variabledeclaration-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: NEW VARIABLE 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: NEW VARIABLE 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: NEW VARIABLE 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->12;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: NEW VARIABLE 11\n\"];\n12[label=\"Node Type: IF 12\n\"];\n12->13[label=\"True\"];\n12->14[label=\"False\"];\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->15;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: END_IF 15\n\"];\n15->10;\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/while-0.8.11-compact.json b/tests/ast-parsing/expected/while-0.8.11-compact.json new file mode 100644 index 000000000..4d9657391 --- /dev/null +++ b/tests/ast-parsing/expected/while-0.8.11-compact.json @@ -0,0 +1,5 @@ +{ + "C": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: BEGIN_LOOP 2\n\"];\n2->3;\n3[label=\"Node Type: IF_LOOP 3\n\"];\n3->4[label=\"True\"];\n3->5[label=\"False\"];\n4[label=\"Node Type: EXPRESSION 4\n\"];\n4->3;\n5[label=\"Node Type: END_LOOP 5\n\"];\n5->6;\n6[label=\"Node Type: EXPRESSION 6\n\"];\n6->7;\n7[label=\"Node Type: BEGIN_LOOP 7\n\"];\n7->8;\n8[label=\"Node Type: IF_LOOP 8\n\"];\n8->9[label=\"True\"];\n8->10[label=\"False\"];\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->8;\n10[label=\"Node Type: END_LOOP 10\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/ast-parsing/expected/yul-0.8.11-compact.json b/tests/ast-parsing/expected/yul-0.8.11-compact.json new file mode 100644 index 000000000..c7716d2db --- /dev/null +++ b/tests/ast-parsing/expected/yul-0.8.11-compact.json @@ -0,0 +1,7 @@ +{ + "L": {}, + "C": { + "f(uint256,uint256[])": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: NEW VARIABLE 1\n\"];\n1->2;\n2[label=\"Node Type: NEW VARIABLE 2\n\"];\n2->3;\n3[label=\"Node Type: INLINE ASM 3\n\"];\n3->4;\n4[label=\"Node Type: NEW VARIABLE 4\n\"];\n4->5;\n5[label=\"Node Type: EXPRESSION 5\n\"];\n5->6;\n6[label=\"Node Type: NEW VARIABLE 6\n\"];\n6->7;\n7[label=\"Node Type: EXPRESSION 7\n\"];\n7->8;\n8[label=\"Node Type: NEW VARIABLE 8\n\"];\n8->9;\n9[label=\"Node Type: EXPRESSION 9\n\"];\n9->10;\n10[label=\"Node Type: NEW VARIABLE 10\n\"];\n10->11;\n11[label=\"Node Type: EXPRESSION 11\n\"];\n11->12;\n12[label=\"Node Type: EXPRESSION 12\n\"];\n12->13;\n13[label=\"Node Type: EXPRESSION 13\n\"];\n13->14;\n14[label=\"Node Type: EXPRESSION 14\n\"];\n14->15;\n15[label=\"Node Type: EXPRESSION 15\n\"];\n15->16;\n16[label=\"Node Type: NEW VARIABLE 16\n\"];\n16->17;\n17[label=\"Node Type: EXPRESSION 17\n\"];\n17->18;\n18[label=\"Node Type: NEW VARIABLE 18\n\"];\n18->19;\n19[label=\"Node Type: EXPRESSION 19\n\"];\n19->20;\n20[label=\"Node Type: NEW VARIABLE 20\n\"];\n20->21;\n21[label=\"Node Type: EXPRESSION 21\n\"];\n21->22;\n22[label=\"Node Type: NEW VARIABLE 22\n\"];\n22->23;\n23[label=\"Node Type: EXPRESSION 23\n\"];\n23->24;\n24[label=\"Node Type: EXPRESSION 24\n\"];\n24->25;\n25[label=\"Node Type: EXPRESSION 25\n\"];\n25->26;\n26[label=\"Node Type: EXPRESSION 26\n\"];\n26->27;\n27[label=\"Node Type: EXPRESSION 27\n\"];\n27->28;\n28[label=\"Node Type: NEW VARIABLE 28\n\"];\n28->29;\n29[label=\"Node Type: EXPRESSION 29\n\"];\n}\n", + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: INLINE ASM 1\n\"];\n1->2;\n2[label=\"Node Type: EXPRESSION 2\n\"];\n}\n" + } +} \ No newline at end of file diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index 5543ef02f..bab4ad851 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -26,7 +26,7 @@ ALL_04 = range(0, 27) ALL_05 = range(0, 18) ALL_06 = range(0, 13) ALL_07 = range(0, 7) -ALL_08 = range(0, 11) +ALL_08 = range(0, 12) # these are tests that are currently failing right now XFAIL = ( From 94d0cde9e2e0de50b2df36b583b0bee51fc0b0ee Mon Sep 17 00:00:00 2001 From: Josselin Date: Tue, 25 Jan 2022 15:44:08 +0100 Subject: [PATCH 3/5] minor --- .github/workflows/ci.yml | 2 +- plugin_example/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 04d9ceb03..24352f124 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,4 +55,4 @@ jobs: TEST_TYPE: ${{ matrix.type }} GITHUB_ETHERSCAN: ${{ secrets.GITHUB_ETHERSCAN }} run: | - bash scripts/ci_test_${TEST_TYPE}.sh + bash "scripts/ci_test_${TEST_TYPE}.sh" diff --git a/plugin_example/README.md b/plugin_example/README.md index 6f8c4a6c1..1a0f915c8 100644 --- a/plugin_example/README.md +++ b/plugin_example/README.md @@ -1,6 +1,6 @@ # Slither, Plugin Example -This repo contains an example of plugin for Slither. +This repository contains an example of plugin for Slither. See the [detector documentation](https://github.com/trailofbits/slither/wiki/Adding-a-new-detector). From abf6ff61a2957e7a0f1e27e501ee9ec9d12a8dc1 Mon Sep 17 00:00:00 2001 From: Josselin Date: Tue, 25 Jan 2022 19:52:54 +0100 Subject: [PATCH 4/5] Update to pylint 2.12.2 --- CONTRIBUTING.md | 2 +- pyproject.toml | 3 +- setup.py | 5 +++- slither/__main__.py | 14 ++++----- .../data_dependency/data_dependency.py | 10 +++---- slither/core/compilation_unit.py | 2 +- slither/core/declarations/contract.py | 12 ++++---- slither/core/declarations/function.py | 14 ++++----- slither/core/declarations/structure.py | 2 +- slither/core/scope/scope.py | 6 ++-- slither/core/slither_core.py | 2 +- slither/core/solidity_types/array_type.py | 2 +- .../core/solidity_types/elementary_type.py | 2 +- slither/detectors/abstract_detector.py | 30 +++++++++---------- .../compiler_bugs/reused_base_constructor.py | 2 +- .../statements/incorrect_strict_equality.py | 2 +- .../detectors/statements/write_after_write.py | 4 +-- .../formatters/attributes/constant_pragma.py | 2 +- slither/printers/abstract_printer.py | 6 ++-- .../printers/inheritance/inheritance_graph.py | 4 +-- slither/printers/summary/evm.py | 6 ++-- slither/printers/summary/human_summary.py | 2 +- slither/slithir/convert.py | 4 +-- slither/slithir/tmp_operations/argument.py | 4 +-- slither/slithir/utils/ssa.py | 12 ++++---- slither/solc_parsing/declarations/function.py | 4 +-- .../slither_compilation_unit_solc.py | 4 +-- slither/tools/flattening/export/export.py | 4 +-- slither/tools/mutator/mutators/MIA.py | 2 +- slither/tools/mutator/mutators/MVIE.py | 2 +- slither/tools/mutator/mutators/MVIV.py | 2 +- .../mutator/mutators/abstract_mutator.py | 12 ++++---- slither/tools/properties/utils.py | 2 +- slither/tools/similarity/__main__.py | 2 +- slither/tools/similarity/cache.py | 2 +- slither/tools/similarity/encode.py | 4 +-- slither/tools/similarity/plot.py | 4 +-- slither/tools/similarity/test.py | 2 +- slither/tools/similarity/train.py | 2 +- slither/tools/slither_format/__main__.py | 4 +-- .../tools/slither_format/slither_format.py | 8 ++--- slither/tools/upgradeability/__main__.py | 6 ++-- .../upgradeability/checks/abstract_checks.py | 30 +++++++------------ slither/utils/command_line.py | 2 +- tests/test_ast_parsing.py | 14 ++++----- tests/test_detectors.py | 2 +- 46 files changed, 131 insertions(+), 137 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 20440aafc..5270dafac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,7 +37,7 @@ To run them locally in the root dir of the repository: - `pylint slither tests --rcfile pyproject.toml` - `black . --config pyproject.toml` -We use pylint `2.8.2` black `21.10b0`. +We use pylint `2.12.2` black `21.10b0`. ### Detectors tests For each new detector, at least one regression tests must be present. diff --git a/pyproject.toml b/pyproject.toml index 5a22e3c53..33e4b3fec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,5 +18,6 @@ logging-fstring-interpolation, logging-not-lazy, duplicate-code, import-error, -unsubscriptable-object +unsubscriptable-object, +consider-using-f-string """ diff --git a/setup.py b/setup.py index 417e54afb..762f4cd08 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,8 @@ from setuptools import setup, find_packages +with open("README.md", "r", encoding="utf-8") as f: + long_description = f.read() + setup( name="slither-analyzer", description="Slither is a Solidity static analysis framework written in Python 3.", @@ -16,7 +19,7 @@ setup( ], # dependency_links=["git+https://github.com/crytic/crytic-compile.git@master#egg=crytic-compile"], license="AGPL-3.0", - long_description=open("README.md", "r", encoding="utf-8").read(), + long_description=long_description, entry_points={ "console_scripts": [ "slither = slither.__main__:main", diff --git a/slither/__main__.py b/slither/__main__.py index eafa5a4c0..b92e727b7 100644 --- a/slither/__main__.py +++ b/slither/__main__.py @@ -173,13 +173,11 @@ def get_detectors_and_printers(): detector = None if not all(issubclass(detector, AbstractDetector) for detector in plugin_detectors): raise Exception( - "Error when loading plugin %s, %r is not a detector" % (entry_point, detector) + f"Error when loading plugin {entry_point}, {detector} is not a detector" ) printer = None if not all(issubclass(printer, AbstractPrinter) for printer in plugin_printers): - raise Exception( - "Error when loading plugin %s, %r is not a printer" % (entry_point, printer) - ) + raise Exception(f"Error when loading plugin {entry_point}, {printer} is not a printer") # We convert those to lists in case someone returns a tuple detectors += list(plugin_detectors) @@ -253,7 +251,7 @@ def choose_printers(args, all_printer_classes): if printer in printers: printers_to_run.append(printers[printer]) else: - raise Exception("Error: {} is not a printer".format(printer)) + raise Exception(f"Error: {printer} is not a printer") return printers_to_run @@ -303,7 +301,7 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_detector.add_argument( "--detect", help="Comma-separated list of detectors, defaults to all, " - "available detectors: {}".format(", ".join(d.ARGUMENT for d in detector_classes)), + f"available detectors: {', '.join(d.ARGUMENT for d in detector_classes)}", action="store", dest="detectors_to_run", default=defaults_flag_in_config["detectors_to_run"], @@ -312,7 +310,7 @@ def parse_args(detector_classes, printer_classes): # pylint: disable=too-many-s group_printer.add_argument( "--print", help="Comma-separated list fo contract information printers, " - "available printers: {}".format(", ".join(d.ARGUMENT for d in printer_classes)), + f"available printers: {', '.join(d.ARGUMENT for d in printer_classes)}", action="store", dest="printers_to_run", default=defaults_flag_in_config["printers_to_run"], @@ -657,7 +655,7 @@ def main_impl(all_detector_classes, all_printer_classes): outputting_sarif = args.sarif is not None outputting_sarif_stdout = args.sarif == "-" outputting_zip = args.zip is not None - if args.zip_type not in ZIP_TYPES_ACCEPTED.keys(): + if args.zip_type not in ZIP_TYPES_ACCEPTED: to_log = f'Zip type not accepted, it must be one of {",".join(ZIP_TYPES_ACCEPTED.keys())}' logger.error(to_log) diff --git a/slither/analyses/data_dependency/data_dependency.py b/slither/analyses/data_dependency/data_dependency.py index 638b1fc78..46d5add39 100644 --- a/slither/analyses/data_dependency/data_dependency.py +++ b/slither/analyses/data_dependency/data_dependency.py @@ -284,8 +284,8 @@ def compute_dependency_contract(contract, compilation_unit: "SlitherCompilationU if KEY_SSA in contract.context: return - contract.context[KEY_SSA] = dict() - contract.context[KEY_SSA_UNPROTECTED] = dict() + contract.context[KEY_SSA] = {} + contract.context[KEY_SSA_UNPROTECTED] = {} for function in contract.functions + contract.modifiers: compute_dependency_function(function) @@ -365,8 +365,8 @@ def compute_dependency_function(function): if KEY_SSA in function.context: return - function.context[KEY_SSA] = dict() - function.context[KEY_SSA_UNPROTECTED] = dict() + function.context[KEY_SSA] = {} + function.context[KEY_SSA_UNPROTECTED] = {} is_protected = function.is_protected() for node in function.nodes: @@ -417,7 +417,7 @@ def convert_variable_to_non_ssa(v): def convert_to_non_ssa(data_depencies): # Need to create new set() as its changed during iteration - ret = dict() + ret = {} for (k, values) in data_depencies.items(): var = convert_variable_to_non_ssa(k) if not var in ret: diff --git a/slither/core/compilation_unit.py b/slither/core/compilation_unit.py index 0647040b9..d8582b31a 100644 --- a/slither/core/compilation_unit.py +++ b/slither/core/compilation_unit.py @@ -61,7 +61,7 @@ class SlitherCompilationUnit(Context): self.counter_slithir_temporary = 0 self.counter_slithir_reference = 0 - self.scopes: Dict[Filename, FileScope] = dict() + self.scopes: Dict[Filename, FileScope] = {} @property def core(self) -> "SlitherCore": diff --git a/slither/core/declarations/contract.py b/slither/core/declarations/contract.py index dc71ccf5a..2a0adbca4 100644 --- a/slither/core/declarations/contract.py +++ b/slither/core/declarations/contract.py @@ -1093,9 +1093,11 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods if initializable in self.inheritance: self._is_upgradeable = True else: - for c in self.inheritance + [self]: + for contract in self.inheritance + [self]: # This might lead to false positive - lower_name = c.name.lower() + # Not sure why pylint is having a trouble here + # pylint: disable=no-member + lower_name = contract.name.lower() if "upgradeable" in lower_name or "upgradable" in lower_name: self._is_upgradeable = True break @@ -1257,7 +1259,7 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods """ from slither.slithir.variables import StateIRVariable - all_ssa_state_variables_instances = dict() + all_ssa_state_variables_instances = {} for contract in self.inheritance: for v in contract.state_variables_declared: @@ -1275,8 +1277,8 @@ class Contract(SourceMapping): # pylint: disable=too-many-public-methods func.generate_slithir_ssa(all_ssa_state_variables_instances) def fix_phi(self): - last_state_variables_instances = dict() - initial_state_variables_instances = dict() + last_state_variables_instances = {} + initial_state_variables_instances = {} for v in self._initial_state_variables: last_state_variables_instances[v.canonical_name] = [] initial_state_variables_instances[v.canonical_name] = v diff --git a/slither/core/declarations/function.py b/slither/core/declarations/function.py index f118990a7..9b2b4d214 100644 --- a/slither/core/declarations/function.py +++ b/slither/core/declarations/function.py @@ -882,7 +882,7 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu from slither.slithir.variables import Constant if self._return_values is None: - return_values = list() + return_values = [] returns = [n for n in self.nodes if n.type == NodeType.RETURN] [ # pylint: disable=expression-not-assigned return_values.extend(ir.values) @@ -903,7 +903,7 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu from slither.slithir.variables import Constant if self._return_values_ssa is None: - return_values_ssa = list() + return_values_ssa = [] returns = [n for n in self.nodes if n.type == NodeType.RETURN] [ # pylint: disable=expression-not-assigned return_values_ssa.extend(ir.values) @@ -1599,16 +1599,16 @@ class Function(SourceMapping, metaclass=ABCMeta): # pylint: disable=too-many-pu from slither.core.cfg.node import NodeType if not self.is_implemented: - return dict() + return {} if self._entry_point is None: - return dict() + return {} # node, values - to_explore: List[Tuple["Node", Dict]] = [(self._entry_point, dict())] + to_explore: List[Tuple["Node", Dict]] = [(self._entry_point, {})] # node -> values - explored: Dict = dict() + explored: Dict = {} # name -> instances - ret: Dict = dict() + ret: Dict = {} while to_explore: node, values = to_explore[0] diff --git a/slither/core/declarations/structure.py b/slither/core/declarations/structure.py index 860e56954..eb5f5e00d 100644 --- a/slither/core/declarations/structure.py +++ b/slither/core/declarations/structure.py @@ -12,7 +12,7 @@ class Structure(SourceMapping): super().__init__() self._name = None self._canonical_name = None - self._elems: Dict[str, "StructureVariable"] = dict() + self._elems: Dict[str, "StructureVariable"] = {} # Name of the elements in the order of declaration self._elems_ordered: List[str] = [] self.compilation_unit = compilation_unit diff --git a/slither/core/scope/scope.py b/slither/core/scope/scope.py index 08a534470..95b78a827 100644 --- a/slither/core/scope/scope.py +++ b/slither/core/scope/scope.py @@ -23,19 +23,19 @@ class FileScope: self.filename = filename self.accessible_scopes: List[FileScope] = [] - self.contracts: Dict[str, Contract] = dict() + self.contracts: Dict[str, Contract] = {} # Custom error are a list instead of a dict # Because we parse the function signature later on # So we simplify the logic and have the scope fields all populated self.custom_errors: Set[CustomErrorTopLevel] = set() - self.enums: Dict[str, EnumTopLevel] = dict() + self.enums: Dict[str, EnumTopLevel] = {} # Functions is a list instead of a dict # Because we parse the function signature later on # So we simplify the logic and have the scope fields all populated self.functions: Set[FunctionTopLevel] = set() self.imports: Set[Import] = set() self.pragmas: Set[Pragma] = set() - self.structures: Dict[str, StructureTopLevel] = dict() + self.structures: Dict[str, StructureTopLevel] = {} def add_accesible_scopes(self) -> bool: """ diff --git a/slither/core/slither_core.py b/slither/core/slither_core.py index 77f64ccd2..58e3279c4 100644 --- a/slither/core/slither_core.py +++ b/slither/core/slither_core.py @@ -254,7 +254,7 @@ class SlitherCore(Context): filename = self._previous_results_filename try: if os.path.isfile(filename): - with open(filename) as f: + with open(filename, encoding="utf8") as f: self._previous_results = json.load(f) if self._previous_results: for r in self._previous_results: diff --git a/slither/core/solidity_types/array_type.py b/slither/core/solidity_types/array_type.py index f07780e72..a93a976b9 100644 --- a/slither/core/solidity_types/array_type.py +++ b/slither/core/solidity_types/array_type.py @@ -46,7 +46,7 @@ class ArrayType(Type): def __str__(self): if self._length: - return str(self._type) + "[{}]".format(str(self._length_value)) + return str(self._type) + f"[{str(self._length_value)}]" return str(self._type) + "[]" def __eq__(self, other): diff --git a/slither/core/solidity_types/elementary_type.py b/slither/core/solidity_types/elementary_type.py index 423265845..b3d8e99dc 100644 --- a/slither/core/solidity_types/elementary_type.py +++ b/slither/core/solidity_types/elementary_type.py @@ -194,7 +194,7 @@ class ElementaryType(Type): @property def storage_size(self) -> Tuple[int, bool]: - if self._type == "string" or self._type == "bytes": + if self._type in ["string", "bytes"]: return 32, True if self.size is None: return 32, True diff --git a/slither/detectors/abstract_detector.py b/slither/detectors/abstract_detector.py index 5b3fe0e25..c01a43c22 100644 --- a/slither/detectors/abstract_detector.py +++ b/slither/detectors/abstract_detector.py @@ -72,27 +72,27 @@ class AbstractDetector(metaclass=abc.ABCMeta): if not self.HELP: raise IncorrectDetectorInitialization( - "HELP is not initialized {}".format(self.__class__.__name__) + f"HELP is not initialized {self.__class__.__name__}" ) if not self.ARGUMENT: raise IncorrectDetectorInitialization( - "ARGUMENT is not initialized {}".format(self.__class__.__name__) + f"ARGUMENT is not initialized {self.__class__.__name__}" ) if not self.WIKI: raise IncorrectDetectorInitialization( - "WIKI is not initialized {}".format(self.__class__.__name__) + f"WIKI is not initialized {self.__class__.__name__}" ) if not self.WIKI_TITLE: raise IncorrectDetectorInitialization( - "WIKI_TITLE is not initialized {}".format(self.__class__.__name__) + f"WIKI_TITLE is not initialized {self.__class__.__name__}" ) if not self.WIKI_DESCRIPTION: raise IncorrectDetectorInitialization( - "WIKI_DESCRIPTION is not initialized {}".format(self.__class__.__name__) + f"WIKI_DESCRIPTION is not initialized {self.__class__.__name__}" ) if not self.WIKI_EXPLOIT_SCENARIO and self.IMPACT not in [ @@ -100,17 +100,17 @@ class AbstractDetector(metaclass=abc.ABCMeta): DetectorClassification.OPTIMIZATION, ]: raise IncorrectDetectorInitialization( - "WIKI_EXPLOIT_SCENARIO is not initialized {}".format(self.__class__.__name__) + f"WIKI_EXPLOIT_SCENARIO is not initialized {self.__class__.__name__}" ) if not self.WIKI_RECOMMENDATION: raise IncorrectDetectorInitialization( - "WIKI_RECOMMENDATION is not initialized {}".format(self.__class__.__name__) + f"WIKI_RECOMMENDATION is not initialized {self.__class__.__name__}" ) if re.match("^[a-zA-Z0-9_-]*$", self.ARGUMENT) is None: raise IncorrectDetectorInitialization( - "ARGUMENT has illegal character {}".format(self.__class__.__name__) + f"ARGUMENT has illegal character {self.__class__.__name__}" ) if self.IMPACT not in [ @@ -121,7 +121,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): DetectorClassification.OPTIMIZATION, ]: raise IncorrectDetectorInitialization( - "IMPACT is not initialized {}".format(self.__class__.__name__) + f"IMPACT is not initialized {self.__class__.__name__}" ) if self.CONFIDENCE not in [ @@ -132,7 +132,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): DetectorClassification.OPTIMIZATION, ]: raise IncorrectDetectorInitialization( - "CONFIDENCE is not initialized {}".format(self.__class__.__name__) + f"CONFIDENCE is not initialized {self.__class__.__name__}" ) def _log(self, info: str) -> None: @@ -160,7 +160,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): self._format(self.compilation_unit, result) if not "patches" in result: continue - result["patches_diff"] = dict() + result["patches_diff"] = {} for file in result["patches"]: original_txt = self.compilation_unit.core.source_code[file].encode("utf8") patched_txt = original_txt @@ -189,9 +189,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): if results and self.slither.triage_mode: while True: indexes = input( - 'Results to hide during next runs: "0,1,...,{}" or "All" (enter to not hide results): '.format( - len(results) - ) + f'Results to hide during next runs: "0,1,...,{len(results)}" or "All" (enter to not hide results): ' ) if indexes == "All": self.slither.save_results_to_hide(results) @@ -243,7 +241,7 @@ class AbstractDetector(metaclass=abc.ABCMeta): info = "\n" for idx, result in enumerate(results): if self.slither.triage_mode: - info += "{}: ".format(idx) + info += f"{idx}: " info += result["description"] - info += "Reference: {}".format(self.WIKI) + info += f"Reference: {self.WIKI}" self._log(info) diff --git a/slither/detectors/compiler_bugs/reused_base_constructor.py b/slither/detectors/compiler_bugs/reused_base_constructor.py index eabf99557..2ad0b0a6a 100644 --- a/slither/detectors/compiler_bugs/reused_base_constructor.py +++ b/slither/detectors/compiler_bugs/reused_base_constructor.py @@ -77,7 +77,7 @@ The constructor of `A` is called multiple times in `D` and `E`: :param contract: The contract to detect explicit calls to a base constructor with arguments to. :return: Dictionary of function:list(tuple): { constructor : [(invoking_contract, called_by_constructor]} """ - results = dict() + results = {} # Create a set to track all completed contracts processed_contracts = set() diff --git a/slither/detectors/statements/incorrect_strict_equality.py b/slither/detectors/statements/incorrect_strict_equality.py index 20843e425..9a2234f4f 100644 --- a/slither/detectors/statements/incorrect_strict_equality.py +++ b/slither/detectors/statements/incorrect_strict_equality.py @@ -106,7 +106,7 @@ contract Crowdsale{ # Retrieve all tainted (node, function) pairs def tainted_equality_nodes(self, funcs, taints): - results = dict() + results = {} taints += self.sources_taint for func in funcs: diff --git a/slither/detectors/statements/write_after_write.py b/slither/detectors/statements/write_after_write.py index c9978188f..ea654f79d 100644 --- a/slither/detectors/statements/write_after_write.py +++ b/slither/detectors/statements/write_after_write.py @@ -88,7 +88,7 @@ def _detect_write_after_write( _handle_ir(ir, written, ret) if len(node.sons) > 1: - written = dict() + written = {} for son in node.sons: _detect_write_after_write(son, explored, dict(written), ret) @@ -128,7 +128,7 @@ class WriteAfterWrite(AbstractDetector): for function in contract.functions: if function.entry_point: ret = [] - _detect_write_after_write(function.entry_point, set(), dict(), ret) + _detect_write_after_write(function.entry_point, set(), {}, ret) for var, node1, node2 in ret: info = [var, " is written in both\n\t", node1, "\n\t", node2, "\n"] diff --git a/slither/formatters/attributes/constant_pragma.py b/slither/formatters/attributes/constant_pragma.py index 8cb35b81e..572ad2fdf 100644 --- a/slither/formatters/attributes/constant_pragma.py +++ b/slither/formatters/attributes/constant_pragma.py @@ -34,7 +34,7 @@ def custom_format(slither, result): def _analyse_versions(used_solc_versions): - replace_solc_versions = list() + replace_solc_versions = [] for version in used_solc_versions: replace_solc_versions.append(_determine_solc_version_replacement(version)) if not all(version == replace_solc_versions[0] for version in replace_solc_versions): diff --git a/slither/printers/abstract_printer.py b/slither/printers/abstract_printer.py index 7a60aa1ae..f58f92f91 100644 --- a/slither/printers/abstract_printer.py +++ b/slither/printers/abstract_printer.py @@ -21,17 +21,17 @@ class AbstractPrinter(metaclass=abc.ABCMeta): if not self.HELP: raise IncorrectPrinterInitialization( - "HELP is not initialized {}".format(self.__class__.__name__) + f"HELP is not initialized {self.__class__.__name__}" ) if not self.ARGUMENT: raise IncorrectPrinterInitialization( - "ARGUMENT is not initialized {}".format(self.__class__.__name__) + f"ARGUMENT is not initialized {self.__class__.__name__}" ) if not self.WIKI: raise IncorrectPrinterInitialization( - "WIKI is not initialized {}".format(self.__class__.__name__) + f"WIKI is not initialized {self.__class__.__name__}" ) def info(self, info): diff --git a/slither/printers/inheritance/inheritance_graph.py b/slither/printers/inheritance/inheritance_graph.py index f0da17c59..7ff819a55 100644 --- a/slither/printers/inheritance/inheritance_graph.py +++ b/slither/printers/inheritance/inheritance_graph.py @@ -102,10 +102,10 @@ class PrinterInheritanceGraph(AbstractPrinter): if len(contract.immediate_inheritance) == 1: ret += "%s -> %s;\n" % (contract.name, contract.immediate_inheritance[0]) else: - for i in range(0, len(contract.immediate_inheritance)): + for i, immediate_inheritance in enumerate(contract.immediate_inheritance): ret += '%s -> %s [ label="%s" ];\n' % ( contract.name, - contract.immediate_inheritance[i], + immediate_inheritance, i + 1, ) diff --git a/slither/printers/summary/evm.py b/slither/printers/summary/evm.py index 6b600257a..027b41ef3 100644 --- a/slither/printers/summary/evm.py +++ b/slither/printers/summary/evm.py @@ -57,6 +57,7 @@ def _extract_evm_info(slither): return evm_info +# pylint: disable=too-many-locals class PrinterEVM(AbstractPrinter): ARGUMENT = "evm" HELP = "Print the evm instructions of nodes in functions" @@ -84,9 +85,8 @@ class PrinterEVM(AbstractPrinter): contract_file = self.slither.source_code[ contract.source_mapping["filename_absolute"] ].encode("utf-8") - contract_file_lines = open( - contract.source_mapping["filename_absolute"], "r" - ).readlines() + with open(contract.source_mapping["filename_absolute"], "r", encoding="utf8") as f: + contract_file_lines = f.readlines() contract_pcs = {} contract_cfg = {} diff --git a/slither/printers/summary/human_summary.py b/slither/printers/summary/human_summary.py index c3c94c9a1..ec1282f78 100644 --- a/slither/printers/summary/human_summary.py +++ b/slither/printers/summary/human_summary.py @@ -308,7 +308,7 @@ class PrinterHumanSummary(AbstractPrinter): "number_lines_assembly": 0, "standard_libraries": [], "ercs": [], - "number_findings": dict(), + "number_findings": {}, "detectors": [], } diff --git a/slither/slithir/convert.py b/slither/slithir/convert.py index 4e624df0e..a1ebef063 100644 --- a/slither/slithir/convert.py +++ b/slither/slithir/convert.py @@ -490,7 +490,7 @@ def propagate_types(ir, node: "Node"): # pylint: disable=too-many-locals # propagate the type node_function = node.function using_for = ( - node_function.contract.using_for if isinstance(node_function, FunctionContract) else dict() + node_function.contract.using_for if isinstance(node_function, FunctionContract) else {} ) if isinstance(ir, OperationWithLValue): # Force assignment in case of missing previous correct type @@ -853,7 +853,7 @@ def extract_tmp_call(ins: TmpCall, contract: Optional[Contract]): # pylint: dis # } node_func = ins.node.function using_for = ( - node_func.contract.using_for if isinstance(node_func, FunctionContract) else dict() + node_func.contract.using_for if isinstance(node_func, FunctionContract) else {} ) targeted_libraries = ( diff --git a/slither/slithir/tmp_operations/argument.py b/slither/slithir/tmp_operations/argument.py index 1e1ab79f3..746bc13f2 100644 --- a/slither/slithir/tmp_operations/argument.py +++ b/slither/slithir/tmp_operations/argument.py @@ -42,5 +42,5 @@ class Argument(Operation): def __str__(self): call_id = "none" if self.call_id: - call_id = "(id ({}))".format(self.call_id) - return "ARG_{} {} {}".format(self._type.name, str(self._argument), call_id) + call_id = f"(id ({self.call_id}))" + return f"ARG_{self._type.name} {str(self._argument)} {call_id}" diff --git a/slither/slithir/utils/ssa.py b/slither/slithir/utils/ssa.py index b3b0edebc..a6499f362 100644 --- a/slither/slithir/utils/ssa.py +++ b/slither/slithir/utils/ssa.py @@ -109,7 +109,7 @@ def add_ssa_ir(function, all_state_variables_instances): if not function.is_implemented: return - init_definition = dict() + init_definition = {} for v in function.parameters: if v.name: init_definition[v.name] = (v, function.entry_point) @@ -127,7 +127,7 @@ def add_ssa_ir(function, all_state_variables_instances): # rvalues are fixed in solc_parsing.declaration.function function.entry_point.add_ssa_ir(Phi(StateIRVariable(variable_instance), set())) - add_phi_origins(function.entry_point, init_definition, dict()) + add_phi_origins(function.entry_point, init_definition, {}) for node in function.nodes: for (variable, nodes) in node.phi_origins_local_variables.values(): @@ -143,7 +143,7 @@ def add_ssa_ir(function, all_state_variables_instances): # continue node.add_ssa_ir(Phi(StateIRVariable(variable), nodes)) - init_local_variables_instances = dict() + init_local_variables_instances = {} for v in function.parameters: if v.name: new_var = LocalIRVariable(v) @@ -232,9 +232,9 @@ def generate_ssa_irs( # these variables are lived only during the liveness of the block # They dont need phi function - temporary_variables_instances = dict() - reference_variables_instances = dict() - tuple_variables_instances = dict() + temporary_variables_instances = {} + reference_variables_instances = {} + tuple_variables_instances = {} for ir in node.irs: new_ir = copy_ir( diff --git a/slither/solc_parsing/declarations/function.py b/slither/solc_parsing/declarations/function.py index 7551411ea..50eda9acc 100644 --- a/slither/solc_parsing/declarations/function.py +++ b/slither/solc_parsing/declarations/function.py @@ -83,8 +83,8 @@ class FunctionSolc(CallerContextExpression): self._analyze_type() - self._node_to_nodesolc: Dict[Node, NodeSolc] = dict() - self._node_to_yulobject: Dict[Node, YulBlock] = dict() + self._node_to_nodesolc: Dict[Node, NodeSolc] = {} + self._node_to_yulobject: Dict[Node, YulBlock] = {} self._local_variables_parser: List[ Union[LocalVariableSolc, LocalVariableInitFromTupleSolc] diff --git a/slither/solc_parsing/slither_compilation_unit_solc.py b/slither/solc_parsing/slither_compilation_unit_solc.py index fc1c5b3eb..ffc201714 100644 --- a/slither/solc_parsing/slither_compilation_unit_solc.py +++ b/slither/solc_parsing/slither_compilation_unit_solc.py @@ -37,7 +37,7 @@ class SlitherCompilationUnitSolc: self._parsed = False self._analyzed = False - self._underlying_contract_to_parser: Dict[Contract, ContractSolc] = dict() + self._underlying_contract_to_parser: Dict[Contract, ContractSolc] = {} self._structures_top_level_parser: List[StructureTopLevelSolc] = [] self._custom_error_parser: List[CustomErrorSolc] = [] self._variables_top_level_parser: List[TopLevelVariableSolc] = [] @@ -636,7 +636,7 @@ Please rename it, this name is reserved for Slither's internals""" for func in self._compilation_unit.functions_top_level: func.generate_slithir_and_analyze() - func.generate_slithir_ssa(dict()) + func.generate_slithir_ssa({}) self._compilation_unit.propagate_function_calls() for contract in self._compilation_unit.contracts: contract.fix_phi() diff --git a/slither/tools/flattening/export/export.py b/slither/tools/flattening/export/export.py index 75b9ac941..e9b4552ef 100644 --- a/slither/tools/flattening/export/export.py +++ b/slither/tools/flattening/export/export.py @@ -37,7 +37,7 @@ def save_to_disk(files: List[Export]): Save projects to a zip """ for file in files: - with open(file.filename, "w") as f: + with open(file.filename, "w", encoding="utf8") as f: logger.info(f"Export {file.filename}") f.write(file.content) @@ -53,5 +53,5 @@ def export_as_json(files: List[Export], filename: str): print(json.dumps(files_as_dict)) else: logger.info(f"Export {filename}") - with open(filename, "w") as f: + with open(filename, "w", encoding="utf8") as f: json.dump(files_as_dict, f) diff --git a/slither/tools/mutator/mutators/MIA.py b/slither/tools/mutator/mutators/MIA.py index b8a33cb95..d0ff1b3ea 100644 --- a/slither/tools/mutator/mutators/MIA.py +++ b/slither/tools/mutator/mutators/MIA.py @@ -11,7 +11,7 @@ class MIA(AbstractMutator): # pylint: disable=too-few-public-methods def _mutate(self): - result = dict() + result = {} for contract in self.slither.contracts: diff --git a/slither/tools/mutator/mutators/MVIE.py b/slither/tools/mutator/mutators/MVIE.py index 1c631edcf..7e91b9324 100644 --- a/slither/tools/mutator/mutators/MVIE.py +++ b/slither/tools/mutator/mutators/MVIE.py @@ -11,7 +11,7 @@ class MVIE(AbstractMutator): # pylint: disable=too-few-public-methods def _mutate(self): - result = dict() + result = {} for contract in self.slither.contracts: diff --git a/slither/tools/mutator/mutators/MVIV.py b/slither/tools/mutator/mutators/MVIV.py index cbdf7fdf0..db1fb4d33 100644 --- a/slither/tools/mutator/mutators/MVIV.py +++ b/slither/tools/mutator/mutators/MVIV.py @@ -11,7 +11,7 @@ class MVIV(AbstractMutator): # pylint: disable=too-few-public-methods def _mutate(self): - result = dict() + result = {} for contract in self.slither.contracts: diff --git a/slither/tools/mutator/mutators/abstract_mutator.py b/slither/tools/mutator/mutators/abstract_mutator.py index 26f47c3c3..d01970923 100644 --- a/slither/tools/mutator/mutators/abstract_mutator.py +++ b/slither/tools/mutator/mutators/abstract_mutator.py @@ -41,33 +41,33 @@ class AbstractMutator(metaclass=abc.ABCMeta): # pylint: disable=too-few-public- if not self.NAME: raise IncorrectMutatorInitialization( - "NAME is not initialized {}".format(self.__class__.__name__) + f"NAME is not initialized {self.__class__.__name__}" ) if not self.HELP: raise IncorrectMutatorInitialization( - "HELP is not initialized {}".format(self.__class__.__name__) + f"HELP is not initialized {self.__class__.__name__}" ) if self.FAULTCLASS == FaulClass.Undefined: raise IncorrectMutatorInitialization( - "FAULTCLASS is not initialized {}".format(self.__class__.__name__) + f"FAULTCLASS is not initialized {self.__class__.__name__}" ) if self.FAULTNATURE == FaultNature.Undefined: raise IncorrectMutatorInitialization( - "FAULTNATURE is not initialized {}".format(self.__class__.__name__) + f"FAULTNATURE is not initialized {self.__class__.__name__}" ) if rate < 0 or rate > 100: raise IncorrectMutatorInitialization( - "rate must be between 0 and 100 {}".format(self.__class__.__name__) + f"rate must be between 0 and 100 {self.__class__.__name__}" ) @abc.abstractmethod def _mutate(self) -> Dict: """TODO Documentation""" - return dict() + return {} def mutate(self) -> None: all_patches = self._mutate() diff --git a/slither/tools/properties/utils.py b/slither/tools/properties/utils.py index 541d85712..bdc5bdd68 100644 --- a/slither/tools/properties/utils.py +++ b/slither/tools/properties/utils.py @@ -32,5 +32,5 @@ def write_file( logger.info(yellow(f"Overwrite {file_to_write}")) else: logger.info(green(f"Write {file_to_write}")) - with open(file_to_write, "w") as f: + with open(file_to_write, "w", encoding="utf8") as f: f.write(content) diff --git a/slither/tools/similarity/__main__.py b/slither/tools/similarity/__main__.py index f7b2692ad..21ba88681 100755 --- a/slither/tools/similarity/__main__.py +++ b/slither/tools/similarity/__main__.py @@ -95,7 +95,7 @@ def main(): elif mode == "plot": plot(args) else: - to_log = "Invalid mode!. It should be one of these: %s" % ", ".join(modes) + to_log = f"Invalid mode!. It should be one of these: {', '.join(modes)}" logger.error(to_log) sys.exit(-1) diff --git a/slither/tools/similarity/cache.py b/slither/tools/similarity/cache.py index 81df40972..53fc7f5f0 100644 --- a/slither/tools/similarity/cache.py +++ b/slither/tools/similarity/cache.py @@ -9,7 +9,7 @@ except ImportError: def load_cache(infile, nsamples=None): - cache = dict() + cache = {} with np.load(infile, allow_pickle=True) as data: array = data["arr_0"][0] for i, (x, y) in enumerate(array): diff --git a/slither/tools/similarity/encode.py b/slither/tools/similarity/encode.py index 5313e9c7c..67ed008b2 100644 --- a/slither/tools/similarity/encode.py +++ b/slither/tools/similarity/encode.py @@ -75,7 +75,7 @@ def parse_target(target): def load_and_encode(infile, vmodel, ext=None, nsamples=None, **kwargs): - r = dict() + r = {} if infile.endswith(".npz"): r = load_cache(infile, nsamples=nsamples) else: @@ -222,7 +222,7 @@ def encode_ir(ir): # pylint: disable=too-many-branches def encode_contract(cfilename, **kwargs): - r = dict() + r = {} # Init slither try: diff --git a/slither/tools/similarity/plot.py b/slither/tools/similarity/plot.py index 1645f8188..44f94b240 100644 --- a/slither/tools/similarity/plot.py +++ b/slither/tools/similarity/plot.py @@ -50,8 +50,8 @@ def plot(args): # pylint: disable=too-many-locals logger.info("Loading data..") cache = load_and_encode(infile, **vars(args)) - data = list() - fs = list() + data = [] + fs = [] logger.info("Procesing data..") for (f, c, n), y in cache.items(): diff --git a/slither/tools/similarity/test.py b/slither/tools/similarity/test.py index 51cedd53a..41e58d2b0 100755 --- a/slither/tools/similarity/test.py +++ b/slither/tools/similarity/test.py @@ -34,7 +34,7 @@ def test(args): cache = load_and_encode(infile, model, **vars(args)) # save_cache("cache.npz", cache) - r = dict() + r = {} for x, y in cache.items(): r[x] = similarity(fvector, y) diff --git a/slither/tools/similarity/train.py b/slither/tools/similarity/train.py index 52b1a0e66..46d8b3e53 100755 --- a/slither/tools/similarity/train.py +++ b/slither/tools/similarity/train.py @@ -24,7 +24,7 @@ def train(args): # pylint: disable=too-many-locals contracts = load_contracts(dirname, **vars(args)) logger.info("Saving extracted data into %s", last_data_train_filename) cache = [] - with open(last_data_train_filename, "w") as f: + with open(last_data_train_filename, "w", encoding="utf8") as f: for filename in contracts: # cache[filename] = dict() for (filename_inner, contract, function), ir in encode_contract( diff --git a/slither/tools/slither_format/__main__.py b/slither/tools/slither_format/__main__.py index 4c9bcab5e..a3d63d922 100644 --- a/slither/tools/slither_format/__main__.py +++ b/slither/tools/slither_format/__main__.py @@ -66,7 +66,7 @@ def parse_args(): group_detector.add_argument( "--detect", help="Comma-separated list of detectors, defaults to all, " - "available detectors: {}".format(", ".join(d for d in available_detectors)), + f"available detectors: {', '.join(d for d in available_detectors)}", action="store", dest="detectors_to_run", default="all", @@ -75,7 +75,7 @@ def parse_args(): group_detector.add_argument( "--exclude", help="Comma-separated list of detectors to exclude," - "available detectors: {}".format(", ".join(d for d in available_detectors)), + "available detectors: {', '.join(d for d in available_detectors)}", action="store", dest="detectors_to_exclude", default="all", diff --git a/slither/tools/slither_format/slither_format.py b/slither/tools/slither_format/slither_format.py index 63ceb2a43..a33deb636 100644 --- a/slither/tools/slither_format/slither_format.py +++ b/slither/tools/slither_format/slither_format.py @@ -72,7 +72,7 @@ def slither_format(slither, **kwargs): # pylint: disable=too-many-locals filename = f"fix_{counter}.patch" path = Path(export_result, filename) logger.info(f"\t- {filename}") - with open(path, "w") as f: + with open(path, "w", encoding="utf8") as f: f.write(diff) counter += 1 @@ -90,10 +90,10 @@ def choose_detectors(detectors_to_run, detectors_to_exclude): cls_detectors_to_run = [] exclude = detectors_to_exclude.split(",") if detectors_to_run == "all": - for d in all_detectors: - if d in exclude: + for key, detector in all_detectors.items(): + if key in exclude: continue - cls_detectors_to_run.append(all_detectors[d]) + cls_detectors_to_run.append(detector) else: exclude = detectors_to_exclude.split(",") for d in detectors_to_run.split(","): diff --git a/slither/tools/upgradeability/__main__.py b/slither/tools/upgradeability/__main__.py index f0d4a250d..882486a60 100644 --- a/slither/tools/upgradeability/__main__.py +++ b/slither/tools/upgradeability/__main__.py @@ -208,7 +208,7 @@ def main(): proxy_contracts = proxy.get_contract_from_name(args.proxy_name) if len(proxy_contracts) != 1: - info = "Proxy {} not found in {}".format(args.proxy_name, proxy.filename) + info = f"Proxy {args.proxy_name} not found in {proxy.filename}" logger.error(red(info)) if args.json: output_to_json(args.json, str(info), json_results) @@ -230,8 +230,8 @@ def main(): v2_contracts = variable2.get_contract_from_name(args.new_contract_name) if len(v2_contracts) != 1: - info = "New logic contract {} not found in {}".format( - args.new_contract_name, variable2.filename + info = ( + f"New logic contract {args.new_contract_name} not found in {variable2.filename}" ) logger.error(red(info)) if args.json: diff --git a/slither/tools/upgradeability/checks/abstract_checks.py b/slither/tools/upgradeability/checks/abstract_checks.py index 7493ee1c1..1f42e92e5 100644 --- a/slither/tools/upgradeability/checks/abstract_checks.py +++ b/slither/tools/upgradeability/checks/abstract_checks.py @@ -64,48 +64,40 @@ class AbstractCheck(metaclass=abc.ABCMeta): self.contract_v2 = contract_v2 if not self.ARGUMENT: - raise IncorrectCheckInitialization( - "NAME is not initialized {}".format(self.__class__.__name__) - ) + raise IncorrectCheckInitialization(f"NAME is not initialized {self.__class__.__name__}") if not self.HELP: - raise IncorrectCheckInitialization( - "HELP is not initialized {}".format(self.__class__.__name__) - ) + raise IncorrectCheckInitialization(f"HELP is not initialized {self.__class__.__name__}") if not self.WIKI: - raise IncorrectCheckInitialization( - "WIKI is not initialized {}".format(self.__class__.__name__) - ) + raise IncorrectCheckInitialization(f"WIKI is not initialized {self.__class__.__name__}") if not self.WIKI_TITLE: raise IncorrectCheckInitialization( - "WIKI_TITLE is not initialized {}".format(self.__class__.__name__) + f"WIKI_TITLE is not initialized {self.__class__.__name__}" ) if not self.WIKI_DESCRIPTION: raise IncorrectCheckInitialization( - "WIKI_DESCRIPTION is not initialized {}".format(self.__class__.__name__) + f"WIKI_DESCRIPTION is not initialized {self.__class__.__name__}" ) if not self.WIKI_EXPLOIT_SCENARIO and self.IMPACT not in [ CheckClassification.INFORMATIONAL ]: raise IncorrectCheckInitialization( - "WIKI_EXPLOIT_SCENARIO is not initialized {}".format(self.__class__.__name__) + f"WIKI_EXPLOIT_SCENARIO is not initialized {self.__class__.__name__}" ) if not self.WIKI_RECOMMENDATION: raise IncorrectCheckInitialization( - "WIKI_RECOMMENDATION is not initialized {}".format(self.__class__.__name__) + f"WIKI_RECOMMENDATION is not initialized {self.__class__.__name__}" ) if self.REQUIRE_PROXY and self.REQUIRE_CONTRACT_V2: # This is not a fundatemenal issues # But it requires to change __main__ to avoid running two times the detectors - txt = "REQUIRE_PROXY and REQUIRE_CONTRACT_V2 needs change in __main___ {}".format( - self.__class__.__name__ - ) + txt = f"REQUIRE_PROXY and REQUIRE_CONTRACT_V2 needs change in __main___ {self.__class__.__name__}" raise IncorrectCheckInitialization(txt) if self.IMPACT not in [ @@ -115,17 +107,17 @@ class AbstractCheck(metaclass=abc.ABCMeta): CheckClassification.INFORMATIONAL, ]: raise IncorrectCheckInitialization( - "IMPACT is not initialized {}".format(self.__class__.__name__) + f"IMPACT is not initialized {self.__class__.__name__}" ) if self.REQUIRE_CONTRACT_V2 and contract_v2 is None: raise IncorrectCheckInitialization( - "ContractV2 is not initialized {}".format(self.__class__.__name__) + f"ContractV2 is not initialized {self.__class__.__name__}" ) if self.REQUIRE_PROXY and proxy is None: raise IncorrectCheckInitialization( - "Proxy is not initialized {}".format(self.__class__.__name__) + f"Proxy is not initialized {self.__class__.__name__}" ) @abc.abstractmethod diff --git a/slither/utils/command_line.py b/slither/utils/command_line.py index 1920d0fa0..39ab82820 100644 --- a/slither/utils/command_line.py +++ b/slither/utils/command_line.py @@ -54,7 +54,7 @@ defaults_flag_in_config = { def read_config_file(args): if os.path.isfile(args.config_file): try: - with open(args.config_file) as f: + with open(args.config_file, encoding="utf8") as f: config = json.load(f) for key, elem in config.items(): if key not in defaults_flag_in_config: diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index bab4ad851..929fe7fe6 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -107,9 +107,9 @@ def get_tests(solc_versions) -> Dict[str, List[str]]: tests[test_name].append(test_ver) - for key in tests: - if len(tests[key]) > 1: - tests[key] = sorted(tests[key], key=StrictVersion) + for key, test in tests.values(): + if len(test) > 1: + tests[key] = sorted(test, key=StrictVersion) # validate tests for test, vers in tests.items(): @@ -232,7 +232,7 @@ def test_parsing(test_item: Item): actual = generate_output(sl) try: - with open(expected_file, "r") as f: + with open(expected_file, "r", encoding="utf8") as f: expected = json.load(f) except OSError: pytest.xfail("the file for this test was not generated") @@ -244,9 +244,9 @@ def test_parsing(test_item: Item): for change in diff.get("values_changed", []): path_list = re.findall(r"\['(.*?)'\]", change.path()) path = "_".join(path_list) - with open(f"test_artifacts/{id_test(test_item)}_{path}_expected.dot", "w") as f: + with open(f"test_artifacts/{id_test(test_item)}_{path}_expected.dot", "w", encoding="utf8") as f: f.write(change.t1) - with open(f"test_artifacts/{id_test(test_item)}_{path}_actual.dot", "w") as f: + with open(f"test_artifacts/{id_test(test_item)}_{path}_actual.dot", "w", encoding="utf8") as f: f.write(change.t2) assert not diff, diff.pretty() @@ -290,7 +290,7 @@ def _generate_test(test_item: Item, skip_existing=False): actual = generate_output(sl) print(f"Generate {expected_file}") - with open(expected_file, "w") as f: + with open(expected_file, "w", encoding="utf8") as f: json.dump(actual, f, indent=" ") diff --git a/tests/test_detectors.py b/tests/test_detectors.py index 8d26b12cb..01d1d899a 100644 --- a/tests/test_detectors.py +++ b/tests/test_detectors.py @@ -1280,7 +1280,7 @@ def _generate_test(test_item: Test, skip_existing=False): ) results = json.loads(results_as_string) - with open(expected_result_path, "w") as f: + with open(expected_result_path, "w", encoding="utf8") as f: f.write(json.dumps(results, indent=4)) From c489c7a1395a0fc2f9769f9c43b54b90c47ddd6e Mon Sep 17 00:00:00 2001 From: Josselin Date: Wed, 26 Jan 2022 09:33:32 +0100 Subject: [PATCH 5/5] minor --- tests/test_ast_parsing.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index 929fe7fe6..20f92cfc7 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -107,7 +107,7 @@ def get_tests(solc_versions) -> Dict[str, List[str]]: tests[test_name].append(test_ver) - for key, test in tests.values(): + for key, test in tests.items(): if len(test) > 1: tests[key] = sorted(test, key=StrictVersion) @@ -244,9 +244,13 @@ def test_parsing(test_item: Item): for change in diff.get("values_changed", []): path_list = re.findall(r"\['(.*?)'\]", change.path()) path = "_".join(path_list) - with open(f"test_artifacts/{id_test(test_item)}_{path}_expected.dot", "w", encoding="utf8") as f: + with open( + f"test_artifacts/{id_test(test_item)}_{path}_expected.dot", "w", encoding="utf8" + ) as f: f.write(change.t1) - with open(f"test_artifacts/{id_test(test_item)}_{path}_actual.dot", "w", encoding="utf8") as f: + with open( + f"test_artifacts/{id_test(test_item)}_{path}_actual.dot", "w", encoding="utf8" + ) as f: f.write(change.t2) assert not diff, diff.pretty()