
    shuD                         S r SSKrSSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJr  \S 5       r " S	 S
\R                   S9r " S S\5      rSr " S S\5      rg)z-
Implements helpers to build LLVM debuginfo.
    N)contextmanager)ir)cgutilstypes)ComplexModelUniTupleModel)configc              #   ^   #    U R                   nSU l          Sv   Xl         g! Xl         f = f7f)zVSuspends the emission of debug_metadata for the duration of the context
managed block.N)debug_metadata)builderrefs     h/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/core/debuginfo.pysuspend_emissionr      s.      
 
 C!G%!$s   -" -*-c                       \ rS rSr\R
                   S	S j5       r\R
                  S 5       r\R
                  S 5       r\R
                  S 5       r	\R
                  S 5       r
Srg)
AbstractDIBuilder   Nc	                     g)z*Emit debug info for the variable.
        N 	selfr   allocavaluenamelltypesizeline	datamodelargidxs	            r   mark_variableAbstractDIBuilder.mark_variable   s    
 	    c                     g)zAEmit source location information to the given IRBuilder.
        Nr   r   r   r   s      r   mark_locationAbstractDIBuilder.mark_location$        	r    c                     g)zAEmit source location information for the given function.
        Nr   r   functionqualnameargnamesargtypesr   s         r   mark_subprogram!AbstractDIBuilder.mark_subprogram*   r%   r    c                     g)zfInitialize the debug info. An opportunity for the debuginfo to
prepare any necessary data structures.
Nr   r   s    r   
initializeAbstractDIBuilder.initialize0   s    r    c                     g)zCFinalize the debuginfo by emitting all necessary metadata.
        Nr   r/   s    r   finalizeAbstractDIBuilder.finalize6   r%   r    r   NN)__name__
__module____qualname____firstlineno__abcabstractmethodr   r#   r,   r0   r3   __static_attributes__r   r    r   r   r      s    -1  	 
 	 
 	 
 	 r    r   )	metaclassc                   >    \ rS rSrS r S
S jrS rS rS rS r	S	r
g)DummyDIBuilder=   c                     g Nr   r   modulefilepathcgctxdirectives_onlys        r   __init__DummyDIBuilder.__init__?       r    Nc	                     g rB   r   r   s	            r   r   DummyDIBuilder.mark_variableB   s    r    c                     g rB   r   r"   s      r   r#   DummyDIBuilder.mark_locationF   rJ   r    c                     g rB   r   r'   s         r   r,   DummyDIBuilder.mark_subprogramI   rJ   r    c                     g rB   r   r/   s    r   r0   DummyDIBuilder.initializeL   rJ   r    c                     g rB   r   r/   s    r   r3   DummyDIBuilder.finalizeO   rJ   r    r   r5   )r6   r7   r8   r9   rH   r   r#   r,   r0   r3   r<   r   r    r   r?   r?   =   s%     .2r    r?      c                       \ rS rSrSrSrSrSrS rS r	SS	 jr
 SS
 jrS rS rS rS rS rS r\SS j5       r\S 5       rS rS rS rS rS rSrg)	DIBuilderV         zllvm.dbg.cuFc                     Xl         [        R                  R                  U5      U l        U R                  5       U l        / U l        X0l        U(       a  SU l	        OSU l	        U R                  5         g )NDebugDirectivesOnly	FullDebug)rD   ospathabspathrE   _di_filedifilesubprogramsrF   emission_kindr0   rC   s        r   rH   DIBuilder.__init__\   sR    1mmo
!6D!,Dr    c                 .    U R                  5       U l        g rB   )_di_compile_unitdicompileunitr/   s    r   r0   DIBuilder.initializej   s     "224r    Nc                    U R                   (       a  [        SXU[        USS5      5        U R                  n[        U-  n[
        R                  4n[
        R                  [
        R                  4n[        XU-   5      (       a  Uc!  [        U5      n[        X5      (       a  Sn	OdSn	Oa[        UR                  5      n[        UR                  [        R                  5      (       a!  UR                  R                  (       a  Sn	OSn	OSn	UR                  SUU[
        R                   " U	5      S.5      n
U
$ [        U["        5      (       Ga*  / nS	n[%        S
5       H  u  pUR&                  U   nU R(                  R+                  U5      nUR                  S[        U5      [        U-  [
        R                   " S5      S.5      nUR                  S[
        R                   " S5      UU[        U-  US.5      nUR-                  U5        U[        U-  -  nM     UR                  S[
        R                   " S5      UR                   S[        U5       S3[        U5      UR/                  U5      US.SS9n
U
$ [        U[0        5      (       a  UR2                  nU R(                  R+                  U5      nU R5                  UU5      nUR                   S[        U5       S3nUU-  nUR                  SSU05      nUR                  S[
        R                   " S5      UUU[        U5      UR/                  U/5      S.5      n
U
$ [        U[
        R6                  5      (       a  [        USS 5      nU R5                  UR8                  U R(                  R+                  UR8                  5      U5      nUR                  S[
        R                   " S5      U[        U R(                  R+                  U5      -  S.5      n
U
$ [        U[
        R:                  5      (       Ga  / nS	nUb  UR=                  5       (       d  S[        U5       S3n[%        UR&                  5       H  u  nnU R(                  R+                  U5      nU R5                  UU5      nUR                  S[
        R                   " S5      SU S3U[        U-  US.5      nUR-                  U5        U[        U-  -  nM     OUR                   S[        U5       S3n[?        UR&                  UR@                  UR=                  5       5       H  u  nnnU R(                  R+                  U5      nU R5                  UUUS9nUR                  S[
        R                   " S5      UU[        U-  US.5      nUR-                  U5        U[        U-  -  nM     UR                  S[
        R                   " S5      U[        U5      UR/                  U5      US.SS9n
U
$ [        U[
        RB                  5      (       a  UR2                  nU R(                  R+                  U5      nU R5                  UU5      nUU-  nUR                  SSU05      nUR                  S[
        R                   " S5      U[        U5      U[        U5      UR/                  U/5      S.5      n
U
$ UnUR                  SSU05      nUR                  SS [        [
        R                   " S!5      S.5      nUR                  S[
        R                   " S5      U[        U5      U[        U5      UR/                  U/5      S.5      n
U
$ )"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 ())ru   r   
identifierelementsr   Tis_distinct
DISubrangecountDW_TAG_array_type)ru   rv   r   r   r{   r|   _pointee_modelDW_TAG_pointer_type)ru   rv   r   zAnonymous struct (z<field >r   byteDW_ATE_unsigned_char)"_DEBUGprintgetattrrD   
_BYTE_SIZEr   IntType	FloatType
DoubleType
isinstancestrrk   r   Integersignedadd_debug_infoDITokenr   	enumerater|   rF   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metarw   ix	componentcomponent_sizecomponent_basetypederived_typer   el_sizebasetyper   mdrangemodelfield_idfieldmdbases                              r   r   DIBuilder._var_typeo   s   ;;%y)Y=?KKt#::;LL"--/	 f233 6{f//-E*E 9,,-i//?? ((// / 1*E%%mJJu-6 Fl c 	<00 DF%&67"OOB/	!%!:!:9!E%&%5%5m	N&7 "

> :F &"
  !//::o6  2&7$B   L):67! 8" %%&7zz"9:$,,-RF}A>!&kNN40:   & !F` S 	=11nnGjj//8G~~gw7H''(3v;-q9DGOE&&|6 G %%&7zz"56$!&kNNG95: F@ q //I'7>E~~fnn&*jj&?&?&O&+-H %%ozz"78$"TZZ%>%>v%FF8 Ff ]  4 455DF 	(>(>(@(@+CK=:)26??)C%Hg::44W=D#~~gt<H#$#3#3O!zz/:")(1 5$, *T 1"(F $L KK-zD01F *D $++,Bs6{m1=-01:1B1B1:1G1G1I.K)GUE  ::44W=D#~~gtu~MH#$#3#3O!zz/: %$, *T 1"(F $L KK-zD01F.K %%&7zz"9:!&kNN40:   & !FV I --nnGjj//8G~~gw7HGOE&&|6 G %%&7zz"56$F!&kNNG95: F8 % E&&|6 G %%m"JJ'=>6 F
 %%&7zz"56"F!&kNNG95: F r    c	           
         Uc  SOUn	U R                   n
[        R                  " [        R                  " 5       [        R                  " 5       /S-  5      n[
        R                  " XS5      nU R                  XEUS9nUR                  SS5      nU
R                  SUU	U R                  S   U R                  UUS	.5      nU
R                  S
0 5      nUR                  XX/5      $ )Nr   rZ   zllvm.dbg.declarer   .$DILocalVariable)r   argscopefiler   typeDIExpression)rD   r   FunctionTypeVoidTypeMetaDataTyper   get_or_insert_functionr   replacer   rc   rb   call)r   r   r   r   r   r   r   r   r   	arg_indexr   fntydeclr   
mdlocalvarmdexprs                   r   r   DIBuilder.mark_variable$  s      AV	KKr{{}r/@.AA.EF--a7IJ	B||C%%%&7%%b)KK:
 
 !!."5||D
"CDDr    c                 0    U R                  U5      Ul        g rB   )_add_locationr   r"   s      r   r#   DIBuilder.mark_location:  s    !%!3!3D!9r    c                     Un[        [        X45      5      nU R                  XaR                  XQUS9nUR	                  SU5        g )N)r   linkagenamer   r(   argmapdbg)dictr   _add_subprogramr   set_metadata)	r   r(   r)   r*   r+   r   r   r   di_subps	            r   r,   DIBuilder.mark_subprogram=  sI    c(-.&&Dmm,0.4 ' 6 	eW-r    c                     [         R                  " U R                  U R                  5      nUR	                  U R
                  5        U R                  5         g rB   )r   get_or_insert_named_metadatarD   DBG_CU_NAMEaddrh   _set_module_flags)r   dbgcus     r   r3   DIBuilder.finalizeE  s<    44T[[$BRBRS		$$$% r    c                    U R                   n[        R                  " US5      nU R                  S5      nU R                  bM  UR                  USU R                  U R                  5      /5      nXBR                  ;  a  UR                  U5        UR                  USU R                  U R                  5      /5      nXRR                  ;  a  UR                  U5        gg)z&Set the module flags metadata
        zllvm.module.flags   NzDwarf VersionzDebug Info Version)	rD   r   r   
_const_intDWARF_VERSIONr   operandsr   DEBUG_INFO_VERSION)r   rD   mflagsrequire_warning_behaviordwarf_versiondebuginfo_versions         r   r   DIBuilder._set_module_flagsN  s     55f>QR $(??1#5 )"//( 2 231 M
 OO3

=)"//$ OOD3341
 
 OO3JJ() 4r    c                 b    U R                  XX4U5      nU R                  R                  U5        U$ )z!Emit subprogram metadata
        )_di_subprogramrc   r   )r   r   r   r   r(   r   subps          r   r   DIBuilder._add_subprogramf  s1     ""4dfM%r    c                 (    U R                  U5      nU$ )zEmit location metatdaa
        )_di_location)r   r   locs      r   r   DIBuilder._add_locationm  s     %
r    c                 :    [         R                  " U5      " U5      $ )z0Util to create constant int in metadata
        r   r   )clsnumbitss      r   r   DIBuilder._const_ints  s     zz$$$r    c                 :    [         R                  " S5      " U5      $ )z4Util to create constant boolean in metadata
           r   )r   booleans     r   _const_boolDIBuilder._const_booly  s     zz!}W%%r    c                     U R                   R                  S[        R                  R	                  U R
                  5      [        R                  R                  U R
                  5      S.5      $ )NDIFile)	directoryfilename)rD   r   r^   r_   dirnamerE   basenamer/   s    r   ra   DIBuilder._di_file  sJ    {{))(7((75
  	r    c                     U R                   R                  S[        R                  " S5      U R                  SS[
        R                  S:g  [        R                  " U R                  5      S.SS9$ )NDICompileUnitDW_LANG_C_plus_pluszclang (Numba)r   )languager   producerruntimeVersionisOptimizedemissionKindTr}   )rD   r   r   r   rb   r	   OPTrd   r/   s    r   rg   DIBuilder._di_compile_unit  sc    {{))/

#89KK (!::?JJt'9'9:<
  *  	r    c                    Un/ n[        UR                  5       H  u  pgUR                  R                  S5      (       a  M'  UR                  R	                  SS5      nUR
                  n	U R                  R                  U	5      n
U R                  XS S9nUR                  U5        M     [        UR                  5       5       H  u  nu  pUR	                  SS5      nU R                  R                  U   nU R                  R                  U5      n	U R                  R                  U	5      n
U R                  XUS9nUR                  U5        M     U R                  R                  SSU R                  R                  U5      05      $ )Nzarg.r   r   r   DISubroutineTyper   )r   argsr   
startswithr   r   rF   r   r   r   itemsdata_model_managerget_value_typerD   r   r   )r   r   r(   r   llfuncmdidxllargr   r   r   r   nbtyper   s                 r   _di_subroutine_typeDIBuilder._di_subroutine_type  sD   #FKK0JC::((00zz))#s3zz008E		&! 1 $-V\\^#<C$<<S)D

55f=IZZ..v6F::,,V4D^^FI^FFIIf $= {{))*<T[[--b1?
  	r    c                     U R                   R                  SUUU R                  U R                  UU R                  X4U5      SSU[        R
                  S:g  U R                  S.SS9$ )NDISubprogramFTr   )r   linkageNamer   r   r   r   isLocalisDefinition	scopeLiner
  unitr}   )rD   r   rb   r  r	   r  rh   )r   r   r   r   r(   r   s         r   r   DIBuilder._di_subprogram  sn    {{)).&[[KK,,TVD !::?&&;
  *  	r    c                 \    U R                   R                  SUSU R                  S   S.5      $ )N
DILocationr   r   )r   columnr   )rD   r   rc   )r   r   s     r   r   DIBuilder._di_location  s4    {{)),%%b)9
  	r    )rF   rh   rb   rd   rE   rD   rc   rB   r5   )    )r6   r7   r8   r9   r   r   r   r   rH   r0   r   r   r#   r,   r3   r   r   r   classmethodr   r   ra   rg   r  r   r   r<   r   r    r   rW   rW   V   s    MKF5
sl .2E,:.!*0 % %
 & &$2r    rW   )__doc__r:   os.pathr^   
contextlibr   llvmliter   
numba.corer   r   numba.core.datamodel.modelsr   r   r	   r   ABCMetar   r?   r   rW   r   r    r   <module>r1     si   
   %  % C  % %#++ B& , 
r! rr    