Yf @ s d Z d d l Z d d l Z d d l Z d d l Z d d d g Z d d d Z i a d d Z d d d Z d d d Z d d d Z d d Z d S)zCache 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. Ngetline clearcache checkcachec C sE t | | } d | k o, t | k n r= | | d Sd Sd S)N )getlineslen)filenamelinenomodule_globalslines r ./opt/alt/python35/lib64/python3.5/linecache.pyr s "c C s i a d S)zClear the cache entirely.N)cacher r r r r s c C si | t k r4 t | } t | d k r4 t | d Sy t | | SWn t k rd t g SYn Xd S)zGet 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)r r updatecacheMemoryErrorr )r r entryr r r r % s r c C s | d k r! t t j } n | t k r9 | g } n d Sx | D] } t | } t | d k ri qD | \ } } } } | d k r qD y t j | } Wn t k r t | =wD Yn X| | j k s | | j k rD t | =qD Wd S)zUDiscard cache entries that are out of date. (This is not checked upon each call!)Nr ) listr keysr osstatOSErrorst_sizest_mtime)r filenamesr sizemtimer fullnamer r r r r 5 s&