ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙ  j^ ddlmZddlmZmZmZmZmZmZm Z m Z m Z ddl m Z ddlmZmZddlmZmZeGddZGd d eZGd d Zhd Ziddddddddddddddddddddddddd dd!d"d#d"d$d%d&d%d'd%iZhd(Zd)d*hZhd+Zhd,Zeezezezhd-zZhd.Zhd/Z d0d1hZ!hd2Z"d3hZ#hd4Z$ee ze!ze"ze#ze$zZ%hd5Z&Gd6d7Z'Gd8d9e Z(ed:Z)Gd;d) dataclass) AnyDictListLiteralNoReturnOptionalTuple TypedDictcast)c_ast)CLexer_Token)fix_switch_casesfix_atomic_specifierscFeZdZUdZeed<eed<dZeeed<defdZ y)CoordzkCoordinates of a syntactic element. Consists of: - File name - Line number - Column number filelineNcolumnreturncx|jd|j}|jr|d|jz }|S)N:rrr)selftexts C/opt/nydus/tmp/pip-target-mjwu0ny1/lib/python/pycparser/c_parser.py__str__z Coord.__str__'s;))Adii[) ;; a }% %D ) __name__ __module__ __qualname____doc__str__annotations__intrr rr rrrs- I I FHSM r rc eZdZy) ParseErrorN)r!r"r#r(r rr*r*.sr r*c eZdZdZdedddddfdedeed ed ed ed ed eddfdZ ddededede jfdZ dde de e defdZdedeezdzdefdZddZddZdede eddfdZdede eddfdZdedefd Zded!e de ddfd"Zdd#Zdd$Zdedefd%Zd&ed'ede j8fd(Zd&e j<e j>ze j@zd)e!ede j<e j>ze j@zfd*Z" dd+e d,d-ed.d/d0edd,f d1Z# dd2d,d3e!d4d5ede!e j8fd6Z$d2d,d&e j8d7e e!e j8d8e j8de j8f d9Z%d:edefd;Z&ddZ)de'fd?Z*d@ede e'fdAZ+d@ede'fdBZ,de fdCZ-dDe ddfdEZ.dFe'defdGZ/ddFe e'defdHZ0ddFe e'defdIZ1defdJZ2ddKedefdLZ3de4e eeffdMZ5 ddNedOede4e e j8effdPZ6de4e eeffdQZ7defdRZ8defdSZ9de e4e j@e e'ffdTZ:de jfdUZ;de!e j8fdVZde!e j8fdYZ?d2d,dZede!e j8fd[Z@de!e j8fd\ZA dd]ede4d,ee effd^ZBdd_ZCde!efd`ZDde j8fdaZEde j8fdbZF ddce d4dKede!d4fddZGddKedd4fdeZHde j8fdfZIde!e j8fdgZJde e!e j8fdhZKde!d4fdiZLddjZMde j8fdkZNde j8fdlZOde j8fdmZPde j8fdnZQde j8fdoZRde j8fdpZSde j8fdqZTd.edrede j8fdsZU dd.edrede j8fdtZVd&e j8de j8fduZWdve j8de j8fdwZX ddxe e j8de ede j8fdyZYdve j8de j8fdzZZde e j8fd{Z[de jfd|Z]de jfd}Z^de j8fd~Z_d2d,d&e e j8de ede j8fdZ`de e j8fdZade j8fdZbde j@fdZcde e j8fdZdde j8fdZede e jfdZfde j8fdZgde j8e!e j8zfdZhde j8e!e j8zfdZide j8e!e j8zfdZjde!e j8fdZkde j8fdZlde j8fdZmde j8fdZnde j8fdZode j8fdZpde j8fdZqde e j8fdZrde j8fdZsde j8fdZtde j8fdZu dde de e j8de j8fdZvde j8fdZwde j8fdZxde j8fdZyde j8fdZzde j8fdZ{de j8fdZ|de j8fdZ}de j8fdZ~de j8fdZde j8fdZde j8fdZde j8fdZde j8fdZde j8fdZde j8fdZde!e j8fdZde!e j8fdZde j8fdZdefdZde j8fdZde!e j8fdZde!e j8fdZy)CParseraFRecursive-descent C parser. Usage: parser = CParser() ast = parser.parse(text, filename) The `lexer` parameter lets you inject a lexer class (defaults to CLexer). The parameters after `lexer` are accepted for backward compatibility with the old PLY-based parser and are otherwise unused. Tzpycparser.lextabzpycparser.yacctabF lex_optimizelexerlextab yacc_optimizeyacctab yacc_debug taboutputdirrNc||j|j|j|j|_t g|_t|j|_y)N) error_funcon_lbrace_funcon_rbrace_functype_lookup_func) _lex_error_func_lex_on_lbrace_func_lex_on_rbrace_func_lex_type_lookup_funcclexdict _scope_stack _TokenStream_tokens)rr.r/r0r1r2r3r4s r__init__zCParser.__init__>sR"++3333!77   59F8%1$))%< r rfilenamedebugc2tg|_|jj||t |j|_|j }|j}|.|jd|j|j||S)a-Parses C code and returns an AST. text: A string containing the C source code filename: Name of the file being parsed (for meaningful error messages) debug: Deprecated debug flag (unused); for backwards compatibility. before: ) r?r@r>inputrArB _parse_translation_unit_or_empty_peek _parse_errorvalue _tok_coord)rrrDrEasttoks rparsez CParser.parseZsy"VH h'#DII. 335jjl ?    4dooc6J K r linenorcFt|jj||S)Nr)rr>rD)rrQrs r_coordzCParser._coordvs$)),,6&IIr msgcoordc"t|d|)Nz: )r*)rrTrUs rrKzCParser._parse_errorysE7"SE*++r cJ|jjtyN)r@appendr?rs r _push_scopezCParser._push_scope|s   (r clt|jdkDsJ|jjy)Nr )lenr@poprZs r _pop_scopezCParser._pop_scopes-4$$%))) r namec|jdj|ds|jd|d|d|jd|<y)z9Add a new typedef name (ie a TYPEID) to the current scopeTzTypedef z1 previously declared as non-typedef in this scopeNr@getrKrr`rUs r_add_typedef_namezCParser._add_typedef_namesR  $((t4   4("ST '+"d#r c|jdj|dr|jd|d|d|jd|<y)z`Add a new object, function, or enum member name (ie an ID) to the current scope rbFz Non-typedef z- previously declared as typedef in this scopeNrcres r_add_identifierzCParser._add_identifiersT   R $ $T5 1   th&ST ',"d#r cft|jD]}|j|}||cSy)z.Is *name* a typedef-name in the current scope?F)reversedr@rd)rr`scopein_scopes r_is_type_in_scopezCParser._is_type_in_scopes6d//0EyyH# 1 r rcH|j||j||yrX)rKrS)rrTrrs rr:zCParser._lex_error_funcs #t{{489r c$|jyrX)r[rZs rr;zCParser._lex_on_lbrace_funcs r c$|jyrX)r_rZs rr<zCParser._lex_on_rbrace_funcs  r c$|j|S)zLooks up types that were previously defined with typedef. Passed to the lexer for recognizing identifiers that are types. )rm)rr`s rr=zCParser._lex_type_lookup_funcs %%d++r declmodifierc||}|}|jr|j}|jrt|tjr ||_|S|}t|jtjs1|j}t|jtjs1|j|_||_|S)zTacks a type modifier on a declarator, and returns the modified declarator. Note: the declarator and modifier may be modified )type isinstancerTypeDecl)rrrrs modifier_head modifier_tail decl_tails r_type_modify_declzCParser._type_modify_decls !    )..M   dENN +!%M O I @%NN !@"+M *INKr typenamec|}t|tjs'|j}t|tjs'|j|_|j dd|_|D]R}t|tjrt|dkDr|jd|jI||_|cS|sit|jtjs|jd|jtjdg|j|_|Stj|Dcgc]}|jD]}|c}}|dj|_|Scc}}w)z#Fixes a declaration. Modifies decl.Nr z Invalid multiple types specifiedMissing type in declarationr'rUr) rvrrwrudeclnamer`qualsIdentifierTyper]rKrUFuncDeclnames)rrrr|typtnidr`s r_fix_decl_name_typezCParser._fix_decl_name_types,S%..1((CS%..1LL JJqM Bb%"6"67x=1$%%&H"((S!CHK dii8!!"?L++UG4::FCH ++ (>"RXXTX>hqkFWFWCH ?s?E7 declspec _DeclSpecnewspeckind _DeclSpecKindrYc|tggggg}n|}|r||j||S||jd||S)z2See _DeclSpec for the specifier dictionary layout.qualstoragerufunction alignmentr)r?rYinsert)rrrrrYspecs r_add_declaration_specifierz"CParser._add_declaration_specifier(s]  ""rRDD  J  g &  J  a ) r rdecls _DeclInfotypedef_namespacec d|dv}g}|djd|ddt|ddksBt|dd jd k7s$|j|dd jds8d }|dD]}t |d s|j }n|j d |tj|dd jddd|d|dd j |dd<|dd =nt|ddtjtjtjtjfstt|dd}t|tjs'|j }t|tjs'|j" |dd jd|_|dd =|D]} | dJ|r1tj$d|d|d| d| dj } nXtj&d|d|d|d|d| d| jd| jd| dj  } t| j tjtjtjtjfr| } n|j)| |d} |rO|r'|j+| j,| j n&|j/| j,| j t1ttj&tj$z| } |j3| |S)zBuilds a list of declarations all sharing the given specifiers. If typedef_namespace is true, each declared name is added to the "typedef namespace", which also includes objects, functions, and enum constants. typedefrrbitsizeNrrrurbr ?rUInvalid declarationrrruralignrUr)r`rrrurUrinit r`rrrfuncspecrurrrU)rdr]rrmhasattrrUrKrrwrvEnumStructUnionrr rrurTypedefDeclrrfr`rhrrY) rrrr is_typedef declarationsrUt decls_0_tailrr declaration fixed_decls r_build_declarationszCParser._build_declarations>s@$y/1   8<< " * Qx'V %)4<+112a711$v,r2B2H2H2KLE!&\"1g.$%GGE!*%%&;UC$)>>!&\"-33A6{+v,r*00 $a L$ a U\\5;;8L8LM $Cq&)9: $\5>>B#/#4#4L%\5>>B((0,0L,<,B,B1,EL)V R(D<+ ++#mmv, Ofv,,,  $jjv,{+ O!*-f&) HHY/v,,,    U\\5;;8L8LM) !55k4<P !**:??JrDrrOs r_advancezCParser._advances9ll! ;   /1C1C DJr token_typecf|j}||j|k(r|jSy)zConditionally consume next token, only if it's of token_type. If it is of the expected type, consume and return it. Otherwise, leaves the token intact and returns None. N)rJrurrrrOs r_acceptzCParser._accepts. jjl ?sxx:5==? "r c|j}|j|k7r.|jd|j|j ||S)NrG)rrurKrLrMrs r_expectzCParser._expectsBmmo 88z !    4dooc6J K r c6|jjSrX)rBmarkrZs r_markz CParser._marks||  ""r rc:|jj|yrX)rBresetrrs r_resetzCParser._resets 4 r rOcN|j|j|jSrX)rSrQrrs rrMzCParser._tok_coords{{3::szz22r cT|xs|j}|y|jtvSNF)rJru _DECL_STARTrs r_starts_declarationzCParser._starts_declarations)!TZZ\ ;xx;&&r cT|xs|j}|y|jtvSr)rJru_STARTS_EXPRESSIONrs r_starts_expressionzCParser._starts_expressions*!TZZ\ ;xx---r cZ|j}|y|tvry|jS)NFT)r_STARTS_STATEMENTrrtok_types r_starts_statementzCParser._starts_statements2??$   ( (&&((r id_onlycH|j}|y|dvry|r|dk(S|dvS)NF>TIMESLPARENTID>rTYPEIDr)rrrs r_starts_declaratorzCParser._starts_declarators=??$   * * t# #+++r cr|j}|j\}}|j|||fSrX)r_scan_declarator_name_infor)rrr saw_parens r_peek_declarator_name_infoz"CParser._peek_declarator_name_infos7zz|"==?) D""r allow_abstracttypeid_paren_as_abstractc|j\}}| |rh|dk(rc|ra|sK|j}||j|n|jj}|j d||j }|dfS|dk(r*|r|j}|dfS|j}|dfS|j}|dfS)NrzInvalid declaratorFT) rrJrMr>rDrK_parse_abstract_declarator_opt _parse_typeid_noparen_declarator_parse_typeid_declarator_parse_id_declarator)rrr name_typerrOrUrrs r_parse_any_declaratorzCParser._parse_any_declarators $>>@ 9   $h)>9!jjl03,TYYEWEW!!"6>668D;   '<<> Tz446Tz,,.DTzr cd}|jdrO|jtvr'|j|jtvr'|jdrO|j }|d|fS|j dvr|j|j |fS|j dk(rd}|j|j \}}|rd}d} |j }|d|fS|j dk(r|dz }n/|j dk(r |dz}|j|dk(r ||fS[|jkd|fS) NFr>rrrTr RPARENr)rr_TYPE_QUALIFIERrrJrur)rrrOr nested_parendepths rrz"CParser._scan_declarator_name_info/sK ll7#//#6 //#6ll7#jjl ;? " 88' ' MMO88Y& & 88x I MMO%)%D%D%F "Hl Ejjl;?*88x'QJEXX)QJEMMOzY& & Yr c&|jdvS)N>rLBRACKETrrZs r"_starts_direct_abstract_declaratorz*CParser._starts_direct_abstract_declaratorRs $:::r cR|j}|duxr|jtvSrX)rJru_ASSIGNMENT_OPSrs r_is_assignment_opzCParser._is_assignment_opUs%jjl$>388#>>r c|j}|jd}|y|js|j|y|j }|jd|j|y|||fS)abParse and return a parenthesized type name if present. Returns (typ, mark, lparen_tok) when the next tokens look like '(' type_name ')', where typ is the parsed type name, mark is the token-stream position before parsing, and lparen_tok is the LPAREN token. Returns None if no parenthesized type name is present. rNr)rrrr_parse_type_name)rr lparen_tokrs r_try_parse_paren_type_namez"CParser._try_parse_paren_type_nameYszzz|\\(+  '') KK ##% << ! ) KK D*$$r c|jtjgStj|jSrX)rJrFileAST_parse_translation_unitrZs rrIz(CParser._parse_translation_unit_or_emptyts5 ::< ==$ $}}T99;<>T>Rh..tX>>r r"c &d}|r!|jr5|j}n$|jdr|jd}||d}tjtjtj f}t |dk(rLt|d|r=tjd|d|d|d|d |ddd|dj g}|S|j|tddd gd }|S|j||d }|S) NTrrur rrrrrrrr) rr rrrrr]rvrrUrr?)rrr"rtys_u_or_es rrz"CParser._parse_decl_body_with_specs3 &&(88:&&t&4888F =fB ekk5::>H2w!| 2a5( ;JJ!"6l";/ $Y!%j!1U! $ ekk  0 00TdCD&*1 ,,$-E r cg}|jr0|j|j|jr0|SrX)rr r*r)s rrzCParser._parse_declaration_lists;&&( LL002 3&&( r rc d}d}d} |j}|n*|jdk(r7||j|}|j||j dd}[|jdk(rM|j dd k(r9||j|}|j||j d d}d}|jtvrB||j|}|j||jjd d} |jtvrB||j|}|j||jjd d}_|jtvrB||j|}|j||jjd d}|jtvrk||j|}|j}|j|tj|jg|j|d d}d}0|jdk(rn|rn||j|}|j}|j|tj|jg|j|d d}d}|jdvr:||j|}|j||jd d}d}|jdk(r:||j|}|j||j!d d}d}> |&|j#d|j$j&|s|s|j#d||||fS)aParse declaration-specifier sequence. allow_no_type: If True, allow a missing type specifier without error. Returns: (spec, saw_type, first_coord) where spec is a dict with qual/storage/type/function/alignment entries, saw_type is True if a type specifier was consumed, and first_coord is the coord of the first specifier token (used for diagnostics). NFT_ALIGNASrrY_ATOMICrrrurrrrrUNIONSTRUCTENUMrr~)rJrurMr_parse_alignment_specifierr_parse_atomic_specifierrrrL_STORAGE_CLASS_FUNCTION_SPEC_TYPE_SPEC_SIMPLErr _parse_struct_or_union_specifier_parse_enum_specifierrKr>rD)rrrr" first_coordrOs rrz%CParser._parse_declaration_specifierss **,C{xx:%&"&//#"6K66$99;[QU7xx9$);x)G&"&//#"6K66$668&7 xx?*&"&//#"6K66$--///7xx>)&"&//#"6K66$--///47xx>)&"&//#"6K66$--///D7xx,,&"&//#"6Kmmo66((#))DOOCr?rKr>rDrd)rrr" saw_alignmentr@rOs r_parse_specifier_qualifier_listz'CParser._parse_specifier_qualifier_lists,  **,C{xx:%&"&//#"6K66$99;[QU7!% xx9$);x)G&"&//#"6K66$668&7 xx?*&"&//#"6K66$--///7xx,,&"&//#"6Kmmo66((#))DOOC?  ll7# LL44W4E Fll7# r c|r|jn|j}d}|jdr|j}t ||dS)Nrr)r_parse_declaratorrrr?)rrrrrs rrNzCParser._parse_init_declarator'sK.5t((*4;Q;Q;S << !**,DD$77r ct|j}|j|j}|jdvr|j}|jdk(r|j|j dr$||jg|j |S|j }|jd||j||j |S||jd|j |S|jdk(rv|j}|j dr|dg|j |S|j }|jd|d||j |S|jd|j |y)N>rrrRBRACE)r`rrUz Invalid struct/union declaration) rrrLrrrM_parse_struct_declaration_listrrK)rrOklassname_tokr brace_toks rr>z(CParser._parse_struct_or_union_specifier3smmmo// : ??  0 0}}H H, <<) %^^2T__X=V;;= X&!uDOOHRSr cg}|jdvr7|j}|%|j||jdvr7|SN>NrR)r_parse_struct_declarationr )rritemss rrSz&CParser._parse_struct_declaration_listTsRoo'77224E} LL  oo'77  r c|jdk(r|jy|jdvr|jgS|j}d|j dgvsJd}|j s|jdk(r|j }|$|jd|j||St|ddk(rk|dd }t|tjr|}ntj|}|jd|j|t|dd gS|jd|j|tddd gS) NrrrrCOLONrrrur rr)rrrrCrdr_parse_struct_declarator_listrrr]rvrNoderr?)rrrnode decl_types rrYz!CParser._parse_struct_declaration`sh ??  & MMO ??  7 72245 5335B 7777  " " $(9W(D668E   LL ++U+C C tF|  !<?D$ + !006 LL ++$ID$"O!P,  V''d4FG(  r c|jg}|jdr1|j|j|jdr1|SNrM)_parse_struct_declaratorrrYr)s rr^z%CParser._parse_struct_declarator_listsG..01ll7# LL668 9ll7# r c|jdr,|j}tjddddd|dS|j }|jdr|j}|d|dS|dddS)Nr\r)rrHrrwrP)rrrrs rrdz CParser._parse_struct_declarators << 557GtT4>"  %%' << 557G $7C Cdt<rrrrR)rrr_parse_enumerator_listrrrLrM)rrOrUenumss rr?zCParser._parse_enum_specifiersll6" ??  0 0}}H H, 335 X&zz(..%9MNN::hnndDOOC4HI I X++- Xzz$ts';<>!ooh/ D((..r c |jdk(r"|j||j|}6|jdk(r$|j|}|j||}m |S)zAParse a chain of array/function suffixes and attach them to decl.rr)rr{_parse_array_decl_parse_function_decl)rrrr!s rrzCParser._parse_decl_suffixessp J.--dD4J4J44PQ H,006--dD9  r base_declc<|jd|jSN) base_typerU)_parse_array_decl_commonrU)rrs rrzCParser._parse_array_decl s,,t9??,SSr rc6|jd}|j|fd}|jdrBdg|jxsgz}|j }|jd|||S|j t vr|jxsg}|jdr0|dgz}|j }|jd|||S|jd}|rI|jdtj|j|j|}|||Sd}|jr|j }|jd|||S|jd}|rI|jdtj|j|j|}||gSd}|jr|j }|jd||gS)a9Parse an array declarator suffix and return an ArrayDecl node. base_type: Base declarator node to attach (None for direct-declarator parsing, TypeDecl for abstract declarators). coord: Coordinate to use for the ArrayDecl. If None, uses the '[' token. rNc6tj||S)N)rudim dim_qualsrU)r ArrayDecl)rrrrUs rmake_array_declz9CParser._parse_array_decl_common..make_array_decls??C9E r STATICstaticRBRACKETr) rrMrrE_parse_assignment_expressionrrrrrLr)rrrU lbrack_tokrrr times_toks `` rrz CParser._parse_array_decl_common s\\*- =OOJ/E  << !! d&E&E&G&M2NI335C LL $"3 2 2 ??  /779?RI||H%% 2 779 Z(&sI66 W-I Z(hhy 0JK&sI66C&&(779 LL $"3 2 2LL)  LL $((9??DOOI,FGC"3+ +  " " $335C Z sB''r c|jd|jdrd}nA|jr|jn|j }|jdt j |d|j}|jdk(rp|jd|jjD]K}t|t jr|St|dd}|s0|j||jM|S)NrrargsrurUrr`)rrr_parse_parameter_type_list_parse_identifier_list_optrrrUrrparamsrv EllipsisParamgetattrrh)rrrr!paramr`s rrzCParser._parse_function_declFs X << !D++-//1446  LL "~~4d)//J ??  (yy$!YY--E!%)<)<=  #5&$7D,,T5;;? . r cg}|jd}|rJ|jxsg}|j||j|f|jd}|rJ|syd}|D]\}}t j |||}|S)Nr)rrurU)rrErYrMrPtrDecl)rstarsrrrrUs rr}zCParser._parse_pointer`sLL) 335;E LL%!;< = W-I !LE5--e#UCC" r c.|j}|jdk(rq|jddk(r]|j|j}|jj t j |j||SNrMrELLIPSIS)_parse_parameter_listrrrrYrrrM)rrell_toks rrz"CParser._parse_parameter_type_listqsn++- ??  'DOOA,>*,L MMOmmoG MM !4!4T__W5M!N O r cx|j}tj|g|j}|j dk(ru|j ddk7ra|j |j j|j|j dk(r|j ddk7ra|Sr)_parse_parameter_declarationr ParamListrUrrrrYrrrs rrzCParser._parse_parameter_listzs113%%++6oo7*tq/AZ/O MMO MM !B!B!D Eoo7*tq/AZ/O r cr|jd\}}}|dstjdg|g|d<|jrN|j dd\}}|r#|j |t |ddgd S|j|||S|j}|j|||S) NTrrur'rrrrr]r) rrrrrrr?_build_parameter_declarationr)rrr$r#rris_nameds rrz$CParser._parse_parameter_declarations"@@t@TaF|!00% KLDL  " " $!77#d8ND(//d4&N%O044T4L L22400tZHHr r#c t|ddkDret|ddjdk(rG|j|ddjdr#|j|t |ddgdSt j d|dd|xst jdddd| }|j||dS) Nrur rbrrr]r-rr`rrrurU) r]rrmrr?rTypenamerwr)rrrrr#s rrz$CParser._build_parameter_declarations V  !DL$**+q0&&tF|B'7'='=a'@A++$DtT"J!K, ~~v,?dD$?  ''d6l;;r cJ|jdk(ry|jSNr)r_parse_identifier_listrZs rrz"CParser._parse_identifier_list_opts# ??  (**,,r c|j}tj|g|j}|j dr;|j j |j|j dr;|Src)_parse_identifierrrrUrrrYrs rrzCParser._parse_identifier_lists`&&(%%++6ll7# MM !7!7!9 :ll7# r c `|j}|j}d}| |j}n|dr|ddj}tjd|dddd|xstj dddd|}t tj|j||dS)Nrurr-rr)rCrrUrrrwr r)rrrrrUr|s rrzCParser._parse_type_names335224  JJE &\LO))E>>v,q/?dD$?  ENND$<$rDr)rrrrrs rrz)CParser._parse_direct_abstract_declarators\\(+ '')T__->(-J<<> X&~~dD$?//*5 ::< X&''' __ * ,224D   ;TYY=O=O P((..r cJ|jdk(ry|jSr)rrrZs rrz&CParser._parse_parameter_type_list_opts# ??  (..00r cT|jtjdddddSr)rrrwrZs rrz"CParser._parse_abstract_array_bases.,,nnT4t>g.>gajFVFVW W$$&&r cb|jr|jS|jSrX)rr*rrZs r_parse_block_itemzCParser._parse_block_item,s,  # # %**, ,$$&&r cg}|jdvr]|j}t|tr|dgk(r9|j |n|j ||jdvr]|SrX)rrrvlistr rY)rrZitems r_parse_block_item_listzCParser._parse_block_item_list2sloo'77))+D$%D6> T" T"oo'77 r c |jd}|jdr&tjd|j |S|j }|jdtj||j |S)NrrRr)rrrrrMr)r lbrace_tokrs rrz!CParser._parse_compound_statement?so\\(+ << !>>d$//*:UV V113  X~~#4??:+F  r c|j}|xdk(r|j}|jd|jr|j }n$t j |j|}t j|j||j|Sxdk(r|j}|j}|jd|jr|j }n$t j |j|}t j||g|j|Sdk(r|j}|jd|jr|j }n$t j |j|}t j|g|j|S |jd|jjy)Nrr\rrzInvalid labeled statement)rrrrrrEmptyStatementrMLabelrLrHCaseDefaultrKr>rD)rrrUrcase_tokrIdef_toks rrz CParser._parse_labeled_statementLs~??$==? W%))+>>@D //0IJD{{8>>49RSS==?668 W%))+>>@D //0IJDzz$0IJJ--/ W%))+>>@D //0HID}}dVT__W-EFF!!"=tyy?Q?QRr c |j}|jxdk(r|jd|j}|jd|j }|j dr7|j }t j||||j|St j||d|j|Sdk(rq|jd|j}|jd|j }tt j|||j|S |jd|j|y)NrrrELSErzInvalid selection statement) rrur_parse_expressionrrrIfrMrSwitchrK)rrOcond then_stmt else_stmtrIrs rrz"CParser._parse_selection_statementmsmmohh X&--/ X& ??A <<' $ C C EI 88D)YPS@TUUxxits7KLL X&--/ X&::<' T4QTAU(VWW!!"?QTAUVr c Z|j}|jxdk(ri|jd|j}|jd|j }t j |||j|Sxdk(r|j }|jd|jd|j}|jd|jdt j|||j|Sdk(rk|jd|jr|j}t j||j|}|j}|jd|j}|jd|j }t j|||||j|S|j}|jd|j}|jd|j}|jd|j }t j|||||j|S |jd|j|y)NrrrrrrzInvalid iteration statement)rrurrrrWhilerMDoWhilerr*DeclList_parse_expression_optForrK)rrOrrrr next_exprs rrz"CParser._parse_iteration_statementsmmohh X&--/ X&::<{{4ts/CDD::< W% X&--/ X& V$}}T41EFF X&++- 335E >>%1EFD557DLL( $ : : >@D 99T4D$//RUBVWW113 V$113 V$ 668  X&::<yytYdooc>RSS!!"?QTAUVr c|j}|jxdk(rR|jd}|jdtj|j |j |Sxdk(r6|jdtj|j |Sxdk(r6|jdtj|j |Sdk(r||jdr%tjd|j |S|j}|jdtj||j |S |jd|j |y)NrrrrrrzInvalid jump statement) rrurrGotorLrMBreakContinuerReturnrrK)rrOrUrIs rrzCParser._parse_jump_statementsmmohh<<- V$zz(..$//#2FGG V${{4??3#788 V$~~dooc&:;;<<' <<dooc.BCC--/ V$||D$//#*>??!!":DOOC > r c|j}|jdrS|j}|jd|j }t j ||||jS|S)NCONDOPr\)_parse_binary_expressionrrrrr TernaryOprU)rrIiftrueiffalses rrz%CParser._parse_conditional_expressionsb,,. << !++-F LL !88:G??4$**E E r min_preclhsc||j} |j}||jtvr |St|j}||kr |S|j}|j |j} |j}||jtvrn-t|j}||kDr|j ||}nnRtj||||j}rX) _parse_cast_expressionrJru_BINARY_PRECEDENCErLrr rBinaryOprU) rrrrOprecrr next_tok next_precs rr z CParser._parse_binary_expressions ;--/C**,C{chh.@@* )&chh/Dh$ !B MMO--/C::<#x}}ANDNOTLNOTPLUSMINUSrSIZEOF_ALIGNOFrr) rrrrUnaryOprLrUrrrMrr_parse_postfix_expression)rrrOrIrrr$s rrzCParser._parse_unary_expression4sp??$ 1 1--/C//1D==D$**= = G G--/C..0D==D$**= = x --/C446F!" Q}}SYYT__S5IJJ//1D==D$//#2FG G z !--/C LL "'')C LL "==C1EF F--//r c|j}|p|\}}}|jdrH|j}|jd|jdt j ||S|j ||j} |jdrC|j}|jdt j|||j}U|jdri|jdk(r|jd}n!|j}|jdt j|||j}|jdvr|j} |j} | jd vr!|j!d |j#| t j$| j&|j#| } t j(|| j&| |j}|jd vr@|j} t j*d | j&z||j} |S) NrrMrRrrrr>ARROWPERIOD>rrzInvalid struct referencerp)rr_parse_initializer_listrrCompoundLiteralr_parse_primary_expressionrArrayRefrUrr_parse_argument_expression_listFuncCallrurKrMrrL StructRefr() rrrrr$rrIsubrop_tokrUfieldrOs rr)z!CParser._parse_postfix_expressionTs002  !LCq||H%335 W% X&,,S$77 D!--/||J',,. Z(~~dC<||H%??$0MMOD??ADLL*~~dD$**= $77==?==(88%%2DOOH4M1JKtV\\5$**M $>>mmo}}S399_dDJJG  r cB|j}|dk(r|jS|tvs|tvs|tvr|j S|t vr|jS|tvr|jS|dk(r3|j|j}|jd|S|dk(r|j}|jd|j}|jd|j}|jd|j|}t!j"t!j$|j&|t!j(||g||S|j+d|j,j.y)NrrrOFFSETOFrMzInvalid expression)rr _INT_CONST _FLOAT_CONST _CHAR_CONST_parse_constant_STRING_LITERAL_parse_unified_string_literal _WSTR_LITERAL_parse_unified_wstring_literalrrrr!_parse_offsetof_member_designatorrMrr3rrLrrKr>rD)rrrIoff_tokr designatorrUs rr0z!CParser._parse_primary_expressionsa??$ t ))+ +  "<';&'') )  &557 7 } $668 8 x  MMO))+D LL "K z !mmoG LL "'')C LL !??AJ LL "OOG,E>>.Z0%8  . 0B0BCr cZ|j} |jdr3|j}tj|d||j}E|jdrC|j }|j dtj|||j} |S)Nr,.rr)_parse_identifier_or_typeidrrr4rUrrr1)rr`r7rIs rrBz)CParser._parse_offsetof_member_designators//1||H%88:tS%D||J'--/ Z(~~dD$**=  r c|j}|g}|jdr1|j|j|jdr1tj||j Srcrrs rr2z'CParser._parse_argument_expression_lists[002ll7# LL::< =ll7#~~eTZZ00r c"|jSrX)rrZs rrHz"CParser._parse_constant_expressions1133r c|jd}tj|j|j |S)Nr)rrrrLrMrs rrzCParser._parse_identifiers.ll4 xx 4??3#788r c|j}|jdvr!|jd|j|t j |j |j|S)N>rrzExpected identifier)rrurKrMrrrLrs rrGz#CParser._parse_identifier_or_typeidsRmmo 88+ +   3T__S5I Jxx 4??3#788r c|j}|jtvrd}d}|jddD]}|dvr|dz } |dvs|dz }|dkDr t d|dkDr t dd |zd |zz}t j |d z|j|j|S|jtvrZ|jd d vrd}n|jd dvrd}nd}t j ||j|j|S|jtvr0t j d|j|j|S|jd|j|y)Nr)lLr )uUz.Constant cannot have more than one u/U suffix.rz.Constant cannot have more than two l/L suffix.z unsigned zlong r'rb)fFfloatz long doubledoublecharzInvalid constant) rrur:rL ValueErrorrConstantrMr;r<rK)rrOu_countl_countchprefixrs rr=zCParser._parse_constantsZmmo 88z !GGiin#qLG:%qLG % { !QRR{ !QRR 7*Ww->>F>>&5.#))T__S=QR R 88| #yy} *2*,!>>!SYY0DE E 88{ ">>&#))T__S5IJ J ,dooc.BCr c>|jd}tjd|j|j |}|j dk(rH|j }|jdd|jddz|_|j dk(rH|S)NSTRING_LITERALstringrbr )rrrXrLrMrrrrOr`tok2s rr?z%CParser._parse_unified_string_literalsll+,~~h 4??33GHoo#33==?DCR4::ab>9DJoo#33 r c|j}|jtvr!|jd|j |t j d|j|j |}|jtvrY|j}|jjdd|jddz|_|jtvrY|S)NzInvalid string literalr_rbr) rrur@rKrMrrXrLrrstripr`s rrAz&CParser._parse_unified_wstring_literalsmmo 88= (   68L M~~h 4??33GHoo=0==?D**,Sb1DJJqrNBDJoo=0 r c|jd}|rj|jdr%tjg|j|S|j }|jd|j d|S|j S)NrrRrM)rrInitListrMr.rr)rr init_lists rrzCParser._parse_initializerst\\(+ ||H%~~b$//**EFF446I LL ! LL " 0022r c|jg}|jdrE|jdk(rn1|j|j|jdrEt j ||dj S)NrMrRr)_parse_initializer_itemrrrYrrerU)rrZs rr.zCParser._parse_initializer_listso--/0ll7# H, LL557 8ll7#~~eU1X^^44r cd}|jdvr|j}|j}|tj||S|SN>r,r)r_parse_designationrrNamedInitializer)r designationrs rrhzCParser._parse_initializer_item%sQ ??  6 6113K&&(  "))+t< < r cH|j}|jd|S)Nr)_parse_designator_listrr designatorss rrkzCParser._parse_designation/s"113  Xr cg}|jdvr2|j|j|jdvr2|Srj)rrY_parse_designatorrps rrozCParser._parse_designator_list5sF oo#99   t557 8oo#99r c|jdr#|j}|jd|S|jdr|jS|j d|j j y)Nrrr,zInvalid designator)rrHrrGrKr>rD)rrIs rrszCParser._parse_designator=sc << #224D LL $K << !335 5 . 0B0BCr ch|jd}|jd|j|y)Nr zDirectives not supported yet)rrKrMrs rrzCParser._parse_pp_directiveJs*ll8$ 8$//#:NOr cx|jdk(r|j}|jdk(r?|j}tj|j|j |Stjd|j |S|jdk(rg|j}|j d}|j}|j dtj||j |S|jd|jjy)Nr PPPRAGMASTRr-rrrzInvalid pragma) rrrPragmarLrMrr?rKr>rD)rrOstr_toklparenliterals rrz!CParser._parse_pppragma_directivePs ??  *--/C M1--/||GMM4??73KLL<<DOOC$89 9 ??  )--/C\\(+F88:G LL "<<)@A A *DII,>,>?r cg}|jdvr2|j|j|jdvr2|S)Nr)rrYr)rrs rrz&CParser._parse_pppragma_directive_listbsCoo#:: NN499; <oo#::r c|jd}|jd|j}d}|jdr|j}|jdt j |||j |gS)NrrrMr)rrHrr?r StaticAssertrM)rrOrrTs rrzCParser._parse_static_assertiswll+, X..0 << 446C X""4dooc.BCDDr )r-FrX)rN)Fr )FF)rrr)rr)T)rN)r!r"r#r$rboolrur%rCrrrPr'r rrSrrKr[r_rfrhrmr:r;r<r=rr_r{rrrrrrrrrrrJrrrrrrrMrrrrr rrrrrrrIrr r*r(rrrrCrEr9r:r rNr>rSrYr^rdr?rgrjrPrrrrwr~rrrrr}rrrrrrrrrrrrrrrrrrrrrrrrrrr rrr)r0rBr2rHrrGr=r?rArr.rhrkrorsrrrrr(r rr,r,2s  "$("* ==F|= =  =  === =:,8,) +c+(5/+d+ ,C , ,D ,cd:3:c:3:4:,#,$,TcSUZZX&jj5==(5>>9&s)& emm #enn 4 &Z ;'     4#( eeK e e ejj  eN  jj d5::./  jj    *$s$8F#3$5C5 5 & # (6*: #& #s#!3!4!3f33'x'7'4' .hv&6.$. )4),$,4,#E(3-2E,F#NS"FJ x #T) *6!E(3-2E,F!F;D;?4?% %V34 5%6=%--= ejj)9MT%**-=MlD$4 ?$uzz"2? ''+/' ejj 'Tejj)9%*v+!v+ {D(5/1 2v+v`FDI 9EJJ 9DI k* <@  k  8d8{8T%**TBUZZ0@ 8D4D+E DtK/@=$=uzz=" 5::5::HejjHL%**LM%**M3Tejj.2//&*/ /*   T5::T%**TIM7(!%**-7(6>uo7( 7(tejjUZZ4 4"EOOuIejjI&<<'/ ';B&.uzz&: D . .*00@.5::.d!D5::!DJ 5::  114EJJ495::9 9UZZ9DD@uzz  3EJJ 355D$4 UZZ(8D5::DPXP @5::@$UZZ0@Ed5::&6Er r,> rOREQUALANDEQUALDIVEQUALMODEQUALXOREQUAL PLUSEQUAL MINUSEQUAL TIMESEQUAL LSHIFTEQUAL RSHIFTEQUALLORLANDORrXORr!EQNEGTGELTLERSHIFTLSHIFTr$r%r DIVIDEMOD>AUTOEXTERNrTYPEDEFREGISTER _THREAD_LOCALINLINE _NORETURN>CONSTr4RESTRICTVOLATILE> INTCHARLONGVOIDFLOATSHORT_BOOLDOUBLESIGNEDUNSIGNED_COMPLEX__INT128>r8r6r7rr4r2> rr!r"r#r$r%rrr&r9rr'r > INT_CONST_BIN INT_CONST_DEC INT_CONST_HEX INT_CONST_OCTINT_CONST_CHAR FLOAT_CONSTHEX_FLOAT_CONST> CHAR_CONST WCHAR_CONST U8CHAR_CONST U16CHAR_CONST U32CHAR_CONSTr^>WSTRING_LITERALU8STRING_LITERALU16STRING_LITERALU32STRING_LITERAL>rrrrrrrrrrrrrrrrcveZdZdZdeddfdZddedeefdZ deefdZ defd Z d eddfd Z d eddfd Z y)rAzWraps a lexer to provide convenient, buffered access to the underlying token stream. The lexer is expected to be initialized with the input string already. r/rNc.||_g|_d|_y)Nr)_lexer_buffer_index)rr/s rrCz_TokenStream.__init__ s /1  r rcn|dkry|j||j|j|zdz S)zPeek at the k-th next token in the stream, without consuming it. Examples: k=1 returns the immediate next token. k=2 returns the token after that. rNr _fillrrrs rrz_TokenStream.peek s5 6 1 ||DKK!Oa/00r c|jd|j|j}|xjdz c_|S)z%Consume a single token and return it.r rrs rrz_TokenStream.next s2 1 ll4;;' q  r c|jSrXrrZs rrz_TokenStream.mark" s {{r rc||_yrXrrs rrz_TokenStream.reset% s  r nc t|j|j|zkr_|jj }|jj ||yt|j|j|zkr^yyrX)r]rrrrrY)rrrOs rrz_TokenStream._fill( sb$,,$++/1++##%C LL   ${ $,,$++/1r r)r!r"r#r$rrCr'r rrrrrrr(r rrArAsu f 1c 1(6"2 1hv&c#$str rAc^eZdZUeeed<eeed<eeed<eeed<eeed<y)rrrrurrN)r!r"r#rrr&r(r rrr6 s2 s)O #Y s)O3iCyr rrczeZdZUeej ed<eej ed<eej ed<y)rrrrrN)r!r"r#r rr_r&r(r rrrA s1 5::  5::  ejj !!r rN)+ dataclassesrtypingrrrrrr r r r r-rc_lexerrrast_transformsrrr Exceptionr*r,rrr;r<rr=r _EXPR_STARTr:r;r<r>r@rrrArrrr(r rrs."   #C  $   E EDB " 1 A ! 1   1   !  ! ! ! ! ! a a A Q  Q!" a#$ 1%*VK(>  C C   01  $$    (..n JK " "r