
    xKguD                         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y)z-
Implements helpers to build LLVM debuginfo.
    N)contextmanager)ir)cgutilstypes)ComplexModelUniTupleModel)configc              #   b   K   | j                   }d| _         	 d || _         y# || _         w xY ww)zZSuspends the emission of debug_metadata for the duration of the context
    managed block.N)debug_metadata)builderrefs     X/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/numba/core/debuginfo.pysuspend_emissionr      s3      
 
 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	y)AbstractDIBuilderNc	                      y)z*Emit debug info for the variable.
        N 	selfr   allocavaluenamelltypesizeline	datamodelargidxs	            r   mark_variablezAbstractDIBuilder.mark_variable   s    
 	    c                      y)zAEmit source location information to the given IRBuilder.
        Nr   r   r   r   s      r   mark_locationzAbstractDIBuilder.mark_location$        	r   c                      y)zAEmit source location information for the given function.
        Nr   r   functionqualnameargnamesargtypesr   s         r   mark_subprogramz!AbstractDIBuilder.mark_subprogram*   r"   r   c                      y)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                      y)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                   4    e Zd Zd Z	 ddZd Zd Zd Zd Zy)	DummyDIBuilderc                      y Nr   r   modulefilepathcgctxdirectives_onlys        r   __init__zDummyDIBuilder.__init__?       r   Nc	                      y r9   r   r   s	            r   r   zDummyDIBuilder.mark_variableB   s    r   c                      y r9   r   r    s      r   r!   zDummyDIBuilder.mark_locationF   r@   r   c                      y r9   r   r$   s         r   r)   zDummyDIBuilder.mark_subprogramI   r@   r   c                      y r9   r   r+   s    r   r,   zDummyDIBuilder.initializeL   r@   r   c                      y 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   =   s%     .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y)	DIBuilder      zllvm.dbg.cuFc                     || _         t        j                  j                  |      | _        | j                         | _        g | _        || _        |rd| _	        nd| _	        | j                          y )NDebugDirectivesOnly	FullDebug)r;   ospathabspathr<   _di_filedifilesubprogramsr=   emission_kindr,   r:   s        r   r?   zDIBuilder.__init__\   sV    1mmo
!6D!,Dr   c                 .    | j                         | _        y r9   )_di_compile_unitdicompileunitr+   s    r   r,   zDIBuilder.initializej   s     "22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}	nZd}	nWt        |j                        }t        |j                  t        j                        r|j                  j                  rd}	nd}	nd}	|j                  d||t        j                   |	      d      }
|
S t        |t"              r)g }d	}t%        d
      D ]  \  }}|j&                  |   }| j(                  j+                  |      }|j                  dt        |      t        |z  t        j                   d      d      }|j                  dt        j                   d      ||t        |z  |d      }|j-                  |       |t        |z  z  } |j                  dt        j                   d      |j                   dt        |       dt        |      |j/                  |      |dd      }
|
S t        |t0              r|j2                  }| j(                  j+                  |      }| j5                  ||      }|j                   dt        |       d}||z  }|j                  dd|i      }|j                  dt        j                   d      |||t        |      |j/                  |g      d      }
|
S t        |t
        j6                        rt        |dd       }| j5                  |j8                  | j(                  j+                  |j8                        |      }|j                  dt        j                   d      |t        | j(                  j+                  |      z  d      }
|
S t        |t
        j:                        rg }d	}||j=                         sdt        |       d}t%        |j&                        D ]  \  }}| j(                  j+                  |      }| j5                  ||      }|j                  dt        j                   d      d| d|t        |z  |d      }|j-                  |       |t        |z  z  } n|j                   dt        |       d}t?        |j&                  |j@                  |j=                               D ]  \  }}}| j(                  j+                  |      }| j5                  |||      }|j                  dt        j                   d      ||t        |z  |d      }|j-                  |       |t        |z  z  } |j                  dt        j                   d      |t        |      |j/                  |      |dd      }
|
S t        |t
        jB                        r|j2                  }| j(                  j+                  |      }| j5                  ||      }||z  }|j                  dd|i      }|j                  dt        j                   d      |t        |      |t        |      |j/                  |g      d      }
|
S |}|j                  dd|i      }|j                  dd t        t        j                   d!      d      }|j                  dt        j                   d      |t        |      |t        |      |j/                  |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=?KKt#::;LL"--/	 fh23 6{fh/-E*E 9,,-i//? ((// / 1*E%%mJJu-6 Fl c 	<0 DF%&67D"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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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	           
         |dn|}	| j                   }
t        j                  t        j                         t        j                         gdz        }t        j                  |
|d      }| j                  |||      }|j                  dd      }|
j                  d||	| j                  d   | j                  ||d	      }|
j                  d
i       }|j                  ||||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      AV	KKr{{}r/@.AA.EF--a7IJ	B||C%%%&7%%b)KK:
 
 !!."5||D;
F"CDDr   c                 0    | j                  |      |_        y r9   )_add_locationr   r    s      r   r!   zDIBuilder.mark_location:  s    !%!3!3D!9r   c                     |}t        t        ||            }| j                  ||j                  |||      }|j	                  d|       y )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=  sO    c(H-.&&Dhmm,08.4 ' 6 	eW-r   c                     t        j                  | j                  | j                        }|j	                  | j
                         | j                          y r9   )r   get_or_insert_named_metadatar;   DBG_CU_NAMEaddrW   _set_module_flags)r   dbgcus     r   r.   zDIBuilder.finalizeE  s<    44T[[$BRBRS		$$$% r   c                    | j                   }t        j                  |d      }| j                  d      }| j                  L|j                  |d| j                  | j                        g      }||j                  vr|j                  |       |j                  |d| j                  | j                        g      }||j                  vr|j                  |       yy)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     55f>QR $(??1#5 )"//( 2 231 M
 FOO3

=)"//$ OOD3341
 
 FOO3JJ() 4r   c                 f    | j                  |||||      }| j                  j                  |       |S )z!Emit subprogram metadata
        )_di_subprogramrS   r   )r   r   r   r   r%   r   subps          r   r   zDIBuilder._add_subprogramf  s5     ""4dHfM%r   c                 (    | j                  |      }|S )zEmit location metatdaa
        )_di_location)r   r   locs      r   r   zDIBuilder._add_locationm  s     %
r   c                 8     t        j                  |      |      S )z0Util to create constant int in metadata
        r   rz   )clsnumbitss      r   r   zDIBuilder._const_ints  s      rzz$$$r   c                 8     t        j                  d      |      S )z4Util to create constant boolean in metadata
           r   )r   booleans     r   _const_boolzDIBuilder._const_booly  s     rzz!}W%%r   c                     | j                   j                  dt        j                  j	                  | j
                        t        j                  j                  | j
                        d      S )NDIFile)	directoryfilename)r;   r   rN   rO   dirnamer<   basenamer+   s    r   rQ   zDIBuilder._di_file  sJ    {{))(7((75
  	r   c                     | j                   j                  dt        j                  d      | j                  ddt
        j                  dk7  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  sc    {{))/

#89KK (!::?JJt'9'9:<
  *  	r   c                    |}g }t        |j                        D ]  \  }}|j                  j                  d      r"|j                  j	                  dd      }|j
                  }	| j                  j                  |	      }
| j                  |	|
d       }|j                  |        t        |j                               D ]  \  }\  }}|j	                  dd      }| j                  j                  |   }| j                  j                  |      }	| j                  j                  |	      }
| j                  |	|
|      }|j                  |        | j                  j                  dd| j                  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  sI   #FKK0JC::((0zz))#s3zz008E		&! 1 $-V\\^#<C$<<S)D

55f=IZZ..v6F::,,V4D^^FDI^FFIIf $= {{))*<T[[--b1?
  	r   c                     | j                   j                  d||| j                  | j                  || j                  |||      dd|t        j
                  dk7  | 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  sp    {{)).&[[KK,,T8VD !::?&&;
  *  	r   c                 \    | j                   j                  d|d| j                  d   d      S )N
DILocationr   r   )r   columnr   )r;   r   rS   )r   r   s     r   r   zDIBuilder._di_location  s4    {{)),%%b)9
  	r   r9   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
sl .2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     si   
   %  % C  % %#++ B& , 
r! rr   