From 672c4b312ce1002a04354da5731bc386e66888cc Mon Sep 17 00:00:00 2001 From: Josselin Feist Date: Tue, 7 Jun 2022 13:15:52 +0200 Subject: [PATCH] Improve support for IdentifierPath (solidity 0.8) --- .../expressions/expression_parsing.py | 4 +++- .../solc_parsing/expressions/find_variable.py | 13 ++++++++++++- ...odifier_identifier_path.sol-0.8.0-compact.zip | Bin 0 -> 1507 bytes ...odifier_identifier_path.sol-0.8.1-compact.zip | Bin 0 -> 1506 bytes ...difier_identifier_path.sol-0.8.10-compact.zip | Bin 0 -> 1547 bytes ...difier_identifier_path.sol-0.8.11-compact.zip | Bin 0 -> 1546 bytes ...difier_identifier_path.sol-0.8.12-compact.zip | Bin 0 -> 1544 bytes ...odifier_identifier_path.sol-0.8.2-compact.zip | Bin 0 -> 1535 bytes ...odifier_identifier_path.sol-0.8.3-compact.zip | Bin 0 -> 1537 bytes ...odifier_identifier_path.sol-0.8.4-compact.zip | Bin 0 -> 1540 bytes ...odifier_identifier_path.sol-0.8.5-compact.zip | Bin 0 -> 1540 bytes ...odifier_identifier_path.sol-0.8.6-compact.zip | Bin 0 -> 1540 bytes ...odifier_identifier_path.sol-0.8.7-compact.zip | Bin 0 -> 1542 bytes ...odifier_identifier_path.sol-0.8.8-compact.zip | Bin 0 -> 1533 bytes ...odifier_identifier_path.sol-0.8.9-compact.zip | Bin 0 -> 1545 bytes ...difier_identifier_path.sol-0.8.0-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.1-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.10-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.11-compact.json | 10 ++++++++++ ...ifier_identifier_path.sol-0.8.12-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.2-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.3-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.4-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.5-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.6-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.7-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.8-compact.json | 10 ++++++++++ ...difier_identifier_path.sol-0.8.9-compact.json | 10 ++++++++++ tests/ast-parsing/modifier_identifier_path.sol | 12 ++++++++++++ tests/test_ast_parsing.py | 1 + 30 files changed, 158 insertions(+), 2 deletions(-) create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.0-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.1-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.10-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.11-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.12-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.2-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.5-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.6-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.8-compact.zip create mode 100644 tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.9-compact.zip create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json create mode 100644 tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json create mode 100644 tests/ast-parsing/modifier_identifier_path.sol diff --git a/slither/solc_parsing/expressions/expression_parsing.py b/slither/solc_parsing/expressions/expression_parsing.py index 759d3d6a2..b0228e094 100644 --- a/slither/solc_parsing/expressions/expression_parsing.py +++ b/slither/solc_parsing/expressions/expression_parsing.py @@ -636,7 +636,9 @@ def parse_expression(expression: Dict, caller_context: CallerContextExpression) else: referenced_declaration = None - var, was_created = find_variable(value, caller_context, referenced_declaration) + var, was_created = find_variable( + value, caller_context, referenced_declaration, is_identifier_path=True + ) if was_created: var.set_offset(src, caller_context.compilation_unit) diff --git a/slither/solc_parsing/expressions/find_variable.py b/slither/solc_parsing/expressions/find_variable.py index d1236f78e..c908c5d16 100644 --- a/slither/solc_parsing/expressions/find_variable.py +++ b/slither/solc_parsing/expressions/find_variable.py @@ -155,6 +155,7 @@ def _find_in_contract( contract: Optional[Contract], contract_declarer: Optional[Contract], is_super: bool, + is_identifier_path: bool = False, ) -> Optional[Union[Variable, Function, Contract, Event, Enum, Structure, CustomError]]: if contract is None or contract_declarer is None: return None @@ -197,6 +198,13 @@ def _find_in_contract( if var_name in modifiers: return modifiers[var_name] + if is_identifier_path: + for sig, modifier in modifiers.items(): + if "(" in sig: + sig = sig[0 : sig.find("(")] + if sig == var_name: + return modifier + # structures are looked on the contract declarer structures = contract.structures_as_dict if var_name in structures: @@ -294,6 +302,7 @@ def find_variable( caller_context: CallerContextExpression, referenced_declaration: Optional[int] = None, is_super: bool = False, + is_identifier_path: bool = False, ) -> Tuple[ Union[ Variable, @@ -321,6 +330,8 @@ def find_variable( :type referenced_declaration: :param is_super: :type is_super: + :param is_identifier_path: + :type is_identifier_path: :return: :rtype: """ @@ -381,7 +392,7 @@ def find_variable( else: assert isinstance(underlying_func, FunctionTopLevel) - ret = _find_in_contract(var_name, contract, contract_declarer, is_super) + ret = _find_in_contract(var_name, contract, contract_declarer, is_super, is_identifier_path) if ret: return ret, False diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.0-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.0-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..f8a3c1a16ac6e8ba34e5df8d09f7796ca198ac85 GIT binary patch literal 1507 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 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.10-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.10-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..5fb6cde6b1ab3ec7bf2cb5ab40dfe88cdb4a2b24 GIT binary patch literal 1547 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 R|NII3=(!)v`{8>4_#2?1%v%5e literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.2-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.2-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..b5fea85ed10758b44f497479882939b141ff6b84 GIT binary patch literal 1535 zcmb7^dmz&Z0LOpKG=)%>x_Km;_iVN0)y!)%&&X@GDJ7#!WLJqa ziq26XDMhU9yfqaw^6I+gaCP_h{c+##AD{0(-+w=7H;|kiAPXo10O6T$?+XQ*4Hy9Y zH2}aI0D!2N2m+pfBZUwmaM9#{XKWbx3_LC-G6a_t8$%+8gpsgk2njeiF)k)rK@JQA z0YEwc*yQG(M*M|1$9eOr8KqR-6-_W~*U6@PYuf4x;@Y4;u81oqfsf#~pNEuX9chOk z4;?n<;aU0zx_YIH)b$JsCRF+i>i|kL$}`kWWI?QUXe4-Qs>YgR!Ta2IB{xCL>7ab% zMr4Gg!JL=Rs-Sys#t2^b7JP1rpN;VY+qgMys3>N*yP{`0Mdh$1giK@lurjzqYnk&^ zTz~Lv6*Od~<|w0@(qqx5e$JvlU{IA(J+Z2(`o{3OI=M7tWI0bshuZ6?ulF*C7!dR# z&T?KhB%&^F7I@O^S#&72iB_dOzKZ1^-p)*74X_9Mqzt<+!Po5sdRLV)TWcgd`FAYF zto@tG^4KNNp}ax$60*v`R{cL`-0zib$!x~J20d2=E2b4wvX^R05DjH}!vYRE6w}lw z+pOmj5J0t225`p4haIW=sl_QrM-rUxUat9R#7XrWFMMAawb80O@3HT^u)xW*|FD8g z-()w7YvSx#V?N9;XiWa(h@X5LSnFC~-#)pp!be|lDS&OTQo2*a6BYU-280?%{;41h z*#>a}eq?S<&NhDKPH3-w^0AV%N2s7Kr0Vz{QxMby{{9Fu%vh?IDt7Vb8NLk0zOz|g z`luBabK5)g$s@B?_oORI%-V*;8d61>K!~>W?|yn4YHVv^s}tW~a>*lH1?~ z1fiR%BLzG~VGs^8{Scq|*km*+9zTPtSb6l}F;}g#!w`}oB!%}#Hboh9D)CgC*t%dv zDiQ5hd4GdkQbsCPetUsY#i(GJuYnSC_mp1#P3{TDC|GWUb7%L^D+o$C8&o==tUm3r zEE?$K5(NFIOJ*?evwYJiMS9#N9e;+&HY2m5ZRNB*jToYqi{};ByTV(}?+ijKDqJk> zXvvyrP!TQ}JOn;CC7=F$V|OlW-_?Ri1YBD}>adKYBHvaQLIZ277*P1-2d2rCNN)>| zvO$^1Wa`dfEx9pgse3=4VPmSdc;*&!%L($%_hmZd;q(1wc4L+@K7~t?!LMrY-R;69 zcNeAcpL{&5q>}TPZ29?X55&Bal?s7JIy!1v*R3+kmK=U>tL#B~`Q%(^@Hk3q9&fXGM?KfdH2*({EM`Q(Vb3M;UZ^0eUwh| ziXJ_#Q6kEIb<~_I1gGdRdk+*3=RM3XT7Hxu_uGBPwWluLo2(p?LkiP5`>;o*nOBwcI2V=uR3suUqoMdoZrC;AHc;d5bk+o8Z&?>3m-dcPmSvIW1; zHDwCUmwdX32+$=xr@q+S6wq1<(QY!bcA)>3@i!m;lXRKy_`hmKyMg7u|75;3_!|qp IX&wOn2A-zQod5s; literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.3-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..728beb81f1b5d58e398ac780e49e1a6831ebadaa GIT binary patch literal 1537 zcmb7^X*|;n0LTB1Im!`h>`^qbk>yxx(}P-cJq#)3Lt?ql*lf-@Hkznh6{!$oG09Di z6m726Bohx(LZRh(u*va=r=I8a^WypaUVMLVes8}HcqwTdAPFb|k^$Z4bRzu?aUcMQ zfC7LC005Umy#ss$e8LC;-aa9ee<#s{;%`I_4JPVC43pc`P@*q|6Tl2;Xn9ac@^~CZ zuE}b1-Y99WaVKwmf%=^u<9cbm+sjHS5|Iku6PYDv28Kr1Yp4*BNk)8I_2>pUlQgMo zrklauhjfK!9L2+3I`lDLEa{nW@h!vE33M2Ld~=5a-PXoomOGWFw}_UgrHv|q+IKG% zt$nFF7{pW~%(9MUl*IHL;6q3U`dtJnF(n_w8Y%|`U-9?Qa17+8mNiHht$P-l=;+=BU}XXtpwqwB3f z?3>j?UFi#~YW9@^|Dg8um{idn1OM}`I8IMwIQiYqge*B2ZTfrt#f5VZ^VA!~ES8R1 z%oztWr-<|Hs(k2?L2lFFNm1h9RMyEf%CV&@HOf(jC4Dm;Hlx=1VAQW*VtXomT8NIu zLaZ@%%o?Rm>re#*Oozn!u5B-u*VxNr+*t9uOy9VodAnAw7PDz$fM2goGxR)k6Hx-K z-t`Ms{(}9Q6_PJ5rm2^W$t@>`J5%B{nK4BMAwYTz}J!@lHkikwey z_d+(Jp!U#ynuPs^bQgp-Yx0V*Y0TJdiUwKk-}zRCNp(dyXO6zv>wgBlVOq;EzxSfs zt_4PoExFE*{e-%uS4=+22;Z_8q>I~zN@IfcsJwc+oBz1};GC6VWxnuu-QY!VC%#6DH`m+z_0H-#!h_O3+KQwNXgv>wdp<*yE0tA=Xz)ko0}DB~9nzJelQTO4 z@fK?*ngdFu3ksUNn`7dh0r-TlIN64jK);DR^M1;RWA>rV3`NL&SRGc|nV2(^+j$~* z+4-|$VT%>k!dOABkpJQd-Q+3F87DG6uL&j>h$vS|S+ol8uTmbZ>+yZ)%DH1A1Iv0pjA;uG5v0cMhR zeX^&RVOB=#lCUgig6^_cv1>=limq$_5*j zE$)E_GEk@BQFD0&nu8nQD4A@P;bbZX3SCK26 z&cZ-6Hn?=yaW!H60(a@!y=`}4`!#nt`s1Fx;Ncx@?54tNPkoYa5o_=l1I2~FZB{;!-J@F1C=KZzf8 M|G~5$q6dJ#0c7dMw*UYD literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.4-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1eb88493e65a540d7a635b94019e1ceb5f093d32 GIT binary patch literal 1540 zcmb7^X*|>k0EYi_IA$A1?9Y{qXc%&aa)eMMvyOB)a>Y#Km~l1@6+dHyFfwIar42dP zFm7@VW)mW!Vb>Cg+=e1Ev)cW*Ht#ftmwgKoo!k^j$7u;>Ron0DvX~ z06G8w1mpYyumPAbuK+(xNW{Mr?-Sv#6^;w?!VvJdum~@oFkk6S=z=FX0?NL$ixw{6! zjh4I>t$1bap4WTp(cCzqyZ2t7uO;NRN)i%rJ44u5QYOk??lAsDyw(6(`c9p&PAVk% zG%v`{@c0)eXU=%9QrsjK-L*}uSA_5wMl-=qsVj+?V9scdpr2;rTFT7LK+9*7%las) zJ-yb*C3{w;lBJ0&ud=A0(RA)wmaoTkPfxvE$xAu&9ywiDsMJa);2QlaQvW$glktd`)qq|rm70yZCL zjoBd=SrWhUR2&)x7!ziO(wDbGX(mU*0<)fl<&6UJGb6Y&(taJQnHKLhw8Ww9pm@?6 zinG!}s&6!2YlA3bvQHz$(J;gzfg184W4e~YC-R#EEhU6VX%?Goy{2k6klC|xryifam!ghbXqTi(4nIwkGq}N2Emw>4a&>5%Fo%^!ek>S%@{#b3 z@hMcJZ)?i!k&n(DdIZ?doTkT)(*KI;4sE)!6}*#^PW6Z@uXLz7%}*Xf+dy+ZJa2YX z)_pOpo?f-Z9Zn?-VM;SLs=B zQ+C!3eTqAj1bgedpZo2=2K837v2rYueO-sJRS17?Gm#nDNgE*ALRi2stj|%tpx-0z z!v4Tu?TuOAk=<(8kUxJi&izv3F|v8Hp$u)mQ1&JL&V~W68b~tyW>|uY zd5Xw61&urJPNx2`Ui{LDjR?j2TOuS$>w9aeE^v;b$@*ZSlnOOrY}zr#diSL1YB-7j z5(+xG1lE?j%@bGTvF9#|hZaNRst{#%%XMXGn_m)VbngA>U7E)6h>5N)K9BFzs~8%O z4(}>QtB>~5r?QG(FJjYU!7{R|3{dho!5IIdLd0O7dY_4<`>%}{b;x@zKs9r-6i;}% zu{~jUd(7-T)}jp4p& z13uw)MZa>B_rXbJoUDj8E;Eh76Y32m?x5mRbh)K5(CWf3P&3tICHxm#lkngWuAH_X zJurK5Q6-D1n-gpAlW#LiW`XnhZ$t90;-WQRR(yxZ-nhC}B4PU6dBs)mJXdLD zB4S>{NTtk%_Ayd_V$epu|UQZdfO03!IMc9j0n%&5993XU8>A>f~M&b0HDTz$|9u0^uF< z>^;F;`1Hf2=wfJWSbls>a9!cJwAB={y=l&r)q+_b_!>3+xgyC$k<+esMnti!Z(m=> z{pu07_UDecw~vN>c5Ed`of(_&8Fj7b#k+VyG~rSEk)?dpiWj7)Y__48T$)eca90&O z?AG7BkTcnJQ|ukKwRp{&%#sK32eD0XM>`PM9P-~rK9KT1i3R<@|Mjz@oq*tvALyW- L2c#Uh9svFZQ2Nv* literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.5-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.5-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..316ec58632cc9b25f57cccca07cbee229b659590 GIT binary patch literal 1540 zcmb7^X*|;n0LTAGSur9vVQnHT**u1v&s>q4CgH(mn``bnIUgoN<;bxZJ*CH0A9F4# z_s8QZnxn<&py5NyEqe4kub&ss@Au;Sd-HqywYTOwW(4p8V1S?4?;Mo)0&mI>0QaQ; zKobCfAQG17N5qAB5wW=7h<|5@cLV_*P73tG#e|T;BD}oAdK~am|W+hmE@PK@ODF3|!F0MDKB|M(f(`d3=Cr`MVXQO1|w= zx-O=8L8@**gH+RC(mb!>)U_hlOzNIvJzg!leVJ(^JK7~T8@KMwdT`z`G%Z&!acs<3 zt#?K>Wibqu8$kShLw%kpdpTBR5cHlO{+E@bOK1$4V}XUi3Z%2i)2R)0h$ur?OVaD; zH?;hV()2eJWXdkDLbrHgql}fi5;T=j9A>e+s#X}AZ9YpMIHBxY6IvjqZr4rJHSXAiyqpxN#k)oEw?#y!=vj8x9H5HI)-MYW2~8Z&!0PD;_k($$Li-!$|(xdlpx$1 z`yGf~7(#Q(;bbtDe2nQ_UQie63=g6 zKLac@VaMBsbdJ|=IOBZJmXz&Vw9ig>l?&z*7`{c&{J8wJ5Em&Gxh>;nnou2D01n1P%f{3pic@0j5r>rCWMW4K96*SOQFl$%o^1V+jA|T?yabHgq$w_RhL1=D=wQ6QY%@NS>;y#=`_~-`JrE|%&aj=>t<03Q8 z ztaM5Vnl>TZJ5ies&4w2F>HemimOHGjo8R$7Bc`eu~n$!gc7S;HmVQ&#ktZKWK^3hr#Gfo+Pu-%Ydix0TOh6Sh37-q zq?tVVKpA?Me(^zR)gJxvU?hPwd&~9SP_m?q3sJISit%cxVo4a<_~A?UOksS(z}2?m z&K_nm*_1r8B#5k_x9#s-?OGRihyxCK--@T4GP2Wv5(?AeLtr6z zO@iH(j&QRuLHcSeCC*j&N{j! zyJs)REGKiQ=9p?0HpEQZpt0=pk1q~Pu)Q@8uMyvW8~I4e|0Id$C;qRW?XCHb|NQYB N)$@pXN3I8ezX1he%fKV}dc!VK{s&*7P)uOxh+50)hY_ z6#$N0ycmfPA*kig2Ad9VXL3n+{Wk4%hKHstbb|Is%|f_zZ3f_h#@9y`B^{FY%QoAK zS4`=;X57ASf~4LECCqEfS1Z$?wkE9{5!eYids#Z zOB-;uFz_n53j(eQ=~xx}@4X*mRm|0@5_!c(6~SVmS3MJMtF|eC<>@x|RrsnQrR@-z zt|;F-YWHN?xPeCzt*s_~pILNl_Jb2UZrJWg)bZIMZ(e_eUA_~~(a~BM*Ir|13&x&B zfJ&YuX7H9G71;09sC6PhHL)y-n-SfpB(vz(J)x>*v+1u zNNN$+*w!uGTW?eqXB3;#-kA~IF%ep`@~IMf&Qi9ZVH`7z7<8{`d-qzF^yS6j2)wOb zIk>RAh)lM&CJs{?a`Q{r4AAxZ-LJeUNRDzj_GJTm~#{vU&iw304v6wBDiG` z;mT`C_}vxxx!7f1E>Vy)fA*np8KKGzO*oKR$uC1ZIO(>lWp5cy-wHi6;ZvcQ@Tjwk z$*#V>{ZW7|c+lB4Q=v2abBdn7wGSpPaN|Hbmszf9r`+03nFBpM2-KQlq6^QwyC|(O z(yYo{3|B3e5fl&3MZSF_JnzTLBq61zJBcxzyJyds=^HtSQd*Fc4tIkZgqBoFZ&mq8 z(%4Y->=V7OO6qihw11qU3dC{AZ2U%gj^&;aZ&jGsTErdB;63(^&6R7^M$KmysJFU| z&ay6Citq=MuAu|ukr{$Q!%6L{*_&WH$b$n$2oK`q9YgeN{neD$P5Z&9HhZ_(gc^fMPj44mlt0- z+`Te}{;s&fmz+*-tVO+@M3Ivmi4a`-1a9i_^RRvwABhJtakA*4(=UB|b=I1tMz7dB z&z8d|m8${Isnwr^u;hMsXwdQ z*~I$@Hy%2->-lQnIsA2cw-41G>SSj3cv7eUhfNuFhNKUx5D$f1M9GWP7CzE@sjr~< zU*j=QI-C}j#Bus{u2c5S=CFOsTD)9sV*U#?GAekRO OiLIiyn7ieA0QehI7ShE4 literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.7-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..041c5ea9eae38b1ceca80bbaf2342fa0adb0a084 GIT binary patch literal 1542 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 G0pM>jV$f~? literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.9-compact.zip b/tests/ast-parsing/compile/modifier_identifier_path.sol-0.8.9-compact.zip new file mode 100644 index 0000000000000000000000000000000000000000..1a06a3c57b31ede0971d44cab7c828531b42e627 GIT binary patch literal 1545 zcmb7^c_7mZ0LOo}(a5o|Ig+6nxpG9xRqjZxhQ}PaSKch!a};vrKAMGDV9`}_UzzTZDS-+#XUeq0>E5DNeVhyx-x_GzElrXo8*0LYdB z09^n8evb^sh2lb@{Bgk{c+$UhzzKiED=H=7F;h z^CNXdA zxEw2pX3uxFeLP^UAQgBH=`5$eA%m89&oO?sYuIcfCoFROeW=y z7mW1y{xR1`z4~K4KR_>V*;RZfg<9)rbJvy$GGmUufPGSBk^65IZ2MI=2PO42FiAvi zLr~sE;%X151STr+!^C71c+h&IdPpxB4h$(?@ySQK<9)ShV zOe@ib`o@_QhO*PHMUC86AtYyh*yhn1uM_lmH~$l(`Y9DJb)mlMfXVe>)|SzO&?Uoi zW<18bm8YQM*w^!=cKX$$pu?C`G&sDZcvnIOZLU(@&eJp})pCupJNI)AO`fxHB64!S zabNxxypD`cf|uRhC3gK#LWX$;d}n=&Mz6mAHm}=?7hNMIp=D`qRYk>ZI1OXK4c~4> zQ5H(GBSeYdl;z=MiGEu@1B`;SBh}fO5)_~J44Lp}8tQFA`^;q9x7>S|G(LDplz}xe zTQ|o~skd5Y)wL`(EHTj<@C|;>!796(BX;=8t=q z@Z&M|>g|1(x@~gk3ns!fg7))o7lQJh=a! z(}s2wpS1~1XddNTT|9KZH%`Onl*veyWL$K~*Yg9~M_4!FcV6CEEw9fi@=cc59pUlt zJel_y+ zkZa#LJEe!w`~!`R5YX~w)3I)}v=;^t{vx1sN@ES>V~xIk7lY= zkNm|+N!09Ab5Op6n9B!y%?Zbk-SyV%f?C_j;X;k>qcG|Af%!3Xzz^oSx}J2r9h2!E z-nkVA+A(XRU&Y*;4fxWm{*R$afS|jrAxST1j1))KVa5D>6NG zv*y|+Jut-?%Q)>~Dg{l~`;h16J>o)^oA=5f`A^&!fwAv$_S6v^`5B=j6hg+7ukAvx$p!=FTyt2IZS#($Ue zAQId<9=Ke8EkgUjPYZ_Y&wd>35N8bpX~~^X-1*QkT;k#=0I~r8x0ZjJ`JW^S{KEg0 Vw2Pyl(667s&-(pj(NEz6z~754$7TQk literal 0 HcmV?d00001 diff --git a/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.0-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.1-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.1-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.10-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.10-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.11-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.11-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.12-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.12-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.2-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.2-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.3-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.3-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.4-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.4-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.5-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.5-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.6-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.6-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.7-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.7-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.8-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.8-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol-0.8.9-compact.json b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json new file mode 100644 index 000000000..5b48c6fdf --- /dev/null +++ b/tests/ast-parsing/expected/modifier_identifier_path.sol-0.8.9-compact.json @@ -0,0 +1,10 @@ +{ + "A": { + "f()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: EXPRESSION 1\n\"];\n}\n", + "m()": "digraph{\n0[label=\"Node Type: ENTRY_POINT 0\n\"];\n0->1;\n1[label=\"Node Type: _ 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", + "m()": "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/modifier_identifier_path.sol b/tests/ast-parsing/modifier_identifier_path.sol new file mode 100644 index 000000000..196de8d61 --- /dev/null +++ b/tests/ast-parsing/modifier_identifier_path.sol @@ -0,0 +1,12 @@ +contract A{ + + function f() public m {} + modifier m()virtual {_;} + +} + +contract B is A{ + + modifier m() override {_;} + +} diff --git a/tests/test_ast_parsing.py b/tests/test_ast_parsing.py index eafe6a2f3..c8d24e741 100644 --- a/tests/test_ast_parsing.py +++ b/tests/test_ast_parsing.py @@ -404,6 +404,7 @@ ALL_TESTS = [ # 0.8.9 crashes on our testcase Test("user_defined_types.sol", ["0.8.8"] + make_version(8, 10, 12)), Test("bytes_call.sol", ["0.8.12"]), + Test("modifier_identifier_path.sol", VERSIONS_08), ] # create the output folder if needed try: