o
    iaB                     @   sj  d dl mZ d dlmZ d dlZd dlmZ d dlZd dlm	Z	 d dl
Zd dlmZ d dlmZ ejdkr:ejd	k s<J G d
d deeZG dd deZG dd deZG dd dZG dd dZejZdZdededee fddZdeje defddZdFdededefd d!Zd"ej e defd#d$Z!e!Z"d%e	d&e#eef d'ee$eef  defd(d)Z%eG d*d+ d+Z&d%e	fd,d-Z'd.ee& defd/d0Z(ej)d1 Z*ej)d2 Z+ej)d3 Z,ej)d4 Z-ej)d5 Z.ej)d6 Z/ej)d7 Z0ej)d8 Z1ej)d9 Z2ej)d: Z3ee0d e+d e1d gZ4d;ed<ede$ed=f fd>d?Z5e6ej)d@ gZ7d%e	dAedBe8dCe8de$e	ef f
dDdEZ9dS )G    )ABC)	dataclassN)Enum)CodeType)HookType)CoverageLines)      )r      c                   @   s*   e Zd ZdZdZededd fddZdS )JumpDirection   opcodereturnc                 C   s   dt j| v r
| jS | jS )NBACKWARD)disopnamer   FORWARD)clsr    r   d/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/coverage/instrumentation_py3_11.pyfrom_opcode   s   zJumpDirection.from_opcodeN)__name__
__module____qualname__r   r   classmethodintr   r   r   r   r   r      s
    r   c                   @   s"   e Zd ZdededdfddZdS )Jumpstartargr   Nc                 C   s   || _ d | _|| _d S N)r   endr   )selfr   r   r   r   r   __init__   s   
zJump.__init__)r   r   r   r   r#   r   r   r   r   r      s    r   c                       s8   e Zd ZeejZdedededdf fddZ	  Z
S )RJumpr   r   	directionr   Nc                    s2   t  || || _|| jd> | j  d | _d S )Nr      )superr#   r%   r   r!   )r"   r   r   r%   	__class__r   r   r#   %   s   zRJump.__init__)r   r   r   setr   hasjrel__opcodes__r   r   r#   __classcell__r   r   r(   r   r$   "   s    
&r$   c                   @   s*   e Zd ZdZdedededdfddZdS )	Instructionoffsetr   r   targetsr0   r   r   r   Nc                 C   s   || _ || _|| _g | _d S r    r/   )r"   r0   r   r   r   r   r   r#   /   s   
zInstruction.__init__)r   r   r   	__slots__r   r#   r   r   r   r   r.   ,   s    r.   c                   @   s4   e Zd ZdededdfddZedefddZdS )	Branchr   r!   r   Nc                 C   s   || _ || _d S r    r   r!   )r"   r   r!   r   r   r   r#   7   s   
zBranch.__init__c                 C   s   t | jj| jj d d? S )Nr&   r   )absr!   r0   r   )r"   r   r   r   r   ;   s   z
Branch.arg)r   r   r   r.   r#   propertyr   r   r   r   r   r   r3   6   s    r3   r   r   r   r   c                 C   sF   t t| |d@ g}|dL }|r!|dt tt|d@  |dL }|s|S )N      r   )r.   	NO_OFFSETinsertEXTENDED_ARG)r   r   instructionsr   r   r   instr_with_argD   s   r=   iteratorc                 C   s@   t | }|d@ }|d@ r|dK }t | }||d@ O }|d@ s|S N?   @      )next)r>   bvalr   r   r   from_varintM   s   rF   Fvalueset_begin_markerc                 C   sl   t  }| dk rtd| r!|d| d@ |rdndB  | dL } | s|p't dg}|r2|d  dO  < t|S )Nr   zInvalid value for varintr@   rA   rB      )	bytearray
ValueErrorr:   bytes)rG   rH   tempr   r   r   	to_varintW   s   rN   streamc                 C   sZ   t  }t| }|| |d@ }|d@ r)t| }|| |d> |d@ B }|d@ st|S r?   )rJ   rC   appendrL   )rO   arD   rG   r   r   r   consume_varintf   s   

rR   codetrap_mapext_arg_offsetsc              	   C   s"  t  }| j}t|}tt|}t|d\}}d }	}
	 zt  }t|}|| |d@ d d> }|d? d@ }|dkrQ|t| tdD ]	}|t	| qFn:|d	kr]|t| n.d
|  krgdkrxn ntdD ]	}|t| qmnd|  krdkrn n|t| |	|v r||	 }t
|d\}}t|D ]}|d q|r|d|d B  |
|d> 7 }
|	|7 }	|
|7 }
|d ur|
|krd| }|d  t|tt|7  < |tt|k r|dtt|| B  |
|d> 7 }
t|d\}}|| W n ty   Y t|S w q)N)NNr   T   r   r            
   r
   r&   	   r8   r7      )rJ   co_linetableitersortedrC   rP   extendconsume_signed_varintrangerR   divmodmintcastr   StopIterationrL   )rS   rT   rU   new_datadata	data_iterext_arg_offset_iterext_arg_offsetext_arg_sizeoriginal_offsetr0   chunkrD   offset_deltaloc_code_	trap_sizenrroomr   r   r   update_location_datay   sb   
rw   c                   @   sL   e Zd ZU ejeef ed< ejeef ed< ejeef ed< eed< dS )ExceptionTableEntryr   r!   targetdepth_lastiN)r   r   r   re   Unionr   r.   __annotations__r   r   r   r   rx      s
   
 rx   c                 c   sn    t | j}z&	 t|d> }t|d> }|| d }t|d> }t|}t||||V  q ty6   Y d S w )NTr   r&   )r^   co_exceptiontablerF   rx   rg   )rS   r>   r   lengthr!   ry   dlr   r   r   parse_exception_table   s   
r   	exc_tablec                 C   s|   t  }| D ]4}|jj|jj d }|t|jjd? d |t|d?  |t|jjd?  |t|j qt|S )Nr&   r   T)	rJ   r!   r0   r   r`   rN   ry   rz   rL   )r   tableentrysizer   r   r   compile_exception_table   s   r   	PUSH_NULL
LOAD_CONSTPRECALLCACHECALLPOP_TOPRESUMERETURN_VALUEIMPORT_NAMEIMPORT_FROM
trap_index	arg_index.c                 C   s   t ttdgtt| tt|t ttdt ttdt ttdt ttdt ttdt ttdt ttdt ttdR S )Nr   r   )	r.   r9   r   r=   r   r   r   r   r   )r   r   r   r   r   	trap_call   s,   






	


r   END_ASYNC_FORhookpathpackagec           :   	   C   s  ||}}g }t | j}t|}|| t }	t t| }
dd |
D }i }i }i }i }tt| }t	}t
dt| jdD ]}| j| tkrL|} nq?| jdkra|ddikra| jtkraddi}d}d}d}d }d }ztt| j}g }	 t|\}}||v rt|d> ||< ||v r||kr|| }| j| tvrt|t|}t|||< || d }| jdkrt|t| jd kr|df}||||f |d ||< |	| t|\}} t|d> }!|t|||  |tu r||  qv|}|}tjg || d	d
d}|  |tkrA| j| }"| j| }|"dkr-d|dd |" d  n|}|d d |d d ||fff|d< |tkrt| d| j|  }#|d d |d d |d d d t t |d d d |#g ff|d< |t!j"v rt!||t#$|||!< qw t%y   Y nw dd |& D }$t|D ]\}%}&|%d> }'|&j'|$v s|&j'|v r|'||&j'< |'|&_'qg }(|& D ],})||)j( }*||)j) }+|*|)j)||+d?  },t+||*d?  |,}-|,j,|- |(|- q|
D ]!}.|||.j( d?  |._(|||.j) d?  |._)|||.j- d?  |._-qd}/g }0|/rd
}/|(D ]}-|-j(}1|-j.}2|2d@ |1_.|2dL }2d}3|1j'd? }%|2r|%rQ||%d  j/tu rQ|%d8 }%|2d@ ||% _.n8t|%d> t|2d@ }4|0|%|4 |3d7 }3|1j,r|1j,D ]}5|5j)|1urxt1d|4|5_)ql|4j,|1j, |1j,  |2dL }2|2s8|3r|0|4|3f t||%d d  |%d D ]
\}6}&|6d> |&_'qd}/q|/st2 }7|D ]}&|7|&j/ |7|&j. qt| jD ]\}}8t3|8t4rt5|8|||\||< }9|	6|9 q| j7t8|7t || j9d t:| |dd |0D t;|
d|	fS )Nc                 S   s&   h | ]}|j |j|jfD ]}|qqS r   )r   r!   ry   ).0err   r   r   r   	<setcomp>  s   & z'instrument_all_lines.<locals>.<setcomp>r   r&   z<module>Tr   ) bigF)signed.r   c                 S   s"   h | ]}|j |jfD ]}|q
qS r   r4   )r   jrr   r   r   r   r   t  s   " r7   r8   zInvalid target   c                 S   s   g | ]	\}}|j |fqS r   )r0   )r   instrsr   r   r   
<listcomp>  s    z(instrument_all_lines.<locals>.<listcomp>)co_code	co_constsco_stacksizer]   r}   )<listr   lenrP   r   r   dictr   findlinestartsr9   rb   r   r   co_nameEMPTY_BYTECODEr^   	enumeraterC   
SKIP_LINESr   r`   addr.   r;   r   
from_bytesclearr   co_namesjoinsplitr   tupler$   r,   r   r   rg   valuesr0   r   r!   getr3   r1   ry   r   r   r:   rK   rJ   
isinstancer   instrument_all_linesupdatereplacerL   r   rw   r   ):rS   r   r   r   	trap_functrap_argr<   
new_constsr   
seen_linesr   exc_table_offsets
offset_mapjumpstrapsline_mapline_startsresume_offseticurrent_argprevious_arg_previous_previous_argcurrent_import_namecurrent_import_package	code_iterextrn   r   linetrap_instructionspackage_deprr   r   r0   import_depthimport_from_namejump_targetsindexr   
new_offsetbranchesjump	new_startnew_endtarget_instrbranchr   process_branchesexts
jump_instrnew_argc	ext_instrry   instr_indexnew_codenested_codenested_linesr   r   r   r      s$  


 
 




*


	

,J








".
r   )F):abcr   dataclassesr   r   enumr   systypesr   typingre   #ddtrace.internal.bytecode_injectionr   /ddtrace.internal.test_visibility.coverage_linesr   version_infor   r   r   r$   r.   r3   r;   r9   r   r=   IteratorrF   boolrL   rN   IterablerR   ra   r   r   rw   rx   r   r   opmapr   r   r   r   r   r   r   r   r   r   r   r   	frozensetr   strr   r   r   r   r   <module>   sR    	


	
.>









*