§
    2@Äj  ã                   óT   — d Z ddlZddlZddlZ G d„ dej        ¦  «        Zd„ Zd„ ZdS )zR
This module provides helper functions to find the first line of a function
body.
é    Nc                   ó>   ‡ — e Zd ZdZd„ Zˆ fd„Zdej        fd„Zˆ xZ	S )ÚFindDefFirstLinezÊ
    Attributes
    ----------
    first_stmt_line : int or None
        This stores the first statement line number if the definition is found.
        Or, ``None`` if the definition is not found.
    c                 ó0   — || _         || _        d| _        dS )zf
        Parameters
        ----------
        code :
            The function's code object.
        N)Ú_co_nameÚ_co_firstlinenoÚfirst_stmt_line)ÚselfÚnameÚfirstlinenos      úKC:\Projects\Historical\venv\Lib\site-packages\numba/misc/firstlinefinder.pyÚ__init__zFindDefFirstLine.__init__   s!   € ð ˆŒØ*ˆÔØ#ˆÔÐÐó    c                 óx   •— t          j        |¦  «        D ]#}t          ¦   «                              |¦  «         Œ$d S )N)ÚastÚiter_child_nodesÚsuperÚvisit)r	   ÚnodeÚchildÚ	__class__s      €r   Ú_visit_childrenz FindDefFirstLine._visit_children   s@   ø€ ÝÔ)¨$Ñ/Ô/ð 	!ð 	!ˆEÝ‰GŒG�MŠM˜%Ñ Ô Ð Ð ð	!ð 	!r   r   c                 óf  — |j         | j        k    r‹t          |j        g¦  «        }|j        r'|j        d         }|                     |j        ¦  «         | j        |v r?|j        r7|j        d         }t          |¦  «        r|j        d         }|j        | _	        d S 	 |  
                    |¦  «         d S )Nr   é   )r
   r   ÚsetÚlinenoÚdecorator_listÚaddr   ÚbodyÚ_is_docstringr   r   )r	   r   Úpossible_start_linesÚfirst_decorÚ
first_stmts        r   Úvisit_FunctionDefz"FindDefFirstLine.visit_FunctionDef#   sÆ   € ØŒ9˜œÒ%Ð%õ $'¨¬ }Ñ#5Ô#5Ð ØÔ"ð =ð #Ô1°!Ô4�Ø$×(Ò(¨Ô);Ñ<Ô<Ð<àÔ#Ð';Ð;Ð;ð ”9ð Ø!%¤¨1¤�JÝ$ ZÑ0Ô0ð 2à%)¤Y¨q¤\˜
Ø+5Ô+<�DÔ(Ø�Fð
 Ø×Ò˜TÑ"Ô"Ð"Ð"Ð"r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ÚFunctionDefr#   Ú__classcell__)r   s   @r   r   r      sn   ø€ € € € € ðð ð	$ð 	$ð 	$ð!ð !ð !ð !ð !ð# c¤oð #ð #ð #ð #ð #ð #ð #ð #r   r   c                 óº   — t          | t          j        ¦  «        r@t          | j        t          j        ¦  «        r!t          | j        j        t
          ¦  «        rdS dS )NTF)Ú
isinstancer   ÚExprÚvalueÚConstantÚstr)r   s    r   r   r   A   sM   € Ý�$�œÑ!Ô!ð Ý�t”z¥3¤<Ñ0Ô0ð 	Ý˜tœzÔ/µÑ5Ô5ð	à�4Øˆ5r   c                 ó4  — | j         }	 t          |j        ¦  «        5 }|                     ¦   «         }d}ddd¦  «         n# 1 swxY w Y   nc# t          t
          f$ rO 	 t          j        | ¦  «        \  }}d                     |¦  «        }|dz
  }n# t
          t          f$ r Y Y dS w xY wY nw xY wt          j        t          j        |¦  «        ¦  «        }t          |j        |j        |z
  ¦  «        }|                     |¦  «         |j        r
|j        |z   S dS )a  
    Look up the first line of function body using the file in
    ``pyfunc.__code__.co_filename``.

    Returns
    -------
    lineno : int; or None
        The first line number of the function body; or ``None`` if the first
        line cannot be determined.
    r   NÚ r   )Ú__code__ÚopenÚco_filenameÚreadÚFileNotFoundErrorÚOSErrorÚinspectÚgetsourcelinesÚjoinÚ	TypeErrorr   ÚparseÚtextwrapÚdedentr   Úco_nameÚco_firstlinenor   r   )ÚpyfuncÚcoÚfinÚsourceÚoffsetÚlinesÚtreeÚfinders           r   Úget_func_body_first_linenorI   I   sp  € ð 
Œ€Bð
Ý�"”.Ñ!Ô!ð 	 SØ—X’X‘Z”ZˆFØˆFð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øøõ �wÐ'ð ð ð ð	Ý#Ô2°6Ñ:Ô:‰MˆE�6Ø—W’W˜U‘^”^ˆFØ˜a‘ZˆFˆFøÝ�Ð#ð 	ð 	ð 	Ø�4�4�4ð	øøøð ˆFð	øøøõ Œ9•X”_ VÑ,Ô,Ñ-Ô-€DÝ˜bœj¨"Ô*;¸fÑ*DÑEÔE€FØ
‡L‚L�ÑÔÐØÔð ØÔ%¨Ñ.Ð.ð ˆtsW   ‰A �A ´A Á AÁA ÁAÁA ÁB,Á1BÂB,ÂB&Â!B,Â%B&Â&B,Â+B,)r'   r   r8   r=   ÚNodeVisitorr   r   rI   © r   r   ú<module>rL      s�   ððð ð
 €
€
€
Ø €€€Ø €€€ð3#ð 3#ð 3#ð 3#ð 3#�s”ñ 3#ô 3#ð 3#ðlð ð ðð ð ð ð r   