
    J/PhuD                         d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZ ed             Z G d	 d
ej                  Z G d de          ZdZ G d de          ZdS )z-
Implements helpers to build LLVM debuginfo.
    N)contextmanager)ir)cgutilstypes)ComplexModelUniTupleModel)configc              #   V   K   | j         }d| _         	 dV  || _         dS # || _         w xY w)zZSuspends the emission of debug_metadata for the duration of the context
    managed block.N)debug_metadata)builderrefs     T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/core/debuginfo.pysuspend_emissionr      sH       
 C!G%!$$$$$s    	(c                       e Zd Zej        	 dd            Zej        d             Zej        d             Zej        d             Zej        d             Z	dS )AbstractDIBuilderNc	                     dS )z*Emit debug info for the variable.
        N 	selfr   allocavaluenamelltypesizeline	datamodelargidxs	            r   mark_variablezAbstractDIBuilder.mark_variable   s	    
 	    c                     dS )zAEmit source location information to the given IRBuilder.
        Nr   r   r   r   s      r   mark_locationzAbstractDIBuilder.mark_location$   	     	r   c                     dS )zAEmit source location information for the given function.
        Nr   r   functionqualnameargnamesargtypesr   s         r   mark_subprogramz!AbstractDIBuilder.mark_subprogram*   r"   r   c                     dS )zvInitialize the debug info. An opportunity for the debuginfo to
        prepare any necessary data structures.
        Nr   r   s    r   
initializezAbstractDIBuilder.initialize0   s      r   c                     dS )zCFinalize the debuginfo by emitting all necessary metadata.
        Nr   r+   s    r   finalizezAbstractDIBuilder.finalize6   r"   r   NN)
__name__
__module____qualname__abcabstractmethodr   r!   r)   r,   r.   r   r   r   r   r      s        -1    	  
 	  
 	  
 	    r   r   )	metaclassc                   6    e Zd Zd Z	 ddZd Zd Zd Zd ZdS )	DummyDIBuilderc                     d S Nr   r   modulefilepathcgctxdirectives_onlys        r   __init__zDummyDIBuilder.__init__?       r   Nc	                     d S r9   r   r   s	            r   r   zDummyDIBuilder.mark_variableB   s    r   c                     d S r9   r   r    s      r   r!   zDummyDIBuilder.mark_locationF   r@   r   c                     d S r9   r   r$   s         r   r)   zDummyDIBuilder.mark_subprogramI   r@   r   c                     d S r9   r   r+   s    r   r,   zDummyDIBuilder.initializeL   r@   r   c                     d S r9   r   r+   s    r   r.   zDummyDIBuilder.finalizeO   r@   r   r/   )	r0   r1   r2   r?   r   r!   r)   r,   r.   r   r   r   r7   r7   =   sx           .2             r   r7      c                       e Zd ZdZdZdZdZd Zd ZddZ		 dd	Z
d
 Zd Zd Zd Zd Zd Zedd            Zed             Zd Zd Zd Zd Zd ZdS )	DIBuilder      zllvm.dbg.cuFc                     || _         t          j                            |          | _        |                                 | _        g | _        || _        |rd| _	        nd| _	        | 
                                 d S )NDebugDirectivesOnly	FullDebug)r;   ospathabspathr<   _di_filedifilesubprogramsr=   emission_kindr,   r:   s        r   r?   zDIBuilder.__init__\   sm    11mmoo
 	-!6D!,Dr   c                 8    |                                  | _        d S r9   )_di_compile_unitdicompileunitr+   s    r   r,   zDIBuilder.initializej   s     "2244r   Nc                    | j         r"t          d|||t          |dd                     | j        }t          |z  }t
          j        f}t
          j        t
          j        f}t          |||z             r|%t          |          }t          ||          rd}	nJd}	nGt          |j                  }t          |j        t          j                  r|j        j        rd}	nd}	nd}	|                    d||t          j        |	          d          }
nmt          |t"                    rCg }d	}t%          d
          D ]\  }}|j        |         }| j                            |          }|                    dt          |          t          |z  t          j        d          d          }|                    dt          j        d          ||t          |z  |d          }|                    |           |t          |z  z  }|                    dt          j        d          |j         dt          |           dt          |          |                    |          |dd          }
nt          |t0                    r|j        }| j                            |          }|                     ||          }|j         dt          |           d}||z  }|                    dd|i          }|                    dt          j        d          |||t          |          |                    |g          d          }
n?t          |t
          j                  rt          |dd           }|                     |j        | j                            |j                  |          }|                    dt          j        d          |t          | j                            |          z  d          }
nt          |t
          j                  rg }d	}||                                sdt          |           d}t%          |j                  D ]\  }}| j                            |          }|                     ||          }|                    dt          j        d          d| d|t          |z  |d          }|                    |           |t          |z  z  }n|j         dt          |           d}t?          |j        |j         |                                          D ]\  }}}| j                            |          }|                     |||          }|                    dt          j        d          ||t          |z  |d          }|                    |           |t          |z  z  }|                    dt          j        d          |t          |          |                    |          |dd          }
ntt          |t
          j!                  r|j        }| j                            |          }|                     ||          }||z  }|                    dd|i          }|                    dt          j        d          |t          |          |t          |          |                    |g          d          }
n|}|                    dd|i          }|                    dd t          t          j        d!          d          }|                    dt          j        d          |t          |          |t          |          |                    |g          d          }
|
S )"Nz-->fe_typez
NO FE TYPEDW_ATE_unsignedDW_ATE_floatDW_ATE_signedDIBasicType)r   r   encodingr   )realimagDIDerivedTypeDW_TAG_member)tagr   baseTyper   offsetDICompositeTypeDW_TAG_structure_typez ())rc   r   
identifierelementsr   Tis_distinct
DISubrangecountDW_TAG_array_type)rc   rd   r   r   ri   rj   _pointee_modelDW_TAG_pointer_type)rc   rd   r   zAnonymous struct (z<field >r   byteDW_ATE_unsigned_char)"_DEBUGprintgetattrr;   
_BYTE_SIZEr   IntType	FloatType
DoubleType
isinstancestrrY   r   Integersignedadd_debug_infoDITokenr   	enumeraterj   r=   get_abi_sizeofappendadd_metadatar   element	_var_typePointerTypepointeeLiteralStructTypeinner_modelszip_fields	ArrayType)r   r   r   r   mbitsizeint_type	real_typer   ditokmdtypemetare   ix	componentcomponent_sizecomponent_basetypederived_typer   el_sizebasetypern   mdrangemodelfield_idfieldmdbases                              r   r   zDIBuilder._var_typeo   s   ; 	?%y)Y==? ? ?Kt#:;L"-/	 fh233 f	 6{{fh// +-EE*EE 9,--i/?? + (/ 2 / 1*E%%mJu--6 6  FF
 	<00 O	 DF%&677 8 8D"OB/	!%!:!:9!E!E%&%5%5m	NN&7 "
> : :F F & &"
  !//:o66  2&7$B B     L))):67%%&7z"9::$,>>F>>>!&kkNN400: :   & ! !FF 	=11 g	nGj//88G~~gw77H'993v;;999DGOE&&|6  G %%&7z"566$!&kkNNG955: :  FF // V	I'7>>E~~fn&*j&?&?&O&O&+- -H %%oz"788$"TZ%>%>v%F%FF8 8  FF
  455 L	DF 	(>(>(@(@ :CKK:::)26?)C)C 2 2%Hg:44W==D#~~gt<<H#$#3#3O!z/:: 5( 5 5 5$, *T 1"(F F $ $L KK---zD01FF2 $+==s6{{===-01:1B1:1G1G1I1I.K .K 2 2)GUE  :44W==D#~~gtu~MMH#$#3#3O!z/:: %$, *T 1"(F F $ $L KK---zD01FF%%&7z"9::!&kkNN400: :   & ! !FF -- "	nGj//88G~~gw77HGOE&&|6  G %%&7z"566$F!&kkNNG955: :  FF E&&|6  G %%m"J'=>>6 6  F
 %%&7z"566"F!&kkNNG955: :  F r   c	           
         |dn|}	| j         }
t          j        t          j                    t          j                    gdz            }t          j        |
|d          }|                     |||          }|                    dd          }|
	                    d||	| j
        d         | j        ||d	          }|
	                    d
i           }|                    ||||g          S )Nr   rJ   zllvm.dbg.declarers   .$DILocalVariable)r   argscopefiler   typeDIExpression)r;   r   FunctionTypeVoidTypeMetaDataTyper   get_or_insert_functionr   replacer   rS   rR   call)r   r   r   r   r   r   r   r   r   	arg_indexr   fntydeclr   
mdlocalvarmdexprs                   r   r   zDIBuilder.mark_variable$  s      AAV	Kr{}}r/@/@.AA.EFF-a7IJJ	BB||C%%%%&7%b)K:
 :
  
 !!."55||D;
F"CDDDr   c                 :    |                      |          |_        d S r9   )_add_locationr   r    s      r   r!   zDIBuilder.mark_location:  s    !%!3!3D!9!9r   c                     |}t          t          ||                    }|                     ||j        |||          }|                    d|           d S )N)r   linkagenamer   r%   argmapdbg)dictr   _add_subprogramr   set_metadata)	r   r%   r&   r'   r(   r   r   r   di_subps	            r   r)   zDIBuilder.mark_subprogram=  sd    c(H--..&&Dhm,08.4 ' 6 6 	eW-----r   c                     t          j        | j        | j                  }|                    | j                   |                                  d S r9   )r   get_or_insert_named_metadatar;   DBG_CU_NAMEaddrW   _set_module_flags)r   dbgcus     r   r.   zDIBuilder.finalizeE  sF    4T[$BRSS		$$%%%     r   c                    | j         }t          j        |d          }|                     d          }| j        N|                    |d|                     | j                  g          }||j        vr|                    |           |                    |d|                     | j                  g          }||j        vr|                    |           dS dS )z&Set the module flags metadata
        zllvm.module.flags   NzDwarf VersionzDebug Info Version)	r;   r   r   
_const_intDWARF_VERSIONr   operandsr   DEBUG_INFO_VERSION)r   r;   mflagsrequire_warning_behaviordwarf_versiondebuginfo_versions         r   r   zDIBuilder._set_module_flagsN  s     5f>QRR $(??1#5#5 )"//( 2331  M
 FO33

=)))"//$ OOD3441
  
 FO33JJ())))) 43r   c                 l    |                      |||||          }| j                            |           |S )z!Emit subprogram metadata
        )_di_subprogramrS   r   )r   r   r   r   r%   r   subps          r   r   zDIBuilder._add_subprogramf  s;     ""4dHfMM%%%r   c                 0    |                      |          }|S )zEmit location metatdaa
        )_di_location)r   r   locs      r   r   zDIBuilder._add_locationm  s     %%
r       c                 <     t          j        |          |          S )z0Util to create constant int in metadata
        r   rz   )clsnumbitss      r   r   zDIBuilder._const_ints  s      rz$$$$r   c                 <     t          j        d          |          S )z4Util to create constant boolean in metadata
           r   )r   booleans     r   _const_boolzDIBuilder._const_booly  s     rz!}}W%%%r   c                     | j                             dt          j                            | j                  t          j                            | j                  d          S )NDIFile)	directoryfilename)r;   r   rN   rO   dirnamer<   basenamer+   s    r   rQ   zDIBuilder._di_file  sP    {))(77((775
 5
   	r   c                     | j                             dt          j        d          | j        ddt
          j        dk    t          j        | j                  dd          S )NDICompileUnitDW_LANG_C_plus_pluszclang (Numba)r   )languager   producerruntimeVersionisOptimizedemissionKindTrk   )r;   r   r   r   rR   r	   OPTrT   r+   s    r   rV   zDIBuilder._di_compile_unit  sf    {))/
#899K (!:?Jt'9::<
 <
  *   	r   c                    |}g }t          |j                  D ]\  }}|j                            d          si|j                            dd          }|j        }	| j                            |	          }
|                     |	|
d           }|	                    |           t          |
                                          D ]\  }\  }}|                    dd          }| j        j        |         }| j                            |          }	| j                            |	          }
|                     |	|
|          }|	                    |           | j                            dd| j                            |          i          S )Nzarg.r   r   rs   DISubroutineTyper   )r   argsr   
startswithr   r   r=   r   r   r   itemsdata_model_managerget_value_typer;   r   r   )r   r   r%   r   llfuncmdidxllargr   r   r   r   nbtyper   s                 r   _di_subroutine_typezDIBuilder._di_subroutine_type  su   #FK00 	" 	"JC:((00 "z))#s33z0088EE		&!!!#,V\\^^#<#< 	 	C$<<S))D
5f=IZ..v66F:,,V44D^^FDI^FFFIIf{))*<T[--b11?
   	r   c                     | j                             d||| j        | j        ||                     |||          dd|t          j        dk    | j        dd          S )NDISubprogramFTr   )r   linkageNamer   r   r   r   isLocalisDefinition	scopeLiner   unitrk   )r;   r   rR   r   r	   r   rW   )r   r   r   r   r%   r   s         r   r   zDIBuilder._di_subprogram  sr    {)).&[K,,T8VDD !:?&;
 ;
  *   	r   c                 V    | j                             d|d| j        d         d          S )N
DILocationr   r   )r   columnr   )r;   r   rS   )r   r   s     r   r   zDIBuilder._di_location  s9    {)),%b)9
 9
   	r   r9   r/   )r   )r0   r1   r2   r   r   r   rv   r?   r,   r   r   r!   r)   r.   r   r   r   classmethodr   r   rQ   rV   r   r   r   r   r   r   rH   rH   V   s]       MKF  5 5 5
s s s sl .2E E E E,: : :. . .! ! !* * *0     % % % [%
 & & [&    $  2      r   rH   )__doc__r3   os.pathrN   
contextlibr   llvmliter   
numba.corer   r   numba.core.datamodel.modelsr   r   r	   r   ABCMetar   r7   ry   rH   r   r   r   <module>r     sG   
 


  % % % % % %       % % % % % % % % C C C C C C C C       % % %    #+    B    &   , 
r r r r r! r r r r rr   