§
    2@ÄjÔ  ã                   óŒ  — d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 	  ed¬¦  «         dZ e
¦   «         Zej                             d	¦  «        Zn# e$ r dZdZY nw xY wd
Z ej        ee¦  «        ZdZ ej        ee¦  «        Z	 ddlZdZn# e$ r dZY nw xY wdZ ej        ee¦  «        Z G d„ de¦  «        ZdS )z'Helpers for running gdb related testingé    N)Úconfig)Ú_confirm_gdb)Úcollect_gdbinfoF)Úneed_ptrace_attachTÚ3z;functioning gdb with correct ptrace permissions is requiredz gdb with python 3 support neededzpexpect module needed for testc                   ó˜   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd	„ Zd
„ Z	d„ Z
dd„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zdd„Zd d„Zd!d„Zdd„Zd„ Zd„ ZdS )"ÚGdbMIDriverzs
    Driver class for the GDB machine interface:
    https://sourceware.org/gdb/onlinedocs/gdb/GDB_002fMI.html
    Féx   Nc                 ó
  — t           sd}t          |¦  «        ‚t          sd}t          |¦  «        ‚t          j        | _        t          j        | _        || _	        || _
        || _        || _        |                      ¦   «          d S )Nz[This driver requires the pexpect module. This can be obtained via:

$ conda install pexpectzWThis driver requires a gdb binary. This can be obtained via the system package manager.)Ú_HAVE_PEXPECTÚRuntimeErrorÚ	_HAVE_GDBr   Ú
GDB_BINARYÚ_gdb_binaryÚsysÚ
executableÚ_pythonÚ_debugÚ
_file_nameÚ_timeoutÚ
_init_cmdsÚ_drive)ÚselfÚ	file_nameÚdebugÚtimeoutÚ	init_cmdsÚmsgs         úHC:\Projects\Historical\venv\Lib\site-packages\numba/tests/gdb_support.pyÚ__init__zGdbMIDriver.__init__+   s}   € Ýð 	$ð>ˆCå˜sÑ#Ô#Ð#Ýð 	$ð>ˆCå˜sÑ#Ô#Ð#Ý!Ô,ˆÔÝ”~ˆŒØˆŒØ#ˆŒØˆŒØ#ˆŒØ�Š‰Œˆˆˆó    c                 óf  — t           j                             | j        ¦  «        sJ ‚| j        ddg}| j        �|t          | j        ¦  «        z  }|d| j        | j        gz  }t          j	        d 
                    |¦  «        ¦  «        | _        | j        rt          j        j        | j        _        dS dS )z0This function sets up the caputured gdb instancez--interpreterÚmiNz--argsú )ÚosÚpathÚisfiler   r   r   Úlistr   ÚpexpectÚspawnÚjoinÚ	_capturedr   r   ÚstdoutÚbufferÚlogfile©r   Úcmds     r   r   zGdbMIDriver._drive<   s¢   € åŒw�~Š~˜dœoÑ.Ô.Ð.Ð.Ð.ØÔ °$Ð7ˆØŒ?Ð&Ø•4˜œÑ(Ô(Ñ(ˆCØ�˜$œ,¨¬Ð8Ñ8ˆÝ œ s§x¢x°¡}¤}Ñ5Ô5ˆŒØŒ;ð 	7Ý%(¤ZÔ%6ˆDŒNÔ"Ð"Ð"ð	7ð 	7r!   c                 ó.   — d|                       ¦   «         v S )z_Returns True if the underlying gdb implementation has python support
           False otherwiseÚpython)Úlist_features©r   s    r   Úsupports_pythonzGdbMIDriver.supports_pythonG   s   € ð ˜4×-Ò-Ñ/Ô/Ð/Ð/r!   c                 óž   — |                       ¦   «         sdS d}|                      d|¦  «         d| j        j                             ¦   «         v S )z€Returns True if the underlying gdb implementation has NumPy support
           (and by extension Python support) False otherwiseFzGpython from __future__ import print_function;import numpy; print(numpy)Úconsolezmodule 'numpy' from)r6   Úinterpreter_execr,   ÚbeforeÚdecoder0   s     r   Úsupports_numpyzGdbMIDriver.supports_numpyL   sV   € ð ×#Ò#Ñ%Ô%ð 	Ø�5ð,ˆà×Ò˜i¨Ñ-Ô-Ð-Ø&¨$¬.Ô*?×*FÒ*FÑ*HÔ*HÐHÐHr!   c                 ó®   — 	 | j                              || j        ¬¦  «         d S # t          j        j        $ r}d|› d�}t          |¦  «        |‚d }~ww xY w)N)r   zExpected value did not arrive: ú.)r,   Úexpectr   r)   Ú
exceptionsÚTIMEOUTÚ
ValueError)r   r?   Úer   s       r   Ú_captured_expectzGdbMIDriver._captured_expectW   sm   € ð	)ØŒN×!Ò! &°$´-Ð!Ñ@Ô@Ð@Ð@Ð@øÝÔ!Ô)ð 	)ð 	)ð 	)Ø=°FÐ=Ð=Ð=ˆCÝ˜S‘/”/ qÐ(øøøøð	)øøøs   ‚!% ¥A¹AÁAc                 ór   — | j         j        }|                     d¦  «        }||v sJ d|› d|› d�¦   «         ‚dS )z=Asserts that the current output string contains the expected.úutf-8údecoded=ú

expected=ú)N)r,   Úafterr;   )r   ÚexpectedÚoutputÚdecodeds       r   Úassert_outputzGdbMIDriver.assert_output^   sP   € à”Ô%ˆØ—-’- Ñ(Ô(ˆØ˜7Ð"Ð"Ð"Ð$N¨wÐ$NÐ$NÀ8Ð$NÐ$NÐ$NÑ"Ô"Ð"Ð"Ð"r!   c                 óÌ   — | j         j        }|                     d¦  «        }|                     ¦   «         d         }t	          j        ||¦  «        }|sJ d|› d|› d�¦   «         ‚dS )zKAsserts that the current output string contains the expected
        regex.rF   r   rG   rH   rI   N)r,   rJ   r;   Ú
splitlinesÚreÚmatch)r   rK   rL   rM   Údone_strÚfounds         r   Úassert_regex_outputzGdbMIDriver.assert_regex_outputd   ss   € ð ”Ô%ˆØ—-’- Ñ(Ô(ˆØ×%Ò%Ñ'Ô'¨Ô*ˆÝ”˜ 8Ñ,Ô,ˆØÐ@Ð@Ð@ Ð@Ð@°XÐ@Ð@Ð@Ñ@Ô@ˆuÐ@Ð@r!   Ú c                 ód   — | j                              |¦  «         |                      |¦  «         d S )N)r,   ÚsendlinerD   )r   Úcommandr?   s      r   Ú_run_commandzGdbMIDriver._run_commandm   s2   € ØŒ×Ò Ñ(Ô(Ð(Ø×Ò˜fÑ%Ô%Ð%Ð%Ð%r!   c                 ó4   — |                       dd¬¦  «         dS )zgdb command ~= 'run'z	-exec-runú\^running.*\r\n©r?   N©rZ   r5   s    r   ÚrunzGdbMIDriver.runq   s"   € à×Ò˜+Ð.@ÐÑAÔAÐAÐAÐAr!   c                 ó4   — |                       dd¬¦  «         dS )zgdb command ~= 'continue'z-exec-continuer\   r]   Nr^   r5   s    r   ÚcontzGdbMIDriver.contu   s#   € à×ÒÐ*Ð3EÐÑFÔFÐFÐFÐFr!   c                 óf   — |                       dd¬¦  «         | j                             ¦   «          dS )zgdb command ~= 'quit'z	-gdb-exitr]   N)rZ   r,   Ú	terminater5   s    r   ÚquitzGdbMIDriver.quity   s5   € à×Ò˜+¨lÐÑ;Ô;Ð;ØŒ× Ò Ñ"Ô"Ð"Ð"Ð"r!   c                 ó4   — |                       dd¬¦  «         dS )zgdb command ~= 'next'z
-exec-nextú\*stopped,.*\r\nr]   Nr^   r5   s    r   ÚnextzGdbMIDriver.next~   ó"   € à×Ò˜,Ð/BÐÑCÔCÐCÐCÐCr!   c                 ó4   — |                       dd¬¦  «         dS )zgdb command ~= 'step'z
-exec-steprf   r]   Nr^   r5   s    r   ÚstepzGdbMIDriver.step‚   rh   r!   c                 ó  — |�|�t          d¦  «        ‚d}|�	|d|› d�z  }|�(t          |t          ¦  «        sJ ‚|d| j        › d|› d�z  }|� t          |t          ¦  «        sJ ‚|d|› d�z  }|                      |d	¬
¦  «         dS )zgdb command ~= 'break'Nz%Can only supply one of line or symbolz-break-insert z-c "z" z-f ú:r$   z\^doner]   )rB   Ú
isinstanceÚintr   ÚstrrZ   )r   ÚlineÚsymbolÚ	conditionÚbps        r   Úset_breakpointzGdbMIDriver.set_breakpoint†   sÆ   € àÐ Ð 2ÝÐDÑEÔEÐEØˆØÐ ØÐ&˜Ð&Ð&Ð&Ñ&ˆBØÐÝ˜d¥CÑ(Ô(Ð(Ð(Ð(ØÐ1˜œÐ1Ð1¨$Ð1Ð1Ð1Ñ1ˆBØÐÝ˜f¥cÑ*Ô*Ð*Ð*Ð*Ø�/˜�/�/�/Ñ!ˆBØ×Ò˜" YÐÑ/Ô/Ð/Ð/Ð/r!   c                 ó&  — |                       d¦  «         |                      d¦  «         |�0t          |t          ¦  «        sJ ‚|                      d|› d�¦  «         |�2t          |t          ¦  «        sJ ‚|                      d|› d�¦  «         dS dS )z%Checks that a breakpoint has been hitrf   z!*stopped,reason="breakpoint-hit",Nzbkptno="ú"zline=")rD   rN   rm   rn   )r   Únumberrp   s      r   Úcheck_hit_breakpointz GdbMIDriver.check_hit_breakpoint•   s²   € à×ÒÐ1Ñ2Ô2Ð2Ø×ÒÐ>Ñ?Ô?Ð?ØÐÝ˜f¥cÑ*Ô*Ð*Ð*Ð*Ø×ÒÐ3¨&Ð3Ð3Ð3Ñ4Ô4Ð4ØÐÝ˜d¥CÑ(Ô(Ð(Ð(Ð(Ø×ÒÐ/¨Ð/Ð/Ð/Ñ0Ô0Ð0Ð0Ð0ð Ðr!   é   r   c                 ó�   — |||fD ]}t          |t          ¦  «        r|dv sJ ‚Œd|› d|› d|› �}|                      |d¬¦  «         dS )zgdb command ~= 'info args'©r   ry   é   z-stack-list-arguments r$   ú\^done,.*\r\nr]   N©rm   rn   rZ   )r   Úprint_valuesÚ	low_frameÚ
high_frameÚxr1   s         r   Ústack_list_argumentsz GdbMIDriver.stack_list_arguments    st   € à 	¨:Ð6ð 	9ð 	9ˆAÝ˜a¥Ñ%Ô%Ð8¨!¨y¨.¨.¨.Ð8¨.ØN |ÐNÐN°iÐNÐNÀ*ÐNÐNˆØ×Ò˜#Ð&6ÐÑ7Ô7Ð7Ð7Ð7r!   c                 ót   — t          |t          ¦  «        r|dv sJ ‚d|› �}|                      |d¬¦  «         dS )zgdb command ~= 'info locals'r{   z-stack-list-variables r}   r]   Nr~   )r   r   r1   s      r   Ústack_list_variablesz GdbMIDriver.stack_list_variables§   sO   € å˜,­Ñ,Ô,ÐJ°ÀÐ1JÐ1JÐ1JÐJØ5 |Ð5Ð5ˆØ×Ò˜#Ð&6ÐÑ7Ô7Ð7Ð7Ð7r!   c                 óŠ   — |€t          d¦  «        ‚|€t          d¦  «        ‚d|› d|› d�}|                      |d¬¦  «         dS )	z!gdb command ~= 'interpreter-exec'Nzinterpreter cannot be Nonezcommand cannot be Nonez-interpreter-exec z "rv   z\^(done|error).*\r\nr]   )rB   rZ   )r   ÚinterpreterrY   r1   s       r   r9   zGdbMIDriver.interpreter_exec­   sc   € àÐÝÐ9Ñ:Ô:Ð:Øˆ?ÝÐ5Ñ6Ô6Ð6Ø< ;Ð<Ð<°'Ð<Ð<Ð<ˆØ×Ò˜#Ð&=ÐÑ>Ô>Ð>Ð>Ð>r!   c                 ó8   — d}|                       |d¬¦  «         d S )Nz-list-featuresr}   r]   r^   r0   s     r   Ú_list_features_rawzGdbMIDriver._list_features_raw¶   s'   € ØˆØ×Ò˜#Ð&6ÐÑ7Ô7Ð7Ð7Ð7r!   c                 ón  — |                       ¦   «          | j        j        }|                     d¦  «        }t	          j        d|¦  «        }|€
J d¦   «         ‚|                     ¦   «         }t          |¦  «        dk    s
J d¦   «         ‚|d                              dd	¦  «         	                    d
¦  «        S )zXNo equivalent gdb command? Returns a list of supported gdb
           features.
        rF   z.*features=\[(.*)\].*Nz"No match found for features stringry   z$Invalid number of match groups foundr   rv   rV   ú,)
r‰   r,   rJ   r;   rQ   rR   ÚgroupsÚlenÚreplaceÚsplit)r   rL   rM   ÚmÚgs        r   r4   zGdbMIDriver.list_featuresº   s    € ð 	×ÒÑ!Ô!Ð!Ø”Ô%ˆØ—-’- Ñ(Ô(ˆÝŒHÐ.°Ñ8Ô8ˆØˆ}ˆ}ÐB‰}Œ}ˆ}Ø�HŠH‰JŒJˆÝ�1‰vŒv˜Š{ˆ{ˆ{ÐB‰{Œ{ˆ{Ø�Œt�|Š|˜C Ñ$Ô$×*Ò*¨3Ñ/Ô/Ð/r!   )Fr
   N)rV   )NNN)NN)ry   r   r   )ry   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r   r6   r<   rD   rN   rU   rZ   r_   ra   rd   rg   rj   rt   rx   rƒ   r…   r9   r‰   r4   © r!   r   r	   r	   &   s‚  € € € € € ðð ðð ð ð ð"	7ð 	7ð 	7ð0ð 0ð 0ð
	Ið 	Ið 	Ið)ð )ð )ðOð Oð OðAð Að Að&ð &ð &ð &ðBð Bð BðGð Gð Gð#ð #ð #ð
Dð Dð DðDð Dð Dð0ð 0ð 0ð 0ð	1ð 	1ð 	1ð 	1ð8ð 8ð 8ð 8ð8ð 8ð 8ð 8ð?ð ?ð ?ð ?ð8ð 8ð 8ð0ð 0ð 0ð 0ð 0r!   r	   )r•   r%   rQ   r   ÚunittestÚ
numba.corer   Únumba.misc.gdb_hookr   Únumba.misc.numba_gdbinfor   r   Ú	_gdb_infoÚpy_verÚ
startswithÚ_GDB_HAS_PY3Ú	ExceptionÚ_msgÚ
skipUnlessÚ	needs_gdbÚneeds_gdb_py3r)   r   ÚImportErrorÚskip_unless_pexpectÚobjectr	   r–   r!   r   ú<module>r§      s˜  ðØ -Ð -Ø 	€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4ðØ€L EÐ*Ñ*Ô*Ð*Ø€IØ�Ñ!Ô!€IØÔ#×.Ò.¨sÑ3Ô3€L€LøØð ð ð Ø€IØ€L€L€Lðøøøð E€ØˆHÔ 	¨4Ñ0Ô0€	à)€Ø#�Ô# L°$Ñ7Ô7€ðØ€N€N€NØ€M€MøØð ð ð Ø€M€M€Mðøøøð (€Ø)�hÔ)¨-¸Ñ>Ô>Ð ð_0ð _0ð _0ð _0ð _0�&ñ _0ô _0ð _0ð _0ð _0s#   ¦2A Á	A%Á$A%ÂB ÂB ÂB 