Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_code.cpython-311.opt-1.pyc
�

�Ke']���dZddlZddlZddlZddlZddlZddlZddlZddlZ	ddl	Z	n
#e
$rdZ	YnwxYwddlmZm
Z
mZmZddlmZddlmZddlmZedZd�Zd	�Zd
�ZGd�dej��Zd
�ZGd�dej��ZGd�dej��Zd�Zd�Zd�Z d�Z!d�Z"e#��fd�Z$d�Z%d�Z&d�Z'Gd�dej��Z(e
d���r�e	��e	j)Z*e	j+de	j,��Z-e*j.Z/e-fe/_0e	j1e/_2e*j3Z4e	j5e	j1e	j,fe4_0e	j6e4_2e*j7Z8e	j5e	j1e	j9e	j,��fe8_0e	j6e8_2da:d�Z;e-e;��Z<e/e<��Z=Gd �d!ej��Z>d"�Z?e@d#krejA��dSdS)$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�COPY_FREE_VARSc#�~K�|D]7}t|��}|�d��r
d|jzV��3|V��8dS)z.Yield a doctest-safe sequence of object reprs.z<code objectz<code object %s>N)�repr�
startswith�co_name)�t�elt�rs   �8/usr/local/apps/python3/lib/python3.11/test/test_code.py�constsr�s_����������I�I���<�<��'�'�	�$�s�{�2�2�2�2�2��G�G�G�G���c
��dD]'}t|�dt|d|z�������(tdtt|j������dS)z1Print out a text representation of a code object.)
�name�argcount�posonlyargcount�kwonlyargcount�names�varnames�cellvars�freevars�nlocals�flagsz: �co_zconsts:N)�print�getattr�tupler�	co_consts)�co�attrs  r�dumpr'�sh��=�<�<��	�$�$�$���E�D�L� 9� 9� 9�:�;�;�;�;�	�)�U�6�"�,�/�/�0�0�1�1�1�1�1rc�J�dt���|����S)NzForeign getitem: )�super�__getitem__)�self�is  r�external_getitemr-�s"��7�u�w�w�2�2�1�5�5�7�7�7rc��eZdZed���Zed���Zd�Zd�Zd�Zd�Z	d�Z
d�Ze��d	���Z
d
�Zd�Ze��d���Zd
�ZdS)�CodeTestc�b�ddl}|�ddd��}|�|jd��|�|jd��|�|jd��|�t��5t|��ddd��dS#1swxYwYdS)Nr�filename�funcname�)	�	_testcapi�
code_newempty�assertEqual�co_filenamer�co_firstlineno�assertRaises�	Exception�exec)r+r4r%s   r�
test_newemptyzCodeTest.test_newempty�s�������
�
$�
$�Z��R�
@�
@��������4�4�4������Z�0�0�0�����*�B�/�/�/�
�
�
�y�
)�
)�	�	���H�H�H�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s�B$�$B(�+B(c�,����ddlm�d��d�����fd�}Gd�dt��}||dt��|j}|jdj}|�||��|gd	���}|�|dd
��dS)Nr)�FunctionTypec����fd�jS)Nc����S�N���	__class__s�r�<lambda>zICodeTest.test_closure_injection.<locals>.create_closure.<locals>.<lambda>�s���I�r)�__closure__rCs`r�create_closurez7CodeTest.test_closure_injection.<locals>.create_closure�s���%�%�%�%�2�2rc�x�|�|jdzttdg��|jz���S)z9A new code object with a __class__ cell added to freevarsrC�)�co_freevars�co_code)�replacerJ�bytesr
rK)�cs r�new_codez1CodeTest.test_closure_injection.<locals>.new_code�s8���9�9����)G�QV�Xf�hi�Wj�Qk�Qk�lm�lu�Qu�9�v�v�vrc����|j��}�|��}|j}t||�|t��|||����dSrA)�__code__�__defaults__�setattr�globals)	�clsr�f�code�closure�defaultsr>rGrOs	      ���r�add_foreign_methodz;CodeTest.test_closure_injection.<locals>.add_foreign_method�sX����8�A�J�'�'�D�$�n�S�)�)�G��~�H��C��|�|�D�'�)�)�T�8�W�U�U�V�V�V�V�Vrc��eZdZdS)�-CodeTest.test_closure_injection.<locals>.ListN)�__name__�
__module__�__qualname__rBrr�Listr\�s�������Drr`r*)rI��zForeign getitem: 1)	�typesr>�listr-r*rF�
cell_contents�assertIsr6)	r+rZr`�function�	class_ref�objr>rGrOs	      @@@r�test_closure_injectionzCodeTest.test_closure_injection�s�����	'�&�&�&�&�&�	3�	3�	3�	w�	w�	w�	W�	W�	W�	W�	W�	W�	W�	�	�	�	�	�4�	�	�	�	��4��0@�A�A�A��#���(��+�9�	��
�
�i��&�&�&��d�9�9�9�o�o������Q��!5�6�6�6�6�6rc�$�d�}|j}t|��}||j|j|j|j|j|j|j|j	|j
|j|j|j
|j|j|j|j|j|j��dS)Nc��dSrArBrBrr�funcz'CodeTest.test_constructor.<locals>.func�s���r)rQ�type�co_argcount�co_posonlyargcount�co_kwonlyargcount�
co_nlocals�co_stacksize�co_flagsrKr$�co_names�co_varnamesr7r�co_qualnamer8�co_linetable�co_exceptiontablerJ�co_cellvars)r+rmr%�CodeTypes    r�test_constructorzCodeTest.test_constructor�s������
�]����8�8��	�����-��,��
������
����������
����)����,�����#	(�	(�	(�	(�	(rc�x�|�tjjjtjj��dSrA)r6r/�
test_qualnamerQrwr_�r+s rr~zCodeTest.test_qualname�s9������"�+�7��"�/�	
�	
�	
�	
�	
rc�6�d�}|j}d�}|j}dddddd|jtjzfd	d
|jfd|jfdd
ddddd|jffD]g\}}|�||���5|jdi||i��}|�	t||��|��ddd��n#1swxYwY�h|�|j|j���}|�	|j|j��|�	|j|j��dS)Nc�
�d}|S�NrIrB��xs rrmz#CodeTest.test_replace.<locals>.func�����A��Hrc��d}d}|S)NrarbrB)�y�zs  r�func2z$CodeTest.test_replace.<locals>.func2s���A��A��Hr)ror)rpr)rqr)rrrI)rsrrt)r8�drKr$)ru)�myname)rv)�spam)rJ)�freevar)rz)�cellvar)r7�newfilename)r�newnamerx)r&�value)rvrrrB)
rQrt�inspect�CO_COROUTINErKr$rx�subTestrLr6r"rvrr)r+rmrWr��code2r&r�rOs        r�test_replacezCodeTest.test_replace�s���	�	�	��}��	�	�	����
�%�$���
����)=�=�>�#�
��
�&�
�%�/�*�%�&�)�)�*�"�
�U�/�0�!
�	A�	A�K�D�%�$���4�u��5�5�
A�
A�'�4�<�8�8�4��-�8�8��� � ���4�!8�!8�%�@�@�@�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A�
A����
A�
A�
A�
A���<�<�E�,=�+0�+;� �=�=������-�u�/@�A�A�A�����,�e�.>�?�?�?�?�?s�,4B,�,B0	�3B0	c���d�}|j}t|��}dD]�}|�t��5||j|j|j|j|z|j|j	|j
|j|j|j
|j|j|j|j|j|j|j|j��ddd��n#1swxYwY��|�t��5|�|jdz
���ddd��n#1swxYwY|�t��5|�|jdz���ddd��dS#1swxYwYdS)Nc�
�d}|Sr�rBr�s rrmz,CodeTest.test_nlocals_mismatch.<locals>.func"r�r)���rIrI)rr)rQrnr9�
ValueErrorrorprqrrrsrtrKr$rurvr7rrwr8rxryrJrzrL)r+rmr%r{�diffs     r�test_nlocals_mismatchzCodeTest.test_nlocals_mismatch!s/��	�	�	��]����8�8���	�	�D��"�"�:�.�.�
�
������.��-����-��������������������*����-�����%���
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��,�
�
�z�
*�
*�	5�	5��J�J�"�-�!�"3�J�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�
�
�
�z�
*�
*�	5�	5��J�J�"�-�!�"3�J�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s6�A:B>�>C	�C	�$D�D�D�4E � E$�'E$c�r�d�}|j}|�d���}|�||��dS)Nc����fd�S)Nc����SrArB��args�rrEzBCodeTest.test_shrinking_localsplus.<locals>.func.<locals>.<lambda>Js���3�rrBr�s`rrmz0CodeTest.test_shrinking_localsplus.<locals>.funcIs����;�;�;�rrm)r)rQrLr6)r+rmrW�newcodes    r�test_shrinking_localsplusz"CodeTest.test_shrinking_localsplusFsG��	�	�	��}���,�,�v�,�.�.������w�'�'�'�'�'rc��d�}|j�d���x}}|�t|�����g��dS)Nc��dSrArBrBrrrmz+CodeTest.test_empty_linetable.<locals>.funcP����Drr�rx)rQrLr6rd�co_lines)r+rmrOrWs    r�test_empty_linetablezCodeTest.test_empty_linetableOs^��	�	�	��-�/�/�S�/�A�A�A��4�����h�/�/�1�1�2�2�B�7�7�7�7�7rc���ddl}i}ttjd��|��|d}|j}|jj}g}t|j|d���|�	��d���D]T\}}|�
|�d��gd���t|��s|�
|���U|�d�|D��gd	���dS)
NrzX        try:
            1/0
        except Exception as e:
            exc = e
        �excT)�show_caches)�strict)rrb�c�*�g|]}|j|jf��SrB)�opname�argval)�.0�instructions  r�
<listcomp>zFCodeTest.test_co_positions_artificial_instructions.<locals>.<listcomp>ws3��
�
�
���#�[�%7�8�
�
�
r))�
PUSH_EXC_INFON)�
LOAD_CONSTN)�
STORE_NAME�e)�DELETE_NAMEr���RERAISErI)�COPYrb)�
POP_EXCEPTNr�)�disr;�textwrap�dedent�
__traceback__�tb_frame�f_code�zip�get_instructions�co_positions�assertIn�count�any�appendr6)	r+r��	namespacer��	tracebackrW�artificial_instructions�instr�	positionss	         r�)test_co_positions_artificial_instructionsz2CodeTest.test_co_positions_artificial_instructionsUs?���
�
�
��	��X�_��
�
�
�	�	�	������%�	��!�(��"$�� #� �C� ��4�8�8�8�������!
�!
�!
�	6�	6��E�9�
�M�M�)�/�/�$�/�/����;�;�;��y�>�>�
6�'�.�.�u�5�5�5�����
�
�#:�
�
�
�	
�	
�	
�	
�	
�	
�	
�	
rc�R�tjd��}tddd|��dS)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+rWs  r�6test_endline_and_columntable_none_when_no_debug_rangesz?CodeTest.test_endline_and_columntable_none_when_no_debug_ranges�s7����	 �	�	��	��0�$��=�=�=�=�=rc�R�tjd��}td|d���dS)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�s5����	 �	�	��	��t��=�=�=�=�=�=rc���d�}|j�d���}|���}|D]:\}}}}|�|��|�||jdz���;dS)Nc�
�d}dSr�rBr�s rrmz8CodeTest.test_co_positions_empty_linetable.<locals>.func�s���A�A�Arrr�rI)rQrLr��assertIsNoner6r8)r+rmrOr��line�end_line�column�
end_columns        r�!test_co_positions_empty_linetablez*CodeTest.test_co_positions_empty_linetable�s���	�	�	��=�(�(�c�(�:�:���)�)�+�+�	�2;�	D�	D�.�D�(�F�J����d�#�#�#����X�x�'>��'B�C�C�C�C�	D�	Drc��d�}|j}|�d���}|�d���}|�d���}|�||��|�||��|�||��|�||��|�||��|�||��dS)Nc��	t��t��n#t��YnxYwt��dS#t��wxYwrA)�arN�b�drBrrrVz&CodeTest.test_code_equality.<locals>.f�sP��
�����������
������������������������s��A�1�A�Arr�)ry)rQrL�assertNotEqual)r+rV�code_a�code_b�code_c�code_ds      r�test_code_equalityzCodeTest.test_code_equality�s���	�	�	�������S��1�1�����#��6�6�����#��6�6�����F�F�+�+�+����F�F�+�+�+����F�F�+�+�+����F�F�+�+�+����F�F�+�+�+����F�F�+�+�+�+�+rN)r]r^r_rr<rjr|r~r�r�r�r�rr�r�r�r�r�rBrrr/r/�s#����������\���7�7��\�7�@(�(�(�2
�
�
�&@�&@�&@�P#5�#5�#5�J(�(�(�8�8�8�����/
�/
���/
�b
>�
>�
>�>�>�>� ����D�D���D�,�,�,�,�,rr/c�J�|tjd|zdzdd���uS)N�_rIr�)�sys�intern)�ss r�
isinternedr��s(����
�C�!�G�c�M�1�R�4�0�1�1�1�1rc��eZdZd�Zd�Zd�Zed���Zed���Zed���Z	ed���Z
ed���Zd	S)
�CodeConstsTestc�z�|D]}||kr|cS�
|�||��|�d��dS)NzShould never be reached)r��fail)r+rr��vs    r�
find_constzCodeConstsTest.find_const�sU���	�	�A��E�z�z�������
�
�e�V�$�$�$��	�	�+�,�,�,�,�,rc�Z�t|��s|�d|�d���dSdS)N�String z is not interned�r�r��r+r�s  r�assertIsInternedzCodeConstsTest.assertIsInterned�s;���!�}�}�	:��I�I�I�Q�Q�Q�8�9�9�9�9�9�	:�	:rc�Z�t|��r|�d|�d���dSdS)Nr�z is internedr�r�s  r�assertIsNotInternedz"CodeConstsTest.assertIsNotInterned�s;���a�=�=�	6��I�I�I����4�5�5�5�5�5�	6�	6rc��tddd��}|�|jd��}|�|��dS)Nzres = "str_value"�?r;�	str_value��compiler�r$r��r+r%r�s   r�test_interned_stringz#CodeConstsTest.test_interned_string�sC��
�(�#�v�
6�
6���O�O�B�L�+�6�6�����a� � � � � rc��tddd��}|�|jd��}|�|d��dS)Nzres = ("str_value",)rr;�rrrrs   r�test_interned_string_in_tuplez,CodeConstsTest.test_interned_string_in_tuple�sG��
�+�S�&�
9�
9���O�O�B�L�.�9�9�����a��d�#�#�#�#�#rc���tddd��}|�|jtd����}|�t|��d��dS)Nzres = a in {"str_value"}rr;r
r)rr�r$�	frozensetr�r#rs   r�!test_interned_string_in_frozensetz0CodeConstsTest.test_interned_string_in_frozenset�sU��
�/��f�
=�
=���O�O�B�L�)�N�*C�*C�D�D�����e�A�h�h�q�k�*�*�*�*�*rc�H�dd�}|�|����dS)Nrc��|SrArB)r�s rrVz6CodeConstsTest.test_interned_string_default.<locals>.f�s���Hrr
)r��r+rVs  r�test_interned_string_defaultz+CodeConstsTest.test_interned_string_default�s6��	�	�	�	����a�a�c�c�"�"�"�"�"rc��tddd��}|�|jd��}|�|��dS)Nzres = "str\0value!"rr;z
strvalue!)rr�r$rrs   r�test_interned_string_with_nullz-CodeConstsTest.test_interned_string_with_null�sC��
�+�S�&�
9�
9���O�O�B�L�-�8�8��� � ��#�#�#�#�#rN)r]r^r_r�r�rrrrrrrrBrrr�r��s�������-�-�-�:�:�:�6�6�6��!�!��\�!�
�$�$��\�$�
�+�+��\�+�
�#�#��\�#�
�$�$��\�$�$�$rr�c��eZdZd�ZdS)�CodeWeakRefTestc���i}tdt��|��|d}~d�_�fd�}tj|j|��}��t|������~t����	t|���������j��dS)Nz
def f(): passrVFc���d�_dS)NT)�called)rWr+s �r�callbackz,CodeWeakRefTest.test_basic.<locals>.callbacks����D�K�K�Kr)
r;rTr�weakref�refrQ�
assertTrue�boolr�assertFalse)r+r�rVr�coderefs`    r�
test_basiczCodeWeakRefTest.test_basic�s�����	��_�g�i�i��3�3�3��c�N������	�	�	�	�	��+�a�j�(�3�3������W�W�Y�Y���(�(�(�
���������g�g�i�i���)�)�)������$�$�$�$�$rN)r]r^r_r!rBrrrr�s#������%�%�%�%�%rrc� �t|��SrA)�next)�its r�readr%s
����8�8�Orc��t|��}|dz}d}|dzr$t|��}|dz
}||dz|zz}|dz�$|S)N�?r�@�)r%)r$r��val�shifts    r�read_varintr,sb���R���A�
�b�&�C�
�E�
�b�&����H�H��
��
����"�������b�&���Jrc�@�t|��}|dzr|dz	S|dz	Sr�)r,)r$�uvals  r�read_signed_varintr/ s/���r�?�?�D��a�x�����|���q�y�rc#�K�|j}t|j��}		t|��}n#t$rYdSwxYw|dz	dz}|dzdz}|dkr||ddddfV�n�|dkrkt|��}||z
}|t
|��z}t
|��}|dkrd}n|dz}t
|��}|dkrd}n|dz}||||||fV�n�|dkrt|��}||z
}||||ddfV�na|d	vr3|d
z
}||z
}t|��}	t|��}
|||||	|
fV�n*t|��}|dz|dz	z}	|||||	|	|dzzfV���<)NTrbr3�rI�r�
)�
��r4r�)r8�iterrxr%�
StopIterationr/r,)rWr�r$�
first_byte�length�
line_deltar��col�end_colr�r��second_bytes            r�parse_location_tabler?'s������D�	
�d��	 �	 �B�&R�	��b���J�J���	�	�	��F�F�	�����a��2�%���q�.�A�%���2�:�:����t�T�4�8�8�8�8�8�
�R�Z�Z�+�B�/�/�J��J��D��k�"�o�o�-�H��b�/�/�C��a�x�x�����q���!�"�o�o�G��!�|�|�����1������x��g�>�>�>�>�>�
�R�Z�Z�+�B�/�/�J��J��D����t�T�4�8�8�8�8�8�
�\�
!�
!����J��J��D��"�X�X�F��b���J����t�V�Z�@�@�@�@�@��r�(�(�K��Q�Y�+��"2�3�F����t�V�V�{�R�?O�5P�Q�Q�Q�Q�M&Rs�0�
>�>c#�pK�t|��D]#\}}}}}}t|��D]
}||||fV���$dSrA)r?�range)rWr�r:r�r�r<r=s       r�positions_from_location_tablerBRsf����3G��3M�3M�1�1�/��6�4��3���v���	1�	1�A���3��0�0�0�0�0�	1�1�1rc#�,K�|D]}||kr|V�|}�dSrArB)�lst�prev�items   r�deduprGWs7���������4�<�<��J�J�J��D���rc�4�td�|D����S)Nc3�$K�|]\}}}}|V��dSrArB)r��lr�s   r�	<genexpr>z&lines_from_postions.<locals>.<genexpr>^s*����1�1�|��1�a���1�1�1�1�1�1r)rG)r�s r�lines_from_postionsrL]s���1�1�y�1�1�1�1�1�1rc�Z�d|z}ttztz}|rtntS)z






    r�)r�r�r��q�p)r�r�s  r�
misshappenrP`sJ��	
�	
�		
��	
�
�	�
�	��	
��1�1��	rc�F�d���}t���)Nz
            )�stripr�)�!example_report_generation_messages r�bug93662rT�s!��
��e�g�g�&��,�,�rc�<�eZdZd�Zd�Zd�Zd�Zed���ZdS)�CodeLocationTestc�L�t|j�����}tt|j����}t	||��D]\}}|�||���|�t
|��t
|����dSrA)rdrQr�rBr�r6�len)r+rm�pos1�pos2�l1�l2s      r�check_positionsz CodeLocationTest.check_positions�s����D�M�.�.�0�0�1�1���1�$�-�@�@�A�A���$��o�o�	%�	%�F�B�����R��$�$�$�$�����T���C��I�I�.�.�.�.�.rc��|�t��|�t��|�t��dSrA)r]r?rPrTrs r�test_positionszCodeLocationTest.test_positions�sE�����1�2�2�2����Z�(�(�(����X�&�&�&�&�&rc��|j}ttd�|���D������}tt	t|������}t
||��D]\}}|�||���|�t|��t|����dS)Nc3�"K�|]
\}}}|V��dSrArB)r�r�rJs   rrKz/CodeLocationTest.check_lines.<locals>.<genexpr>�s(����=�=�)�1�a��A�=�=�=�=�=�=r)	rQrdrGr�rLrBr�r6rX)r+rmr%�lines1�lines2r[r\s       r�check_lineszCodeLocationTest.check_lines�s���
�]���e�=�=�r�{�{�}�}�=�=�=�=�=�>�>���)�*G��*K�*K�L�L�M�M���&�&�)�)�	%�	%�F�B�����R��$�$�$�$�����V���c�&�k�k�2�2�2�2�2rc��|�t��|�t��|�t��dSrA)rdr?rPrTrs r�
test_lineszCodeLocationTest.test_lines�sE�����-�.�.�.�����$�$�$�����"�"�"�"�"rc��d�}d}|j�dttjddtjddtjddg��td	|d
zzdzdg�����|_|�t|��|�t|j�	����d
d
gz��dS)Nc��dSrArBrBrrrVz/CodeLocationTest.test_code_new_empty.<locals>.f�r�rr3�*�RESUMEr�LOAD_ASSERTION_ERROR�
RAISE_VARARGSrI�rbra)r8rKrx)ririNN)
rQrLrMr�r	r9�AssertionErrorr6rdr�)r+rV� PY_CODE_LOCATION_INFO_NO_COLUMNSs   r�test_code_new_emptyz$CodeLocationTest.test_code_new_empty�s���
	�	�	�+-�(��Z�'�'����I�h�'���I�4�5�q��I�o�.�������7�1�<�>����	���(�
�
��
�$	
���.�!�,�,�,�������(�(�*�*�+�+�
�%�&�&�	
�	
�	
�	
�	
rN)	r]r^r_r]r_rdrfrrprBrrrVrV�sk������/�/�/�'�'�'�
3�3�3�#�#�#�
�
�
��\�
�
�
rrVT)�cpythonc�
�|adSrA)�
LAST_FREED)�ptrs r�myfreeru�s���
�
�
rc�\�eZdZd�Zd�Zd�Zd�Zd�Zej	��d���Z
dS)�CoExtrac� �td��S)Nz	lambda:42)�evalrs r�get_funczCoExtra.get_func�s����$�$�$rc	��|���}|�ttdttjd����|�ttdttjd����dS)Nrir�)rzr9�SystemError�SetExtra�
FREE_INDEX�ctypes�c_voidp�GetExtrars  r�test_get_non_codezCoExtra.test_get_non_code�ss���
�
���A����k�8�R��$�n�S�1�1�
3�
3�
3����k�8�R��$�n�S�1�1�
3�
3�
3�
3�
3rc	�:�|���}|�tt|jt
dzt
jd����|�t|jt
dzt
jd����d��dS)Nr�r)
rzr9r|r}rQr~rr�r6r�rs  r�test_bad_indexzCoExtra.test_bad_index�s����
�
���A����k�8�Q�Z�(��n�f�n�S�.A�.A�
C�
C�
C����X�a�j�*�S�.�$�n�S�1�1�3�3�45�
7�
7�
7�
7�
7rc��|���}t|jtt	jd����~|�td��dS)Nr�)rzr}rQr~rr�r6rsrs  r�test_free_calledzCoExtra.test_free_called�sN���
�
���A��Q�Z��V�^�C�-@�-@�A�A�A�����Z��-�-�-�-�-rc���|���}tj��}t|jt
tjd����t|jt
tjd����|�td��tj��}t|jt
|��|�|j	d��~dS)N��i,)
rzrr�r}rQr~r6rsr�r�)r+rV�extras   r�test_get_setzCoExtra.test_get_set�s����
�
���A��N�$�$�E��Q�Z��V�^�C�-@�-@�A�A�A��Q�Z��V�^�C�-@�-@�A�A�A����Z��-�-�-��N�$�$�E��Q�Z��U�3�3�3����U�[�#�.�.�.���rc�X�|���}Gd�dtj��}t|jt
t
jd����|||��}~|���|�	��|�
td��dS)Nc�$��eZdZ�fd�Zd�Z�xZS)�6CoExtra.test_free_different_thread.<locals>.ThreadTestc�d��t�����||_||_dSrA)r)�__init__rV�test)r+rVr�rDs   �rr�z?CoExtra.test_free_different_thread.<locals>.ThreadTest.__init__s+����G�G�$�$�&�&�&��D�F� $�D�I�I�Irc�J�|`|j�td��dS)N��)rVr�r6rsrs r�runz:CoExtra.test_free_different_thread.<locals>.ThreadTest.runs%�����I�)�)�*�c�:�:�:�:�:r)r]r^r_r�r��
__classcell__rCs@r�
ThreadTestr�sG�������%�%�%�%�%�;�;�;�;�;�;�;rr�r�)rz�	threading�Threadr}rQr~rr��start�joinr6rs)r+rVr��tts    r�test_free_different_threadz"CoExtra.test_free_different_threads����
�
���A�
;�
;�
;�
;�
;�Y�-�
;�
;�
;�
�Q�Z��V�^�C�-@�-@�A�A�A���A�t�$�$�B���H�H�J�J�J��G�G�I�I�I����Z��-�-�-�-�-rN)r]r^r_rzr�r�r�r�r�requires_working_threadingr�rBrrrwrw�s�������	%�	%�	%�	3�	3�	3�	7�	7�	7�	.�	.�	.�	�	�	� 
5�	�	4�	6�	6�	.�	.�
7�	6�	.�	.�	.rrwc�R�|�tj����|SrA)�addTest�doctest�DocTestSuite)�loader�tests�patterns   r�
load_testsr�"s"��	�M�M�'�&�(�(�)�)�)��Lr�__main__)B�__doc__r�r�r�r��unittestr�rr�r�ImportError�test.supportrrrr�test.support.script_helperrr�opcoder	r
rr'r-�TestCaser/r�r�rr%r,r/r?rB�objectrGrLrPrTrV�	pythonapi�py�	CFUNCTYPEr��freefunc�_PyEval_RequestCodeExtraIndex�RequestCodeExtraIndex�argtypes�	c_ssize_t�restype�_PyCode_SetExtrar}�	py_object�c_int�_PyCode_GetExtrar��POINTERrsru�	FREE_FUNCr~rwr�r]�mainrBrr�<module>r�s��}�}�~����
�
�
�
���������������������
�
�
�
���M�M�M�M������
�F�F�F�����&�&�&�&�&�&�&�&�&�&�&�&�8�7�7�7�7�7�)�)�)�)�)�)��������'�(�����2�2�2�8�8�8�W,�W,�W,�W,�W,�x� �W,�W,�W,�t2�2�2�-$�-$�-$�-$�-$�X�&�-$�-$�-$�`%�%�%�%�%�h�'�%�%�%�4���������)R�)R�)R�V1�1�1�
�F�H�H�����2�2�2����@���9
�9
�9
�9
�9
�x�(�9
�9
�9
�x��T�"�"�"�[.�v�'9�	�	�B��v���V�^�4�4�H��<��&.�[��"�$*�$4��!��"�H��)�6�+;�V�^�L�H���|�H���"�H��)�6�+;�'�����7�7�9�H���|�H���J������� � �I�&�&�y�1�1�J�B.�B.�B.�B.�B.�(�#�B.�B.�B.�J���
�z����H�M�O�O�O�O�O��s�)�3�3