a �DOgU�@sldZddlZddlZddlZddlZgd�ZiZdd�Zddd�Zddd �Z dd d �Z dd d �Z dd�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� checkcache� lazycachecCs t��dS)zClear the cache entirely.N)�cache�clear�rr�!/usr/lib64/python3.9/linecache.pyrsrcCs6t||�}d|kr"t|�kr2nn ||dSdS)z~Get a line for a Python source file from the cache. Update the cache if it doesn't contain an entry for this file already.��)�getlines�len)�filename�lineno�module_globals�linesrrr rs  rcCsV|tvr(t|}t|�dkr(t|dSz t||�WStyPt�gYS0dS)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)rr�entryrrr r $s    r c Cs�|durtt���}n|tvr&|g}ndS|D]�}t|}t|�dkrHq.|\}}}}|dur^q.zt�|�}Wn"ty�t�|d�Yq.Yn0||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�fullnamerrrr r4s&     rc Cs|tvr$tt|�dkr$t�|d�|r<|�d�r@|�d�r@gS|}zt�|�}W�nt�yf|}t||�r�zt|d�}Wnt tfy�YnD0|dur�gYSt|�ddd�|� �D�|ft|<t|dYStj � |�r�gYSt j D]`}ztj �||�}Wnttf�y*Yq�Yn0zt�|�}W�qbWq�t�yVYq�0q�gYSYn0z8t�|��}|��}Wd�n1�s�0YWnt�y�gYS0|�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.r N�<�>rcSsg|] }|d�qS)� r)�.0�linerrr � p�zupdatecache..r�����r$)rr r� startswith�endswithrrrr� ImportError� splitlines�path�isabs�sys�join� TypeError�AttributeError�tokenize�open� readlinesrr) rrr!r�basename�data�dirname�fprrr rrr rPs\  �      , rcCs�|tvr tt|�dkrdSdS|r8|�d�r<|�d�rs   C