o
    GXhQ                     @   s   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	 d dl
mZ d dlmZ G dd dejZG dd dejZG d	d
 d
ejZedkrWe  dS dS )    N)support)script_helper)FakePathc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zejd'krYd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$e%j&dBdC Z'dDdE Z(dFdG Z)dHdI Z*dJdK Z+e%j&dLdM Z,dNdO Z-dPdQ Z.e%j&dRdS Z/e%j&dTdU Z0e%j&dVdW Z1e%j&dXdY Z2dZd[ Z3d\d] Z4d^d_ Z5e%j&d`da Z6dbdc Z7ddde Z8dfdg Z9dhdi Z:djdk Z;dldm Z<dndo Z=dpdq Z>drds Z?dtdu Z@dvdw ZAdxS )yTestSpecificsc                 C   s   t |dd d S )Nz<single>singlecompileselfsource r   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_compile.pycompile_single      zTestSpecifics.compile_singlec                 C   s   |  t| j| d S N)assertRaisesSyntaxErrorr   r	   r   r   r   assertInvalidSingle   s   z!TestSpecifics.assertInvalidSinglec                 C   s   t ddd t ddd d S )Nhi<test>execzhir   r
   r   r   r   test_no_ending_newline   s   z$TestSpecifics.test_no_ending_newlinec                 C   s   t ddd d S )N r   r   r   r   r   r   r   
test_empty   r   zTestSpecifics.test_emptyc                 C   s4   t ddd t ddd t ddd t ddd d S )Nz
r   r   zhi
stuff
def f():
    passz(this_isreally_old_macdef f():
    passr   r   r   r   r   test_other_newlines   s   z!TestSpecifics.test_other_newlinesc                 C   sH   |  ttddd dd l}|j}t|dd | d| t|d| d S )Nz__debug__ = 1?r   r   	__debug__ZsureT)r   r   r   builtinsr   setattrassertEqual)r
   r   prevr   r   r   test_debug_assignment#   s   z#TestSpecifics.test_debug_assignmentc                 C   sX   |  ttd |  ttd |  ttd |  ttd |  ttd |  ttd d S )Nzlambda a,a:0zlambda a,a=1:0zlambda a=1,a=1:0zdef f(a, a): passzdef f(a = 0, a = 1): passdef f(a): global a; a = 1)r   r   evalr   r   r   r   r   test_argument_handling,   s   z$TestSpecifics.test_argument_handlingc                 C      |  ttddd d S )Nz1+*3filenamer   r   r   r   r   r   r   r   test_syntax_error5      zTestSpecifics.test_syntax_errorc                 C   r'   )Nz	f(None=1)<string>r   r)   r   r   r   r   test_none_keyword_arg8   r+   z#TestSpecifics.test_none_keyword_argc                 C      |  ttd d S )Nr$   r   r   r   r   r   r   r   test_duplicate_global_local;      z)TestSpecifics.test_duplicate_global_localc                 C   s,  G dd d}| }t  }td|| | |jd ztd|| W n	 ty+   Y nw | d td|| | |jdtd	f td
|| | |jd|f td|| | |jd|f | ttd| G dd d}| }| ttd|| G dd dt	}| }td|| | |d d d S )Nc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Mz9Test mapping interface versus possible calls from eval().c                 S   s   |dkrdS t Na   )KeyErrorr
   keyr   r   r   __getitem__B   s   zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__getitem__c                 S   s   ||f| _ d S r   )resultsr
   r7   valuer   r   r   __setitem__F      zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__setitem__c                 S   s   t dS )Nxyz)listr   r   r   r   keysH   s   zGTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.keysN)__name__
__module____qualname____doc__r8   r<   r@   r   r   r   r   M@   s
    rE   zz = a)zr4   zz = bzDid not detect a KeyErrorz	z = dir()rF   r>   zz = globals()zz = locals()c                   @   s   e Zd ZdZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.AzNon-mappingN)rA   rB   rC   rD   r   r   r   r   A]   s    rG   c                   @      e Zd Zdd ZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Dc                 S   s   |dkrdS t | |S r2   )dictr8   r6   r   r   r   r8   e   s   zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.D.__getitem__N)rA   rB   rC   r8   r   r   r   r   Dd       rJ   r4   )
globalsr   r!   r9   	NameErrorfailr?   r   	TypeErrorrI   )r
   rE   mgrG   rJ   dr   r   r   )test_exec_with_general_mapping_for_locals>   s2   
z7TestSpecifics.test_exec_with_general_mapping_for_localsc                 C   s@   ddd  }i }d|fd  }t || | |d dd d S )	Nz	x = x or z-xi	  z
def f(x):
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    # the expressions above have no effect, x == argument
    while x:
        x -= 1
        # EXTENDED_ARG/JUMP_ABSOLUTE here
    return x

   f   r   )r   r!   )r
   ZlongexprrQ   coder   r   r   test_extended_argm   s   
zTestSpecifics.test_extended_argc                 C   r.   )Nzdef f(a=1, b): passr/   r   r   r   r   test_argument_order   r1   z!TestSpecifics.test_argument_orderc                 C   s<   |  ttd |  ttd |  ttd |  ttd d S )NZ2ez2.0e+z1e-z3-4e/21)r   r   r%   r   r   r   r   test_float_literals   s   z!TestSpecifics.test_float_literalsc                 C   s   d}t |dd d S )Nz
if 1:
    if 2:
        passr,   r   r   r
   sr   r   r   test_indentation   s   zTestSpecifics.test_indentationc                 C   sJ   d dgd dg }t|dd}| |jd | t| dg d S )	Nr   
   Zspamfnr      )r      i  )joinr   r!   co_firstlinenor?   co_lines)r
   Zs256cor   r   r   test_leading_newlines   s   z#TestSpecifics.test_leading_newlinesc                 C   s  dD ]	}|  tt| q| tdd | tdd | tdd | tdd | tdd	 | td
d | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd  | td!d" | td#d$ | td%d& | td'd( d S ))N)Z077787Z0xjz0x.Z0eZ090000000000000Z080000000000000Z000000000000009Z000000000000008Z0b42Z0BADCAFEZ0o123456789z0b1.1z0o4.2Z0b101jZ0o153jZ0b100e1Z0o777e1Z0777Z000777Z000000000000007Z0xff   z0777.i	  z0777.0Z8000000000000000000000000000000000000000000000000000777e0Z0777e1iZ  Z0e0r   z	0000e-012z09.5g      #@Z0777jy             H@Z000Z00j                z00.0Z0e3z090000000000000.g  聰vBz&090000000000000.0000000000000000000000Z090000000000000e0z090000000000000e-0Z090000000000000jy          聰vBz000000000000008.g       @z000000000000009.g      "@Z0b101010*   z-0b000000000010Z0o777i  z
-0o0000010i)r   r   r%   r!   )r
   argr   r   r   !test_literals_with_leading_zeroes   s4   z/TestSpecifics.test_literals_with_leading_zeroesc              	   C   s   d}dd|  d}t | t|dd W d    n1 s w   Y  t |d > | t}t|dd W d    n1 sCw   Y  |j}| |jd	 | d
t	| | dt	| W d    d S 1 smw   Y  d S )Ni  za = 1
b = 2
c = 3z
d = 4z<long_int_pass>r   ra   z<long_int_fail>   zExceeds the limit z Consider hexadecimal )
r   Zadjust_int_max_str_digitsr   r   r   	exceptionr!   linenoassertInstr)r
   nr   Zerr_ctxexcr   r   r   test_int_literals_too_long   s   "z(TestSpecifics.test_int_literals_too_longc                 C   s   t jdkrd}| t|d | td| d nt jdkr4d}| t|d | td| d	 n| d
 | tdt j d  t | tdt j d  t d S )NiZ
0xffffffffl    -l     Z0xffffffffffffffffl    l z)How many bits *does* this machine have???z%sra      )sysmaxsizer!   r%   rN   assertIsInstanceint)r
   Zall_one_bitsr   r   r   test_unary_minus   s   


 zTestSpecifics.test_unary_minusrx   c           
      C   sH   d}d}d}d}d}d}d}d}| j jjD ]}	|	d ur!| |	t qd S )	Nl        l     l          l       l            l         rx   l )test_32_63_bit_values__code__	co_constsr|   r}   )
r
   r3   bcrR   erU   rQ   hvariabler   r   r   r      s   z#TestSpecifics.test_32_63_bit_valuesc                 C   s$   d\}}|  |d |  |d d S )N)ra   )r   ra   ra   r   r!   )r
   ijr   r   r   test_sequence_unpacking_error   s   z+TestSpecifics.test_sequence_unpacking_errorc                 C   sB   g d}|D ]}|d7 }|  tt|dd |  tt|dd qd S )N)zNone = 0z	None += 0z__builtins__.None = 0zdef None(): passzclass None: passz(a, None) = 0, 0zfor None in range(10): passzdef f(None): passzimport Nonezimport x as Nonezfrom x import Nonezfrom x import y as Noner^   tmpr   r   r)   )r
   Zstmtsstmtr   r   r   test_none_assignment   s   z"TestSpecifics.test_none_assignmentc                 C   sF   g d}g d}|D ]}t |dd q
|D ]}| tt |dd qd S )N)z
import syszimport os, syszimport os as barzimport os.path as barz0from __future__ import nested_scopes, generatorsz2from __future__ import (nested_scopes,
generators)z3from __future__ import (nested_scopes,
generators,)z%from sys import stdin, stderr, stdoutz'from sys import (stdin, stderr,
stdout)z(from sys import (stdin, stderr,
stdout,)z(from sys import (stdin
, stderr, stdout)z)from sys import (stdin
, stderr, stdout,)z7from sys import stdin as si, stdout as so, stderr as sez9from sys import (stdin as si, stdout as so, stderr as se)z:from sys import (stdin as si, stdout as so, stderr as se,))zimport (os, sys)zimport (os), (sys)zimport ((os), (sys))zimport (syszimport sys)zimport (os,)zimport os As barzimport os.path a barzfrom sys import stdin As stdoutzfrom sys import stdin a stdoutzfrom (sys) import stdinz%from __future__ import (nested_scopesz%from __future__ import nested_scopes)z0from __future__ import nested_scopes,
generatorszfrom sys import (stdinzfrom sys import stdin)z%from sys import stdin, stdout,
stderrzfrom sys import stdin sizfrom sys import stdin,zfrom sys import (*)z(from sys import (stdin,, stdout, stderr)z from sys import (stdin, stdout),r   r   )r   r   r   )r
   ZsucceedrN   r   r   r   r   test_import  s   zTestSpecifics.test_importc                 C   s.   dd }| \}}|  t|jt|j d S )Nc                  S   s   ddd} ddd}| |fS )Nra   c                 S      | S r   r   xr   r   r   <lambda>=      zITestSpecifics.test_for_distinct_code_objects.<locals>.f.<locals>.<lambda>ry   c                 S   r   r   r   r   r   r   r   r   >  r   )ra   )ry   r   )f1f2r   r   r   rU   <  s   

z7TestSpecifics.test_for_distinct_code_objects.<locals>.f)assertNotEqualidr   )r
   rU   r   r   r   r   r   test_for_distinct_code_objects:  s   
z,TestSpecifics.test_for_distinct_code_objectsc                 C   s   dd }|  |j d S )Nc                   S      dS )NZfoor   r   r   r   r   r   D  r   z/TestSpecifics.test_lambda_doc.<locals>.<lambda>)ZassertIsNonerD   )r
   lr   r   r   test_lambda_docC  s   zTestSpecifics.test_lambda_docc                 C   s   d}|  tt|dd d}t|dd | t|d d}| t|d d}| t|d d	}| t|d d
}| t|d d}| t|d d}| t|d d}| t|d d S )Ns#   # -*- coding: badencoding -*-
pass
r   r   u%   # -*- coding: badencoding -*-
"Â¤"
u   Â¤u   "Â¤"
s   "¤"
   ¤s   # -*- coding: latin1 -*-
"¤"
s   # -*- coding: utf-8 -*-
"¤"
s"   # -*- coding: iso8859-15 -*-
"¤"
u   Â€u*   """\
# -*- coding: iso8859-15 -*-
Â¤"""
u!   # -*- coding: iso8859-15 -*-
Â¤s(   """\
# -*- coding: iso8859-15 -*-
¤"""
u   # -*- coding: iso8859-15 -*-
¤)r   r   r   r!   r%   r
   rW   r   r   r   test_encodingG  s&   zTestSpecifics.test_encodingc                 C   s^  G dd dt }| }d|d< | |d d |d  d7  < | |d d |d= | d| d|d< | |d d |d  d7  < | |d d |d= | d| d|dd< | |dd d |dd  d7  < | |dd d |dd= | tdd| d|ddddf< | |ddddf d |ddddf  d7  < | |ddddf d |ddddf= | tddtddf| d|ddd< | |ddd d |ddd  d7  < | |ddd d |ddd= | tddd| d|ddddddf< | |ddddddf d |ddddddf  d7  < | |ddddddf d |ddddddf= | tdddtdddf| d|d< | |d d |d  d7  < | |d d |d= | t| d|d< | |d d |d  d7  < | |d d |d= | ttf| d S )	Nc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z.TestSpecifics.test_subscripts.<locals>.str_mapc                 S   s
   i | _ d S r   )datar   r   r   r   __init__`  s   
z7TestSpecifics.test_subscripts.<locals>.str_map.__init__c                 S   s   | j t| S r   r   rs   r6   r   r   r   r8   b  r=   z:TestSpecifics.test_subscripts.<locals>.str_map.__getitem__c                 S   s   || j t|< d S r   r   r:   r   r   r   r<   d  r1   z:TestSpecifics.test_subscripts.<locals>.str_map.__setitem__c                 S   s   | j t|= d S r   r   r6   r   r   r   __delitem__f  r   z:TestSpecifics.test_subscripts.<locals>.str_map.__delitem__c                 S   s   t || jv S r   )rs   r   r6   r   r   r   __contains__h  r=   z;TestSpecifics.test_subscripts.<locals>.str_map.__contains__N)rA   rB   rC   r   r8   r<   r   r   r   r   r   r   str_map_  s    r   ra   ry   )ra   ra   ro   .)..)objectr!   ZassertNotInsliceEllipsis)r
   r   rR   r   r   r   test_subscripts\  sd   
    zTestSpecifics.test_subscriptsc                 C   s0   d}|d dd tdD ; }t|dd d S )Nzdef f(%s): pass, c                 s   s    | ]	}d ||f V  qdS )za%d:%dNr   .0r   r   r   r   	<genexpr>      z6TestSpecifics.test_annotation_limit.<locals>.<genexpr>,  r   r   )rc   ranger   r[   r   r   r   test_annotation_limit  s   z#TestSpecifics.test_annotation_limitc                 C   sZ   G dd d}|  d|jjj |  d|jjj |  d|jjj |  d|jjj d S )Nc                   @   rH   )z&TestSpecifics.test_mangling.<locals>.Ac                  S   s   d} d}dd l }dd l}d S )Nra   ry   r   )_A__mangled_modZ__package__.module)_A__mangled__not_mangled__r   __package__r   r   r   rU     s   z(TestSpecifics.test_mangling.<locals>.A.fN)rA   rB   rC   rU   r   r   r   r   rG     rK   rG   r   r   r   r   )rr   rU   r   co_varnames)r
   rG   r   r   r   test_mangling  s
   zTestSpecifics.test_manglingc           	      C   sJ  t }| dr|d d }t|dd}| }W d    n1 s$w   Y  ddgddgd	d
gddg||gg}|D ]7\}}t|d| d}t|d| dtj}| t	|tj
k t|d| d}| || | |jd|  q<tdddtj}| tt|dd | ttt dd t
 }t g|_| tt|dd d S )NZpycr   zutf-8)encodingz<assign>zx = 5z	<ifblock>zif True:
    pass
z
<forblock>z!for n in [1, 2, 3]:
    print(n)
z	<deffunc>zdef foo():
    pass
foo()
z%s1r   z%s2z%s3zprint(1)r,   z<ast>r%   )__file__lowerendswithopenreadr   _astZPyCF_ONLY_AST
assertTruetypeZModuler!   co_filenamer   rO   ZIfZBoolOpbody)	r
   ZfnamerU   Z	fcontentsZsample_coderW   Zco1astZco2r   r   r   test_compile_ast  s2   
zTestSpecifics.test_compile_astc                    s:   d  fdd}| | | | i}|  |ddd d S )Nr   c                      s    d7   S Nra   r   r   r   r   r   rU     s   z3TestSpecifics.test_dict_evaluation_order.<locals>.fry      )ra   ro   r   )r
   rU   rR   r   r   r   test_dict_evaluation_order  s   z(TestSpecifics.test_dict_evaluation_orderc              	   C   s   dD ]}t d|d}| |jd qtdtdfD ]$}| t t d|d}W d    n1 s2w   Y  | |jd q| tt dt	dd d S )N)file.py   file.pypassr   r   r   )
r   r!   r   	bytearray
memoryviewZassertWarnsDeprecationWarningr   rO   r?   )r
   r(   rW   r   r   r   test_compile_filename  s   z#TestSpecifics.test_compile_filenamec                 C   s<   d}t |dd}|jD ]}t|tjr| |j|j qd S )Nzdef f(): pass
def g(): passZmyfiler   )r   r   
isinstancetypesCodeTypeassertIsr   )r
   r\   r   objr   r   r   test_same_filename_used  s   
z%TestSpecifics.test_same_filename_usedc                 C   s   |  d |  d |  d |  d |  d |  d |  d |  d |  d	 |  d
 |  d |  d |  d |  d |  d d S )Nz1 + 2z
1 + 2z1 + 2
z1 + 2

z1 + 2		
z1 + 2		
        z1 + 2 # one plus twoz1; 2zimport sys; syszdef f():
   passzwhile False:
   passzif x:
   f(x)zif x:
   f(x)
else:
   g(x)zclass T:
   passzc = '''
a=1
b=2
c=3
''')r   r   r   r   r   test_single_statement  s   













z#TestSpecifics.test_single_statementc                 C   s^   |  d |  d |  d |  d |  d |  d |  d |  d |  d	 d S )
Nz1
2zdef f(): passza = 13
b = 187zdel x
del yzf()
g()zf()
# blah
blah()zf()
xy # blah
blah()zx = 5 # comment
x = 6
zc = '''
d=1
'''
a = 1

b = 2
)r   r   r   r   r   test_bad_single_statement  s   







z'TestSpecifics.test_bad_single_statementc              	   C      d}t  0}tj|d}t|d}|| W d    n1 s#w   Y  t|d }W d    n1 s9w   Y  | 	d|j
 d S )Ns   0000 
00000000000
 

bad.pywbr   	   Non-UTF-8tempfileTemporaryDirectoryospathrc   r   writer   Zrun_python_until_endrr   errr
   srcZtmpdr`   fpresr   r   r   "test_particularly_evil_undecodable     
z0TestSpecifics.test_particularly_evil_undecodablec              	   C   r   )Ns   # 
#
r   r   r   r   r   r   r   r   r   $test_yet_more_evil_still_undecodable  r   z2TestSpecifics.test_yet_more_evil_still_undecodablec                    sd   t  d t  d  td d fdd	}|dd |dd	 |dd
 |dd d S )Nro   r   g      ?r   c              	      s~   | |  }t |d|  fD ],}| ||  }d| ||}jt|d t |d| W d    n1 s7w   Y  qd S )Nr   zCompiling ({!r} + {!r} * {}))msg)r   formatr   RecursionError)prefixZrepeatedmodeZ	expect_okdepthbrokendetailsZcrash_depthZ
fail_depthr
   Zsuccess_depthr   r   check_limit4  s   z@TestSpecifics.test_compiler_recursion_limit.<locals>.check_limitr3   z()z.bz[0]z*a)r   )rz   getrecursionlimitr}   )r
   r   r   r   r   test_compiler_recursion_limit'  s   	



z+TestSpecifics.test_compiler_recursion_limitc                 C   s8  |  td tddd W d    n1 sw   Y  |  td ttddd W d    n1 s5w   Y  ttddd dd}| t|d ttd	dd dd}| t|d ttd
dd dd}| t|d | ttd	dd d t }ttddd | | |d d d S )Nzcannot contain nullz123 <dummy>r%   s   123 ra   r      s   1234s   $23$s   ax = 123r   r4   )ZassertRaisesRegex
ValueErrorr   r   r!   r%   rI   r   )r
   rW   	namespacer   r   r   test_null_terminatedF  s    z"TestSpecifics.test_null_terminatedc                 C   s>   |j jD ]}t|t|kr d S q| d||j jf  d S )Nz unable to find constant %r in %r)r   r   reprrN   )r
   funcZexpectedconstr   r   r   check_constantZ  s   

zTestSpecifics.check_constantc                    s   fdd}|d  |d |d |d |d dd dd }}  |j|j  |t  t| tt d	d d
d }}dd }  |jjd |jjd d    tt|jjd |jjd  dd dd }}  |j|j  |t	dh  
|d d S )Nc                    s`   i }d| | f }t || |d }|d } |j|j  ||   t| t|  d S Nzf1, f2 = lambda: %r, lambda: %rr   r   )r   r   r   r   r!   r   )r   nsrW   r   r   r   r   r   check_same_constanti  s   
z?TestSpecifics.test_merge_constants.<locals>.check_same_constantr           s   abcabcc                   S   r   )N.r   r   r   r   r   r   {  r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>c                   S   r   )N
not a namer   r   r   r   r   r     r   c                   S   r   )Nr  r   r   r   r   r   r     r   c                 S      | dv S )N>   r  r   r   r   r   r   r         ra   c                 S   r  N>   r   r   r   r   r   r   r     r  )r   r   r   r   r!   r   r   nextiter	frozensetr   )r
   r  r   r   Zf3r   r   r   test_merge_constantsd  s,   

z"TestSpecifics.test_merge_constantsc                 C   s<   dd }dd }|  |jj|jj |  |jj|jj d S )Nc                 S      | j jS r   )yrF   r   r   r   r   r     r  z5TestSpecifics.test_merge_code_attrs.<locals>.<lambda>c                 S   r  r   )r   r   r3   r   r   r   r     r  )r   r   co_linetableco_code)r
   r   r   r   r   r   test_merge_code_attrs  s   z#TestSpecifics.test_merge_code_attrsc                 C   s   dd }|  |jjd d S )Nc                   S   r   Z	docstringrj   r   r   r   r   r   r     s   z2TestSpecifics.test_strip_unused_consts.<locals>.f1r  )r!   r   r   )r
   r   r   r   r   test_strip_unused_consts  s   z&TestSpecifics.test_strip_unused_constsc                 C   s(   dd }|  dtt|d j dS )z9Regression test for issue35193 when run under clang msan.c                   S   r   )Nro   )RuntimeErrorr   r   r   r   unused_code_at_end     zcTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_bounds.<locals>.unused_code_at_endRETURN_VALUEr   N)r!   r?   disget_instructionsopname)r
   r  r   r   r   9test_peephole_opt_unreachable_code_array_access_in_bounds  s
   zGTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_boundsc                    s
   fdd}|dd |dd |dd |dd	 |d
d dd dd }}  |j|j  |d  |d  t| td  t| td dd dd }}  |j|j  |tdh  |tdh  |d  |d d S )Nc                    s   i }t d| |f | |d }|d } |j|j  |j|j  ||   ||  t| t|   t| t| d S r   )r   assertIsNotr   r   r   r!   r   )Zconst1Zconst2r   r   r   r   r   r   check_different_constants  s   zJTestSpecifics.test_dont_merge_constants.<locals>.check_different_constantsr   r  g       )r   )r  r3      ar  )r  c                   S   r   )Nri   r   r   r   r   r   r     r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>c                   S   r   )N              r   r   r   r   r   r     r   ri   r   c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  )N>   r  r   r   r   r   r   r     r  )r  r   r   r!   r   r  r   )r
   r  r   r   r   r   r   test_dont_merge_constants  s$   




z'TestSpecifics.test_dont_merge_constantsc                 C   s   t dtdd d S )NZ42Ztest_compile_pathliker   )r   r   r   r   r   r   test_path_like_objects  s   z$TestSpecifics.test_path_like_objectsc                 C   s   t dd dd d S )Nzif a: b
i@ r   r   r   r   r   r   r   test_stack_overflow  s   z!TestSpecifics.test_stack_overflowc                 C   s   dd }dd }dd }dd }||||g}|D ],}t t|}| t|d	 | d
|d j | d |d j | d|d j qd S )Nc                   S      d S r   r   r   r   r   r   unused_block_if  r  zPTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_ifc                   S   r$  r   r   r   r   r   r   unused_block_while  r  zSTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_whilec                   S      	 d S r   r   r   r   r   r   unused_block_if_else     zUTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_if_elsec                   S   r'  r   r   r   r   r   r   unused_block_while_else  r)  zXTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_while_elsero   
LOAD_CONSTrk   r  r   )r?   r  r  assertLessEquallenr!   r  argval)r
   r%  r&  r(  r*  funcsr   opcodesr   r   r   )test_dead_blocks_do_not_generate_bytecode  s   z7TestSpecifics.test_dead_blocks_do_not_generate_bytecodec                 C   sz   dd }dd }||g}|D ],}t t|}| dt| | d|d j | d |d j | d|d	 j qd S )
Nc                   S   r$  r   r   r   r   r   r   break_in_while  r  z;TestSpecifics.test_false_while_loop.<locals>.break_in_whilec                   S   r$  r   r   r   r   r   r   continue_in_while  r  z>TestSpecifics.test_false_while_loop.<locals>.continue_in_whilery   r+  r   r  ra   )r?   r  r  r!   r-  r  r.  )r
   r2  r3  r/  r   r0  r   r   r   test_false_while_loop
  s   z#TestSpecifics.test_false_while_loopc              	   C   s   dd }dd }dd }dd }||||g}|D ]9}| j |d	) tt|}| d
t| | d|d j | d|d j W d    n1 sLw   Y  qd S )Nc                 S   r   r   r   r   r   r   r   and_true  r  z;TestSpecifics.test_consts_in_conditionals.<locals>.and_truec                 S   r   )NFr   r   r   r   r   	and_false!  r  z<TestSpecifics.test_consts_in_conditionals.<locals>.and_falsec                 S   r   )NTr   r   r   r   r   or_true$  r  z:TestSpecifics.test_consts_in_conditionals.<locals>.or_truec                 S   r   r   r   r   r   r   r   or_false'  r  z;TestSpecifics.test_consts_in_conditionals.<locals>.or_falser   ry   ZLOAD_r   r  ra   )subTestr?   r  r  r!   r-  rr   r  )r
   r5  r6  r7  r8  r/  r   r0  r   r   r   test_consts_in_conditionals  s   z)TestSpecifics.test_consts_in_conditionalsc                 C   s4   dd }|j jd }|dd |j  D vsJ d S )Nc                   S   s
   t   d S r   )printr   r   r   r   call5  s   
z6TestSpecifics.test_lineno_procedure_call.<locals>.callra   c                 S   s   g | ]\}}}|qS r   r   r   _liner   r   r   
<listcomp>:      z<TestSpecifics.test_lineno_procedure_call.<locals>.<listcomp>)r   rd   re   )r
   r=  Zline1r   r   r   test_lineno_procedure_call4  s    z(TestSpecifics.test_lineno_procedure_callc           
   	      s   d  fdd} fdd} fdd} fdd	}||||g}g d
}d fdd}t ||ddD ])\}}	| j|d || | jjj |	 W d    n1 sWw   Y  q3d S )NTc                    s   |    r	 d S d S r   r   r   TRUEr   r   if1?     z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if1c                    s   |    rd S 	 d S r   r   r   rD  r   r   if2C  s   z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if2c                    s   |    rd S d S r   r   r   rD  r   r   if3I  s   z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if3c                    s   |    s	 d S d S r   r   r   rD  r   r   if4O  rG  z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if4)ro   ro   ro   ry   c                      s   t d d S r   )rz   	_getframer   )framer   r   save_caller_frameV  s   zJTestSpecifics.test_lineno_after_implicit_return.<locals>.save_caller_framestrictr9  )zipr:  r!   f_linenof_coderd   )
r
   rF  rH  rI  rJ  r/  Z	lastlinesrM  r   Zlastliner   )rE  rL  r   !test_lineno_after_implicit_return<  s    z/TestSpecifics.test_lineno_after_implicit_returnc           	   	   C   s   dd }dd }||fD ]F}| j |d6 |j}t| }| t|d |d \}}}| |d | |t|j | ||j W d    n1 sMw   Y  qd S )Nc                   S   r   )z
doc stringNr   r   r   r   r   no_code1_  r   z9TestSpecifics.test_lineno_after_no_code.<locals>.no_code1c                   S   r$  r   r   r   r   r   r   no_code2b  r   z9TestSpecifics.test_lineno_after_no_code.<locals>.no_code2r9  ra   r   )r:  r   r?   re   r!   r-  r  rd   )	r
   rT  rU  r   rW   linesstartendr@  r   r   r   test_lineno_after_no_code^  s   z'TestSpecifics.test_lineno_after_no_codec              	      s   dd }g d}dd }g d}dd }g d	}d
d }g d}||||g}	||||g}
t |	|
ddD ],\ }| j d  fdd j D }| || W d    n1 sZw   Y  q3d S )Nc                   S   s   t jS r   )or3   r   r   r   r   	load_attrp  s   z6TestSpecifics.test_lineno_attribute.<locals>.load_attr)ry   ro   ra   c                   S   s
   t dS )Nr   )rZ  rP   r   r   r   r   load_methodw  s
   z8TestSpecifics.test_lineno_attribute.<locals>.load_method)ry   ro   r   ro   ra   c                   S   s
   t t_d S r   )vrZ  r3   r   r   r   r   
store_attr  s   z7TestSpecifics.test_lineno_attribute.<locals>.store_attr)rV   ry   ro   c                   S   s   t  jt7  _d S r   )rZ  r3   r]  r   r   r   r   aug_store_attr  s
   z;TestSpecifics.test_lineno_attribute.<locals>.aug_store_attr)ry   ro   rV   ra   ro   TrN  r9  c                    s   g | ]\}}}| j j qS r   r   rd   r>  r9  r   r   rA    s    z7TestSpecifics.test_lineno_attribute.<locals>.<listcomp>)rP  r:  r   re   r!   )r
   r[  Zload_attr_linesr\  Zload_method_linesr^  Zstore_attr_linesr_  Zaug_store_attr_linesr/  Z
func_linesrV  
code_linesr   r9  r   test_lineno_attributeo  s*   
z#TestSpecifics.test_lineno_attributec                    sB   dd  g d} j jd } fdd| D }| || d S )Nc                   S   s   dd t D S )Nc                 s   s    | ]}d V  qdS )ra   Nr   r   r   r   r   r   r     s    zOTestSpecifics.test_line_number_genexp.<locals>.return_genexp.<locals>.<genexpr>)r  r   r   r   r   return_genexp  s   z<TestSpecifics.test_line_number_genexp.<locals>.return_genexp)Nra   ro   ra   ra   c                    *   g | ]\}}}|d u rd n| j j qS r   r`  r>  rd  r   r   rA        z9TestSpecifics.test_line_number_genexp.<locals>.<listcomp>)r   r   re   r!   )r
   Zgenexp_linesZgenexp_codera  r   rf  r   test_line_number_genexp  s   
z%TestSpecifics.test_line_number_genexpc                    s8   dd  g d} fdd j  D }| || d S )Nc                    s   | 2 z3 d H W }t  q6 d S r   )r   )Zaseqr   r   r   r   test  s   zLTestSpecifics.test_line_number_implicit_return_after_async_for.<locals>.test)Nra   ry   ra   c                    re  r   r`  r>  ri  r   r   rA    rg  zRTestSpecifics.test_line_number_implicit_return_after_async_for.<locals>.<listcomp>)r   re   r!   )r
   expected_linesra  r   rj  r   0test_line_number_implicit_return_after_async_for  s   
z>TestSpecifics.test_line_number_implicit_return_after_async_forc                 C   s<   d}dd dd t|D  d }| tt|| d S )Ni   {,c                 s   s    | ]
}| d | V  qdS ):Nr   rc  r   r   r   r     s    z6TestSpecifics.test_big_dict_literal.<locals>.<genexpr>})rc   r   r!   r-  r%   )r
   Z	dict_sizeZthe_dictr   r   r   test_big_dict_literal  s    z#TestSpecifics.test_big_dict_literalc                 C   sf   dd }d}d}t t|D ]!\}}|jdkr | |jd q|j|v r0| |j|d |  qd S )Nc                  S   s"   d} 	 | dkr| d8 } nd S d} q)Nra   Tr   r   r   )valr   r   r   if_else_break  s   
zITestSpecifics.test_redundant_jump_in_if_else_break.<locals>.if_else_breakry   )ZPOP_JUMP_IF_FALSEZPOP_JUMP_IF_TRUEZJUMP_ABSOLUTEJUMP_FORWARDrt  r   ra   )	enumerater  ZBytecoder  r   rl   )r
   rs  Z
INSTR_SIZEZHANDLED_JUMPSr@  Zinstrr   r   r   $test_redundant_jump_in_if_else_break  s   	

z2TestSpecifics.test_redundant_jump_in_if_else_breakc              
      s   dD ]`\ }d| d| d}ddg }d| d| dd	| d
fD ]=}t |dd}dd | D } fddtt||ddD }| | | || W d    n1 s\w   Y  q$qd S )N))
COMPARE_OP<)rw  z<=)rw  >)rw  z>=)CONTAINS_OPin)rz  znot in)IS_OPis)r|  zis notza z b z cry   z\
zif \
z: xzx if \
z else yr   r   c                 s   s,    | ]\}}}t ||d D ]}|V  qqdS )ry   N)r   )r   rW  stopr@  r?  r   r   r   r     s    
z7TestSpecifics.test_compare_positions.<locals>.<genexpr>c                    s   g | ]\}}|j  kr|qS r   r  )r   Zinstructionr@  r  r   r   rA    s
    
z8TestSpecifics.test_compare_positions.<locals>.<listcomp>TrN  )r   re   rP  r  r  r:  r!   )r
   opexprrk  r   rW   Z	all_linesZactual_linesr   r  r   test_compare_positions  s(   


z$TestSpecifics.test_compare_positionsN)BrA   rB   rC   r   r   r   r   r   r#   r&   r*   r-   r0   rS   rX   rY   rZ   r]   rg   rm   rv   r~   rz   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zcpython_onlyr   r   r   r   r   r   r   r   r  r  r  r  r!  r"  r#  r1  r4  r;  rC  rS  rY  rb  rh  rl  rq  rv  r  r   r   r   r   r      s    		/!
/	H#






,



(
"-
r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%TestExpressionStackSized   c                 C   s>   t |trt|dd}ttt|j}| |j	| d S )N<foo>r   )
r   rs   r   mathceillogr-  r  r,  co_stacksize)r
   rW   max_sizer   r   r   check_stack_size  s   
z(TestExpressionStackSize.check_stack_sizec                 C      |  d| j d  d S )Nzx and r   r  Nr   r   r   r   test_and
     z TestExpressionStackSize.test_andc                 C   r  )Nzx or r   r  r   r   r   r   test_or  r  zTestExpressionStackSize.test_orc                 C   r  )Nzx and x or r   r  r   r   r   r   test_and_or  r  z#TestExpressionStackSize.test_and_orc                 C   r  )Nzx < r   r  r   r   r   r   test_chained_comparison  r  z/TestExpressionStackSize.test_chained_comparisonc                 C   r  )Nzx if x else r   r  r   r   r   r   test_if_else  r  z$TestExpressionStackSize.test_if_elsec                 C   r  )Nzx + r   r  r   r   r   r   
test_binop  r  z"TestExpressionStackSize.test_binopc                 C      |  dd| j  d  d S )N[x, zx]r  r   r   r   r   	test_list     z!TestExpressionStackSize.test_listc                 C   r  )N(r  zx)r  r   r   r   r   
test_tuple  r  z"TestExpressionStackSize.test_tuplec                 C   r  )Nrm  r  zx}r  r   r   r   r   test_set"  r  z TestExpressionStackSize.test_setc                 C   r  )Nrm  zx:x, zx:x}r  r   r   r   r   	test_dict%  r  z!TestExpressionStackSize.test_dictc                 C   r  )Nf(r  )r  r   r   r   r   test_func_args(  r  z&TestExpressionStackSize.test_func_argsc                 C   0   dd t | jD }| dd| d  d S )Nc                 s       | ]	}d | dV  qdS r3   z=xNr   r   r   r   r   r   ,  r   z;TestExpressionStackSize.test_func_kwargs.<locals>.<genexpr>r  r   r  r   r  r  rc   r
   kwargsr   r   r   test_func_kwargs+     z(TestExpressionStackSize.test_func_kwargsc                 C   r  )No.m(r  r  r  r   r   r   r   test_meth_args/  r  z&TestExpressionStackSize.test_meth_argsc                 C   r  )Nc                 s   r  r  r   r   r   r   r   r   3  r   z;TestExpressionStackSize.test_meth_kwargs.<locals>.<genexpr>r  r   r  r  r  r   r   r   test_meth_kwargs2  r  z(TestExpressionStackSize.test_meth_kwargsc                 C   s    d}|d| j  7 }| | d S )Nz
def f(x):
z   x and x
)r  r  r   r   r   r   test_func_and6  s   z%TestExpressionStackSize.test_func_andc                 C   s    d}d| d }t |dd d S )Ni  zx,z=tr  r   r   )r
   rE   rW   r   r   r   test_stack_3050;  s   z'TestExpressionStackSize.test_stack_3050N)rA   rB   rC   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s&    r  c                   @   s   e Zd Zd5ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )6TestStackSizeStabilityFc                    s    fddfddt ddD }tt|dkr>dd l}dd l}| }|jd|d	 | d
|| f  d S d S )Nc                    s>   i }d|   } rd| }t |dd}t||| |d jS )Nzdef func():
zasync z<script>r   r   )r   r   r   )r   r   ZscriptrW   )async_snippetr   r   compile_snippetG  s   
z@TestStackSizeStability.check_stack_size.<locals>.compile_snippetc                    s   g | ]} |j qS r   )r  r   )r  r   r   rA  P  rB  z;TestStackSizeStability.check_stack_size.<locals>.<listcomp>ry   rV   ra   r   )filez<stack sizes diverge with # of consecutive snippets: %s
%s
%s)r   r-  setr  ioStringIOrN   getvalue)r
   r  r  Zsizesr  r  outr   )r  r  r  r   r  F  s   	
z'TestStackSizeStability.check_stack_sizec                 C      d}|  | d S )Nz1
            if x:
                a
            r  r
   r  r   r   r   test_ifX     zTestStackSizeStability.test_ifc                 C   r  )Nz{
            if x:
                a
            elif y:
                b
            else:
                c
            r  r  r   r   r   r  _  s   z#TestStackSizeStability.test_if_elsec                 C   r  )NzV
            try:
                a
            except:
                b
            r  r  r   r   r   test_try_except_barej     z+TestStackSizeStability.test_try_except_barec                 C   r  )Nz
            try:
                a
            except ImportError:
                b
            except:
                c
            else:
                d
            r  r  r   r   r   test_try_except_qualifieds     
z0TestStackSizeStability.test_try_except_qualifiedc                 C   r  )Nz
            try:
                a
            except ImportError as e:
                b
            except:
                c
            else:
                d
            r  r  r   r   r   test_try_except_as  r  z)TestStackSizeStability.test_try_except_asc                 C   r  )Nzg
                try:
                    a
                finally:
                    b
            r  r  r   r   r   test_try_finally  r  z'TestStackSizeStability.test_try_finallyc                 C   r  )Nz8
            with x as y:
                a
            r  r  r   r   r   	test_with  r  z TestStackSizeStability.test_withc                 C   r  )NzX
            while x:
                a
            else:
                b
            r  r  r   r   r   test_while_else  r  z&TestStackSizeStability.test_while_elsec                 C   r  )Nz7
            for x in y:
                a
            r  r  r   r   r   test_for  r  zTestStackSizeStability.test_forc                 C   r  )Nz[
            for x in y:
                a
            else:
                b
            r  r  r   r   r   test_for_else  r  z$TestStackSizeStability.test_for_elsec                 C   r  )Nz
            for x in y:
                if z:
                    break
                elif u:
                    continue
                else:
                    a
            else:
                b
            r  r  r   r   r   test_for_break_continue  s   z.TestStackSizeStability.test_for_break_continuec                 C   r  )Na6  
            for x in y:
                try:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
                finally:
                    f
            else:
                b
            r  r  r   r   r   0test_for_break_continue_inside_try_finally_block     zGTestStackSizeStability.test_for_break_continue_inside_try_finally_blockc                 C   r  )Na6  
            for x in y:
                try:
                    t
                finally:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  r   r   r   ,test_for_break_continue_inside_finally_block  r  zCTestStackSizeStability.test_for_break_continue_inside_finally_blockc                 C   r  )Na5  
            for x in y:
                try:
                    t
                except:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  r   r   r   +test_for_break_continue_inside_except_block  r  zBTestStackSizeStability.test_for_break_continue_inside_except_blockc                 C   r  )Na
  
            for x in y:
                with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  r   r   r   )test_for_break_continue_inside_with_block  s   z@TestStackSizeStability.test_for_break_continue_inside_with_blockc                 C   r  )Nz
            try:
                if z:
                    return
                else:
                    a
            finally:
                f
            r  r  r   r   r   $test_return_inside_try_finally_block     	z;TestStackSizeStability.test_return_inside_try_finally_blockc                 C   r  )Nz
            try:
                t
            finally:
                if z:
                    return
                else:
                    a
            r  r  r   r   r    test_return_inside_finally_block  r  z7TestStackSizeStability.test_return_inside_finally_blockc                 C   r  )Nz
            try:
                t
            except:
                if z:
                    return
                else:
                    a
            r  r  r   r   r   test_return_inside_except_block  r  z6TestStackSizeStability.test_return_inside_except_blockc                 C   r  )Nz~
            with c:
                if z:
                    return
                else:
                    a
            r  r  r   r   r   test_return_inside_with_block*  s   z4TestStackSizeStability.test_return_inside_with_blockc                 C      d}| j |dd d S )Nz>
            async with x as y:
                a
            Tr  r  r  r   r   r   test_async_with4     z&TestStackSizeStability.test_async_withc                 C   r  )Nz=
            async for x in y:
                a
            Tr  r  r  r   r   r   test_async_for;  r  z%TestStackSizeStability.test_async_forc                 C   r  )Nza
            async for x in y:
                a
            else:
                b
            Tr  r  r  r   r   r   test_async_for_elseB  s   z*TestStackSizeStability.test_async_for_elsec                 C   r  )Na  
            for x in y:
                async with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            Tr  r  r  r   r   r   /test_for_break_continue_inside_async_with_blockK  s   zFTestStackSizeStability.test_for_break_continue_inside_async_with_blockc                 C   r  )Nz
            async with c:
                if z:
                    return
                else:
                    a
            Tr  r  r  r   r   r   #test_return_inside_async_with_blockZ  s   z:TestStackSizeStability.test_return_inside_async_with_blockN)F)rA   rB   rC   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  B  s4    
				
	r  __main__)r  r  r   Zunittestrz   r   r   r   ri  r   Ztest.supportr   Ztest.support.os_helperr   ZTestCaser   r  r  rA   mainr   r   r   r   <module>   s4           uF  %