U e5dÒã@sndZddlZddlZddlZddlZdddgZddd„Ziadd„Zddd „Z dd d„Z dd d „Z d d„Z dS)zÃCache lines from Python source files. This is intended to read lines from modules imported -- hence if a filename is not found, it will look down the module search path for a file by that name. éNÚgetlineÚ clearcacheÚ checkcachecCs:t||ƒ}d|kr"t|ƒkr2nn ||dSdSdS)NéÚ)ÚgetlinesÚlen)ÚfilenameÚlinenoÚmodule_globalsÚlines©r ú!/usr/lib64/python3.8/linecache.pyrs  cCsiadS)zClear the cache entirely.N)Úcacher r r rrscCsX|tkr(t|}t|ƒdkr(t|dSz t||ƒWStk rRtƒgYSXdS)z�Get the lines for a Python source file from the cache. Update the cache if it doesn't contain an entry for this file already.réN)rrÚ updatecacheÚ MemoryErrorr)r r Úentryr r rr%s   rc Cs¸|dkrtt ¡ƒ}n|tkr&|g}ndS|D]„}t|}t|ƒdkrHq.|\}}}}|dkr^q.zt |¡}Wn$tk r�t |d¡Yq.YnX||jks¦||j kr.t |d¡q.dS)zUDiscard cache entries that are out of date. (This is not checked upon each call!)Nr) ÚlistrÚkeysrÚosÚstatÚOSErrorÚpopÚst_sizeÚst_mtime)r Ú filenamesrÚsizeÚmtimer Úfullnamerr r rr5s&    c Csö|tkr$tt|ƒdkr$t |d¡|r<| d¡r@| d¡r@gS|}zt |¡}W�ntk �rn|}t||ƒrâzt|dƒ}Wnt tfk ržYnDX|dkr°gYSt|ƒddd„|  ¡Dƒ|ft|<t|dYStj   |¡rögYSt j D]d}ztj  ||¡}Wnttfk �r0YqüYnXzt |¡}W�qjWqütk �r^YqüXqügYSYnXz"t |¡�}| ¡}W5QRXWntk �r¬gYSX|�rÔ|d  d ¡�sÔ|d d 7<|j|j} } | | ||ft|<|S) z”Update a cache entry and return its list of lines. If something's wrong, print a message, discard the cache entry, and return an empty list.rNú<ú>rcSsg|] }|d‘qS)Ú r )Ú.0Úliner r rÚ qszupdatecache..réÿÿÿÿr")rrrÚ startswithÚendswithrrrÚ lazycacheÚ ImportErrorÚ splitlinesÚpathÚisabsÚsysÚjoinÚ TypeErrorÚAttributeErrorÚtokenizeÚopenÚ readlinesrr) r r rrÚbasenameÚdataÚdirnameÚfpr rrr r rrRs\  þ       rcCsŒ|tkr tt|ƒdkrdSdS|r8| d¡r<| d¡rr.rr2Ú__all__rrrrrrr)r r r rÚs     A