
    daff                     .   d Z ddlZddlZddlZddlZddlZddlZddlZddlZ	 ddl	Z	ddlmZmZmZmZ ddlmZ ddlmZ ddlmZmZ ed   Zd Zd	 Zd
 Z G d dej4                        Zd Z G d dej4                        Z G d dej4                        Zd Zd Z d Z!d Z"d Z# e$       fdZ%d Z&d Z'd Z( G d dej4                        Z) ed      re	e	jT                  Z+ e	jX                  de	jZ                        Z.e+j^                  Z0e.fe0_1        e	jd                  e0_3        e+jh                  Z5e	jl                  e	jd                  e	jZ                  fe5_1        e	jn                  e5_3        e+jp                  Z9e	jl                  e	jd                   e	jt                  e	jZ                        fe9_1        e	jn                  e9_3        da;d Z< e.e<      Z= e0e=      Z> G d  d!ej4                        Z?d" Z@eAd#k(  r ej                          yy# e
$ r dZ	Y w xY w)$a  This module includes tests of the code object representation.

>>> def f(x):
...     def g(y):
...         return x + y
...     return g
...

>>> dump(f.__code__)
name: f
argcount: 1
posonlyargcount: 0
kwonlyargcount: 0
names: ()
varnames: ('x', 'g')
cellvars: ('x',)
freevars: ()
nlocals: 2
flags: 3
consts: ('None', '<code object g>')

>>> dump(f(4).__code__)
name: g
argcount: 1
posonlyargcount: 0
kwonlyargcount: 0
names: ()
varnames: ('y',)
cellvars: ()
freevars: ('x',)
nlocals: 1
flags: 19
consts: ('None',)

>>> def h(x, y):
...     a = x + y
...     b = x - y
...     c = a * b
...     return c
...

>>> dump(h.__code__)
name: h
argcount: 2
posonlyargcount: 0
kwonlyargcount: 0
names: ()
varnames: ('x', 'y', 'a', 'b', 'c')
cellvars: ()
freevars: ()
nlocals: 5
flags: 3
consts: ('None',)

>>> def attrs(obj):
...     print(obj.attr1)
...     print(obj.attr2)
...     print(obj.attr3)

>>> dump(attrs.__code__)
name: attrs
argcount: 1
posonlyargcount: 0
kwonlyargcount: 0
names: ('print', 'attr1', 'attr2', 'attr3')
varnames: ('obj',)
cellvars: ()
freevars: ()
nlocals: 1
flags: 3
consts: ('None',)

>>> def optimize_away():
...     'doc string'
...     'not a docstring'
...     53
...     0x53

>>> dump(optimize_away.__code__)
name: optimize_away
argcount: 0
posonlyargcount: 0
kwonlyargcount: 0
names: ()
varnames: ()
cellvars: ()
freevars: ()
nlocals: 0
flags: 3
consts: ("'doc string'", 'None')

>>> def keywordonly_args(a,b,*,k1):
...     return a,b,k1
...

>>> dump(keywordonly_args.__code__)
name: keywordonly_args
argcount: 2
posonlyargcount: 0
kwonlyargcount: 1
names: ()
varnames: ('a', 'b', 'k1')
cellvars: ()
freevars: ()
nlocals: 3
flags: 3
consts: ('None',)

>>> def posonly_args(a,b,/,c):
...     return a,b,c
...

>>> dump(posonly_args.__code__)
name: posonly_args
argcount: 3
posonlyargcount: 2
kwonlyargcount: 0
names: ()
varnames: ('a', 'b', 'c')
cellvars: ()
freevars: ()
nlocals: 3
flags: 3
consts: ('None',)

    N)cpython_onlycheck_impl_detailrequires_debug_ranges
gc_collect)assert_python_ok)threading_helper)opmapopnameCOPY_FREE_VARSc              #   ~   K   | D ]4  }t        |      }|j                  d      rd|j                  z   1| 6 yw)z.Yield a doctest-safe sequence of object reprs.z<code objectz<code object %s>N)repr
startswithco_name)teltrs      )/root/Python-3.12.4/Lib/test/test_code.pyconstsr      s>      I<<'$s{{22Gs   ;=c           
          dD ]  }t        |dt        | d|z                ! t        dt        t        | j                                     y)z1Print out a text representation of a code object.)
nameargcountposonlyargcountkwonlyargcountnamesvarnamescellvarsfreevarsnlocalsflagsz: co_zconsts:N)printgetattrtupler   	co_consts)coattrs     r   dumpr'      sG    = < 	$EDL 9:;< 
)U6",,/01    c                 :    dt               j                  |       S )NzForeign getitem: )super__getitem__)selfis     r   external_getitemr.      s    uw2215677r(   c                       e Zd Zed        Zed        Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Z e       d        Zd Zd Z e       d        Zd Zd Zd Zd Zed        Zy)CodeTestc                 D   dd l }|j                  ddd      }| j                  |j                  d       | j                  |j                  d       | j                  |j
                  d       | j                  t              5  t        |       d d d        y # 1 sw Y   y xY w)Nr   filenamefuncname   )		_testcapicode_newemptyassertEqualco_filenamer   co_firstlinenoassertRaises	Exceptionexec)r,   r5   r%   s      r   test_newemptyzCodeTest.test_newempty   s    $$ZR@4Z0**B/y) 	H	 	 	s   BBc                    ddl m d d fd} G d dt              } ||dt               |j                  }|j
                  d   j                  }| j                  ||        |g d	      }| j                  |d   d
       y )Nr   )FunctionTypec                 "      fdj                   S )Nc                       S N 	__class__s   r   <lambda>zICodeTest.test_closure_injection.<locals>.create_closure.<locals>.<lambda>   s    I r(   )__closure__rD   s   `r   create_closurez7CodeTest.test_closure_injection.<locals>.create_closure   s    %222r(   c                 z    | j                  | j                  dz   t        t        dg      | j                  z         S )z9A new code object with a __class__ cell added to freevarsrD      )co_freevarsco_code)replacerK   bytesr   rL   )cs    r   new_codez1CodeTest.test_closure_injection.<locals>.new_code   s7    99)GQVXfhiWjQklmluluQu9vvr(   c                      |j                         }|j                  rJ  |       }|j                  }t        | | |t	               |||             y rB   )__code__rG   __defaults__setattrglobals)	clsr   fcodeclosuredefaultsr?   rH   rP   s	         r   add_foreign_methodz;CodeTest.test_closure_injection.<locals>.add_foreign_method   sL    AJJ'D}}$$$S)G~~HC|D')T8WUVr(   c                       e Zd Zy)-CodeTest.test_closure_injection.<locals>.ListN)__name__
__module____qualname__rC   r(   r   Listr]      s    r(   ra   r+   )rJ         zForeign getitem: 1)	typesr?   listr.   r+   rG   cell_contentsassertIsr7   )	r,   r[   ra   function	class_refobjr?   rH   rP   s	         @@@r   test_closure_injectionzCodeTest.test_closure_injection   s     	'	3	w	W	4 	 	40@A ##((+99	i& 9oQ!56r(   c                    d }|j                   }t        |      } ||j                  |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                         y )Nc                       y rB   rC   rC   r(   r   funcz'CodeTest.test_constructor.<locals>.func   s    Dr(   )rR   typeco_argcountco_posonlyargcountco_kwonlyargcount
co_nlocalsco_stacksizeco_flagsrL   r$   co_namesco_varnamesr8   r   co_qualnamer9   co_linetableco_exceptiontablerK   co_cellvars)r,   rn   r%   CodeTypes       r   test_constructorzCodeTest.test_constructor   s    ]]8 	--,,



)),,#	(r(   c                     | j                  t        j                  j                  j                  t        j                  j
                         y rB   )r7   r0   test_qualnamerR   rx   r`   r,   s    r   r   zCodeTest.test_qualname   s4    ""++77""//	
r(   c                    d }|j                   }d }|j                   }dddddd|j                  t        j                  z  fd	d
|j                  fd|j
                  fddddddd|j                  ffD ]Q  \  }}| j                  ||      5   |j                  di ||i}| j                  t        ||      |       d d d        S |j                  |j                  |j                        }| j                  |j                  |j                         | j                  |j                  |j                         y # 1 sw Y   xY w)Nc                  
    d} | S NrJ   rC   xs    r   rn   z#CodeTest.test_replace.<locals>.func       AHr(   c                      d} d}| S )Nrb   rc   rC   )yzs     r   func2z$CodeTest.test_replace.<locals>.func2   s    AAHr(   )rp   r   )rq   r   )rr   r   )rs   rJ   )rt   r   ru   )r9   d   rL   r$   )rv   )myname)rw   )spam)rK   )freevar)r{   )cellvar)r8   newfilename)r   newnamery   )r&   value)rw   rs   rC   )rR   ru   inspectCO_COROUTINErL   r$   ry   subTestrM   r7   r"   rw   rs   )r,   rn   rX   r   code2r&   r   rP   s           r   test_replacezCodeTest.test_replace   sY   	 }}	  %$)=)==>#&%//*%&))*"U//0!
 	AKD%$ 4u5 A'4<<84-8  4!8%@A A%	A, <<E,=,=+0+;+;   =--u/@/@A,,e.>.>?A As   1D::E	c                    d }|j                   }|j                  dkD  sJ t        |      }dD ]  }| j                  t              5   ||j
                  |j                  |j                  |j                  |z   |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  |j*                         d d d         | j                  t              5  |j-                  |j                  dz
         d d d        | j                  t              5  |j-                  |j                  dz          d d d        y # 1 sw Y   xxY w# 1 sw Y   TxY w# 1 sw Y   y xY w)Nc                  
    d} | S r   rC   r   s    r   rn   z,CodeTest.test_nlocals_mismatch.<locals>.func"  r   r(   r   )rJ   rJ   )rs   )rR   rs   ro   r:   
ValueErrorrp   rq   rr   rt   ru   rL   r$   rv   rw   r8   r   rx   r9   ry   rz   rK   r{   rM   )r,   rn   r%   r|   diffs        r   test_nlocals_mismatchzCodeTest.test_nlocals_mismatch!  ss   	 ]]}}q    8 	D"":. ..---**--% 	. z* 	5JJ"--!"3J4	5z* 	5JJ"--!"3J4	5 	51 ,	5 	5	5 	5s%   CF6 F)3 F5F&	)F25F>c                 j    d }|j                   }|j                  d      }| j                  ||       y )Nc                       fdS )Nc                       S rB   rC   args   r   rF   zBCodeTest.test_shrinking_localsplus.<locals>.func.<locals>.<lambda>J  s    3 r(   rC   r   s   `r   rn   z0CodeTest.test_shrinking_localsplus.<locals>.funcI  s	    r(   rn   )r   )rR   rM   r7   )r,   rn   rX   newcodes       r   test_shrinking_localsplusz"CodeTest.test_shrinking_localsplusF  s0    	}},,v,.w'r(   c                     d }|j                   j                  d      x}}| j                  t        |j	                               g        y )Nc                       y rB   rC   rC   r(   r   rn   z+CodeTest.test_empty_linetable.<locals>.funcP      r(   r(   ry   )rR   rM   r7   re   co_lines)r,   rn   rP   rX   s       r   test_empty_linetablezCodeTest.test_empty_linetableO  sA    	--//S/AA4h//12B7r(   c                     d }| j                  t              5  |j                  j                   d d d        y # 1 sw Y   y xY w)Nc                       y rB   rC   rC   r(   r   rn   z3CodeTest.test_co_lnotab_is_deprecated.<locals>.funcV  r   r(   )assertWarnsDeprecationWarningrR   	co_lnotab)r,   rn   s     r   test_co_lnotab_is_deprecatedz%CodeTest.test_co_lnotab_is_deprecatedU  s:    	 01 	$MM##	$ 	$ 	$s	   9Ac                    d }| j                  t        d   d       |j                  j                  d|j                  j                  dd  z         |_        d}| j                  t        |      5   |        d d d        y # 1 sw Y   y xY w)Nc                       y rB   rC   rC   r(   r   fooz+CodeTest.test_invalid_bytecode.<locals>.foo]  r   r(      z<229>   rJ   rL   zunknown opcode 229)r7   r
   rR   rM   rL   assertRaisesRegexSystemError)r,   r   msgs      r   test_invalid_bytecodezCodeTest.test_invalid_bytecode\  s    	 	g. ||++cll221266 , 8 ###K5 	E	 	 	s   0BB
c                    dd l }i }t        t        j                  d      |       |d   }|j                  }|j
                  j                  }g }t         |j                  |d      |j                         d      D ]E  \  }}| j                  |j                  d       g d       t        |      r5|j                  |       G | j                  |D 	cg c]  }	|	j                  |	j                   f c}	g d       y c c}	w )	Nr   zX        try:
            1/0
        except Exception as e:
            exc = e
        excT)show_caches)strict)r   rc      ))PUSH_EXC_INFON)
LOAD_CONSTN)
STORE_NAMEe)DELETE_NAMEr   RERAISErJ   )COPYrc   )
POP_EXCEPTNr   )disr<   textwrapdedent__traceback__tb_framef_codezipget_instructionsco_positionsassertIncountanyappendr7   r
   argval)
r,   r   	namespacer   	tracebackrX   artificial_instructionsinstr	positionsinstructions
             r   )test_co_positions_artificial_instructionsz2CodeTest.test_co_positions_artificial_instructionsk  s    	X__  
 	 %%	!!(("$ # C  48!
 	6E9 MM)//$/;y>'..u5	6  	 $; ##[%7%78		
s   C>c                 J    t        j                  d      }t        ddd|       y )N#  
            def f():
                pass

            positions = f.__code__.co_positions()
            for line, end_line, column, end_column in positions:
                assert line == end_line
                assert column is None
                assert end_column is None
            z-Xno_debug_ranges-cr   r   r   r,   rX   s     r   6test_endline_and_columntable_none_when_no_debug_rangesz?CodeTest.test_endline_and_columntable_none_when_no_debug_ranges  s(      	  	 	0$=r(   c                 J    t        j                  d      }t        d|d       y )Nr   r   1)PYTHONNODEBUGRANGESr   r   s     r   :test_endline_and_columntable_none_when_no_debug_ranges_envzCCodeTest.test_endline_and_columntable_none_when_no_debug_ranges_env  s#     	  	 	t=r(   c                     d }|j                   j                  d      }|j                         }|D ]7  \  }}}}| j                  |       | j	                  ||j
                  dz          9 y )Nc                      d} y r   rC   r   s    r   rn   z8CodeTest.test_co_positions_empty_linetable.<locals>.func  s    Ar(   r(   r   rJ   )rR   rM   r   assertIsNoner7   r9   )r,   rn   rP   r   lineend_linecolumn
end_columns           r   !test_co_positions_empty_linetablez*CodeTest.test_co_positions_empty_linetable  so    	==((c(:))+	2; 	D.D(FJd#Xx'>'>'BC	Dr(   c                 f   d }|j                   }|j                  d      }|j                  d      }|j                  d      }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  ||       y )Nc                      	 t                t                t                y #  t                Y xY w# t                w xY wrB   )arO   bdrC   r(   r   rW   z&CodeTest.test_code_equality.<locals>.f  s,      s   
! 
2 /2 >r(   r   )rz   )rR   rM   assertNotEqual)r,   rW   code_acode_bcode_ccode_ds         r   test_code_equalityzCodeTest.test_code_equality  s    	 S1#6#6FF+FF+FF+FF+FF+FF+r(   c                 4   d j                   }d j                   }| j                  ||       | j                  t        |      t        |             |j                  d      }| j                  ||       | j                  t        |      t        |             y )Nc                       yr   rC   rC   r(   r   rF   z:CodeTest.test_code_hash_uses_firstlineno.<locals>.<lambda>      r(   c                       yr   rC   rC   r(   r   rF   z:CodeTest.test_code_hash_uses_firstlineno.<locals>.<lambda>  r   r(      )r9   )rR   r   hashrM   )r,   c1c2c3s       r   test_code_hash_uses_firstlinenoz(CodeTest.test_code_hash_uses_firstlineno  sx    !!!!B#DHd2h/ZZrZ*B#DHd2h/r(   c                 `   ddddj                   }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       |j                  dd      }| j                  ||       | j                  t        |      t        |             y )NrJ   )r   wc                     yr   rC   )r   r   r   r  s       r   rF   z4CodeTest.test_code_hash_uses_order.<locals>.<lambda>  r   r(   rb   r   )rq   rr   )rR   r7   rp   rq   rr   rM   r   r  )r,   rO   swappeds      r   test_code_hash_uses_orderz"CodeTest.test_code_hash_uses_order  s     A(22*--q1,,a0))qA)FAw'DGT']3r(   c                     d j                   }d j                   }|j                  |j                        }| j                  ||       | j                  t	        |      t	        |             y )Nc                     | |z   S rB   rC   r   r   s     r   rF   z7CodeTest.test_code_hash_uses_bytecode.<locals>.<lambda>  
    !a% r(   c                     | |z  S rB   rC   r  s     r   rF   z7CodeTest.test_code_hash_uses_bytecode.<locals>.<lambda>  r  r(   r   )rR   rM   rL   r   r  )r,   rO   r   r  s       r   test_code_hash_uses_bytecodez%CodeTest.test_code_hash_uses_bytecode  sT    ))))YYqyyY)Ar"DGT"X.r(   c                    t        ddd      }t        ddd      }dt        j                         _        t        j                  d        t        |dg i       t        |dg i       | j                  ||       t        j                  d       y)	a   GH-109052

        Make sure the instrumentation doesn't affect the code equality
        The validity of this test relies on the fact that "x is x" and
        "x in x" have only one different instruction and the instructions
        have the same argument.

        zx is xz
example.pyevalzx in xTc                       y rB   rC   )argss    r   rF   z?CodeTest.test_code_equal_with_instrumentation.<locals>.<lambda>  r   r(   r   N)compilesys	_getframef_trace_opcodessettracer<   r   )r,   code1r   s      r   $test_code_equal_with_instrumentationz-CodeTest.test_code_equal_with_instrumentation  ss     ,7,7*.''(US"IUS"IE5)Tr(   N)r^   r_   r`   r   r=   rk   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  rC   r(   r   r0   r0      s      7 7@(2
&@P#5J(8$ /
 /
b>>  D D,*04/  r(   r0   c                 B    | t        j                  d| z   dz   dd       u S )N_rJ   r   )r  intern)ss    r   
isinternedr   	  s%    

C!GcM1R0111r(   c                   n    e Zd Zd Zd Zd Zed        Zed        Zed        Z	ed        Z
ed        Zy	)
CodeConstsTestc                 j    |D ]  }||k(  s	|c S  | j                  ||       | j                  d       y )NzShould never be reached)r   fail)r,   r   r   vs       r   
find_constzCodeConstsTest.find_const  s:     	AEz	 	eV$		+,r(   c                 F    t        |      s| j                  d|d       y y )NString z is not internedr   r$  r,   r  s     r   assertIsInternedzCodeConstsTest.assertIsInterned  s    !}IIQ89 r(   c                 F    t        |      r| j                  d|d       y y )Nr(  z is internedr)  r*  s     r   assertIsNotInternedz"CodeConstsTest.assertIsNotInterned  s    a=II45 r(   c                 x    t        ddd      }| j                  |j                  d      }| j                  |       y )Nzres = "str_value"?r<   	str_valuer  r&  r$   r+  r,   r%   r%  s      r   test_interned_stringz#CodeConstsTest.test_interned_string  s3    (#v6OOBLL+6a r(   c                 ~    t        ddd      }| j                  |j                  d      }| j                  |d          y )Nzres = ("str_value",)r/  r<   r0  r   r1  r2  s      r   test_interned_string_in_tuplez,CodeConstsTest.test_interned_string_in_tuple#  s7    +S&9OOBLL.9ad#r(   c                     t        ddd      }| j                  |j                  t        d            }| j	                  t        |      d          y )Nzres = a in {"str_value"}r/  r<   r5  r   )r  r&  r$   	frozensetr+  r#   r2  s      r   !test_interned_string_in_frozensetz0CodeConstsTest.test_interned_string_in_frozenset)  s@    /f=OOBLL)N*CDeAhqk*r(   c                 8    dd}| j                   |              y )Nc                     | S rB   rC   )r   s    r   rW   z6CodeConstsTest.test_interned_string_default.<locals>.f1  s    Hr(   r5  )r+  r,   rW   s     r   test_interned_string_defaultz+CodeConstsTest.test_interned_string_default/  s    	ac"r(   c                 x    t        ddd      }| j                  |j                  d      }| j                  |       y )Nzres = "str\0value!"r/  r<   z
str value!)r  r&  r$   r-  r2  s      r   test_interned_string_with_nullz-CodeConstsTest.test_interned_string_with_null5  s3    +S&9OOBLL-8  #r(   N)r^   r_   r`   r&  r+  r-  r   r3  r6  r9  r=  r?  rC   r(   r   r"  r"    su    -:6 ! !
 $ $
 + +
 # #
 $ $r(   r"  c                       e Zd Zd Zy)CodeWeakRefTestc                 `    i }t        dt               |       |d   }~d _         fd}t        j                  |j
                  |      } j                  t         |                    ~t                 j                  t         |                     j                   j                         y )Nzdef f(): passrW   Fc                     d_         y )NT)called)rX   r,   s    r   callbackz,CodeWeakRefTest.test_basic.<locals>.callbackG  s
    DKr(   )
r<   rU   rD  weakrefrefrR   
assertTrueboolr   assertFalse)r,   r   rW   rE  coderefs   `    r   
test_basiczCodeWeakRefTest.test_basic>  s     	_gi3cN	 ++ajj(3WY(gi)$r(   N)r^   r_   r`   rL  rC   r(   r   rA  rA  <  s    %r(   rA  c                     t        |       S rB   )next)its    r   readrP  V  s    8Or(   c                 v    t        |       }|dz  }d}|dz  r!t        |       }|dz  }||dz  |z  z  }|dz  r!|S )N?   r   @      )rP  )rO  r   valshifts       r   read_varintrW  Y  sT    RA
b&CE
b&H
" b& Jr(   c                 8    t        |       }|dz  r|dz	   S |dz	  S r   )rW  )rO  uvals     r   read_signed_varintrZ  c  s(    r?Dax|qyr(   c              #     K   | j                   }t        | j                        }	 	 t        |      }|dz	  dz  } |dz  dz   }| dk(  r| |d d d d f n| dk(  rYt        |      }||z  }|t        |      z   }t        |      }|dk(  rd }n|dz  }t        |      }|dk(  rd }n|dz  }| |||||f n| dk(  rt        |      }||z  }| |||d d f ne| dv r+| d	z
  }||z  }t        |      }	t        |      }
| ||||	|
f n6d| cxk  rd	k  sJ  J t        |      }| dz  |d
z	  z  }	| ||||	|	|dz  z   f # t        $ r Y y w xY ww)Nrc   r4      rJ      r      )
         r_  r   )r9   iterry   rP  StopIterationrZ  rW  )rX   r   rO  
first_bytelength
line_deltar   colend_colr   r   second_bytes               r   parse_location_tablerj  j  s    D	d	 B
	bJ a2%q.A%2:tT488RZ+B/JJDk"o-Hb/Caxq!"oG!|1xg>>RZ+B/JJDtT488\!JJD"XFbJtVZ@@NN#N#Nr(KQY+"23FtVV{R?O5PQQM   		s(   #ED6 DE6	E?EEEc              #   j   K   t        |       D ]!  \  }}}}}}t        |      D ]
  }||||f  # y wrB   )rj  range)rX   r  re  r   r   rg  rh  s          r   positions_from_location_tablerm    sI     3G3M 1/643v 	1A300	11s   13c              #   2   K   | D ]  }||k7  s	| |} y wrB   rC   )lstprevitems      r   deduprr    s&      4<JDs   	c                 &    t        d | D              S )Nc              3   *   K   | ]  \  }}}}|  y wrB   rC   ).0lr  s      r   	<genexpr>z&lines_from_postions.<locals>.<genexpr>  s     1|1a1s   )rr  )r   s    r   lines_from_postionsrx    s    1y111r(   c                  P    d z   }t         t        z   t        z   } |rt        S t        S )z






    r   )r   r   r   qp)r   r   s     r   
misshappenr|    sK     	
 	
		
  	
	
 	  	
   	r(   c                  6    dj                         } t               )Nz
            )stripr   )!example_report_generation_messages    r   bug93662r    s    eg & ,r(   c                   4    e Zd Zd Zd Zd Zd Zed        Zy)CodeLocationTestc                    t        |j                  j                               }t        t        |j                              }t	        ||      D ]  \  }}| j                  ||        | j                  t        |      t        |             y rB   )re   rR   r   rm  r   r7   len)r,   rn   pos1pos2l1l2s         r   check_positionsz CodeLocationTest.check_positions  sn    DMM..011$--@A$o 	%FBR$	%TCI.r(   c                     | j                  t               | j                  t               | j                  t               y rB   )r  rj  r|  r  r   s    r   test_positionszCodeLocationTest.test_positions  s-    12Z(X&r(   c                    |j                   }|j                         D cg c]  \  }}}|
 }}}| j                  |t        t	        |                   t        t        t        |                  }t        ||      D ]  \  }}| j                  ||        | j                  t        |      t        |             y c c}}w rB   )	rR   r   r7   re   rr  rx  rm  r   r  )	r,   rn   r%   r  r   lines1lines2r  r  s	            r   check_lineszCodeLocationTest.check_lines  s    ]])+7:1a$77eFm!45)*G*KLM&&) 	%FBR$	%Vc&k2 8s   B<c                     | j                  t               | j                  t               | j                  t               y rB   )r  rj  r|  r  r   s    r   
test_lineszCodeLocationTest.test_lines  s-    -.$"r(   c                    d }d}|j                   j                  ddt        t        j                  d   dt        j                  d   dt        j                  d   dg      t        d	|d
z  z  dz  dg            |_         | j                  t        |       | j                  t        |j                   j                               d
dgz         y )Nc                       y rB   rC   rC   r(   r   rW   z/CodeLocationTest.test_code_new_empty.<locals>.f  r   r(   r^  rJ   *   RESUMEr   LOAD_ASSERTION_ERRORRAISE_VARARGS   rc   rb   )rt   r9   rL   ry   )r  r  NN)
rR   rM   rN   r   r	   r:   AssertionErrorr7   re   r   )r,   rW    PY_CODE_LOCATION_INFO_NO_COLUMNSs      r   test_code_new_emptyz$CodeLocationTest.test_code_new_empty  s    
	+-(ZZ''IIh'II45qIIo. 71<> 	 ( 

& 	.!,((*+%&&	
r(   N)	r^   r_   r`   r  r  r  r  r   r  rC   r(   r   r  r    s*    /'
3#
 
 
r(   r  T)cpythonc                     | a y rB   )
LAST_FREED)ptrs    r   myfreer    s    
r(   c                   X    e Zd Zd Zd Zd Zd Zd Z ej                         d        Z
y)CoExtrac                     t        d      S )Nz	lambda:42)r  r   s    r   get_funczCoExtra.get_func#  s     $$r(   c           	          | j                         }| j                  t        t        dt        t        j                  d             | j                  t        t        dt        t        j                  d             y )Nr  r   )r  r:   r   SetExtra
FREE_INDEXctypesc_voidpGetExtrar<  s     r   test_get_non_codezCoExtra.test_get_non_code)  sQ    Ak8R$nnS13k8R$nnS13r(   c           	      (   | j                         }| j                  t        t        |j                  t
        dz   t        j                  d             | j                  t        |j                  t
        dz   t        j                  d            d       y )Nr   r   )
r  r:   r   r  rR   r  r  r  r7   r  r<  s     r   test_bad_indexzCoExtra.test_bad_index1  sh    Ak8QZZ(nfnnS.ACXajj*S.$nnS13457r(   c                     | j                         }t        |j                  t        t	        j
                  d             ~| j                  t        d       y )Nr   )r  r  rR   r  r  r  r7   r  r<  s     r   test_free_calledzCoExtra.test_free_called8  s;     AQZZV^^C-@AZ-r(   c                    | j                         }t        j                         }t        |j                  t
        t        j                  d             t        |j                  t
        t        j                  d             | j                  t        d       t        j                         }t        |j                  t
        |       | j                  |j                  d       ~y )N   i,  )
r  r  r  r  rR   r  r7   r  r  r   )r,   rW   extras      r   test_get_setzCoExtra.test_get_setA  s    ANN$EQZZV^^C-@AQZZV^^C-@AZ-NN$EQZZU3U[[#.r(   c                 2   | j                         } G d dt        j                        }t        |j                  t
        t        j                  d              |||       }~|j                          |j                          | j                  t        d       y )Nc                   $     e Zd Z fdZd Z xZS )6CoExtra.test_free_different_thread.<locals>.ThreadTestc                 >    t         |           || _        || _        y rB   )r*   __init__rW   test)r,   rW   r  rE   s      r   r  z?CoExtra.test_free_different_thread.<locals>.ThreadTest.__init__W  s    G$&DF $DIr(   c                 H    | ` | j                  j                  t        d       y )N  )rW   r  r7   r  r   s    r   runz:CoExtra.test_free_different_thread.<locals>.ThreadTest.run[  s    II))*c:r(   )r^   r_   r`   r  r  __classcell__rD   s   @r   
ThreadTestr  V  s    %;r(   r  r  )r  	threadingThreadr  rR   r  r  r  startjoinr7   r  )r,   rW   r  tts       r   test_free_different_threadz"CoExtra.test_free_different_threadQ  sm     A;Y-- ; QZZV^^C-@AAt$BHHJGGIZ-r(   N)r^   r_   r`   r  r  r  r  r  r   requires_working_threadingr  rC   r(   r   r  r  "  s;    	%	3	7	.	  
5		4	4	6	. 
7	.r(   r  c                 L    |j                  t        j                                |S rB   )addTestdoctestDocTestSuite)loadertestspatterns      r   
load_testsr  g  s    	MM'&&()Lr(   __main__)C__doc__r   r  r  r  unittestr   rF  r   r  ImportErrortest.supportr   r   r   r   test.support.script_helperr   r   opcoder	   r
   r   r   r'   r.   TestCaser0   r   r"  rA  rP  rW  rZ  rj  rm  objectrr  rx  r|  r  r  	pythonapipy	CFUNCTYPEr  freefunc%PyUnstable_Eval_RequestCodeExtraIndexRequestCodeExtraIndexargtypes	c_ssize_trestypePyUnstable_Code_SetExtrar  	py_objectc_intPyUnstable_Code_GetExtrar  POINTERr  r  	FREE_FUNCr  r  r  r^   mainrC   r(   r   <module>r     s#  }~  
      
& & 8 )  '(28Zx   Zz
2-$X&& -$`%h'' %4)RV1
 H 2@;
x(( ;
| T"v'9			BvV^^4HDD&.["$*$4$4!**H))6+;+;V^^LH||H**H))6+;+;'79H||HJ  I&y1JB.(## B.J
 zHMMO C  Fs   H	 	HH