
    daf:                    v   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	Z	d dl
Z
d dlmZ d dlmZmZmZmZ d dlmZ  G d dej(                        Z e        G d dej(                               Z G d	 d
ej(                        Z G d dej(                        Zedk(  r ej4                          yy)    N)support)script_helperrequires_debug_rangesrequires_specializationC_RECURSION_LIMIT)FakePathc                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Z ej                  ej"                  d      d        Zd Zd Zd Zd Zd Zd Zd Zej6                  dk(  rd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d  Z&d! Z'd" Z(d# Z)d$ Z*ejV                  d%        Z,d& Z-d' Z.d( Z/d) Z0ejV                   ej                  ej"                  d      d*               Z1d+ Z2d, Z3ejV                  d-        Z4ejV                  d.        Z5ejV                  d/        Z6ejV                  d0        Z7ejV                  d1        Z8ejV                  d2        Z9ejV                  d3        Z:d4 Z;d5 Z< ejz                  d6      d7        Z>ejV                  d8        Z?d9 Z@d: ZAd; ZBd< ZCd= ZDd> ZEd? ZFd@ ZGdA ZHdB ZIdC ZJdD ZKdE ZLdF ZMejV                  dG        ZNdH ZOdI ZPdJ ZQdK ZRdL ZSdM ZTdN ZUdO ZVdP ZWdQ ZXyR)STestSpecificsc                     t        |dd       y )N<single>singlecompileselfsources     ,/root/Python-3.12.4/Lib/test/test_compile.pycompile_singlezTestSpecifics.compile_single   s    
H-    c                 F    | j                  t        | j                  |       y N)assertRaisesSyntaxErrorr   r   s     r   assertInvalidSinglez!TestSpecifics.assertInvalidSingle   s    +t':':FCr   c                 8    t        ddd       t        ddd       y )Nhi<test>execzhir   r   s    r   test_no_ending_newlinez$TestSpecifics.test_no_ending_newline   s    h'&)r   c                     t        ddd       y )N r   r   r   r   s    r   
test_emptyzTestSpecifics.test_empty   s    Hf%r   c                 l    t        ddd       t        ddd       t        ddd       t        ddd       y )Nz
r   r   zhi
stuff
def f():
    passz(this_isreally_old_macdef f():
    passr   r   s    r   test_other_newlinesz!TestSpecifics.test_other_newlines    s4    &)h'5xH=xPr   c                     | j                  t        t        ddd       dd l}|j                  }t        |dd       | j                  d|       t        |d|       y )Nz__debug__ = 1?r   r   	__debug__sureT)r   r   r   builtinsr)   setattrassertEqual)r   r+   prevs      r   test_debug_assignmentz#TestSpecifics.test_debug_assignment&   sN    +whO!!+v.D)+t,r   c                 H   | j                  t        t        d       | j                  t        t        d       | j                  t        t        d       | j                  t        t        d       | j                  t        t        d       | j                  t        t        d       y )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   s    r   test_argument_handlingz$TestSpecifics.test_argument_handling/   ss    +t^<+t-=>+t-?@+t-@A+t-HI+t-HIr   c                 >    | j                  t        t        ddd       y )Nz1+*3filenamer   r   r   r   r   s    r   test_syntax_errorzTestSpecifics.test_syntax_error8   s    +w
FKr   c                 >    | j                  t        t        ddd       y )Nz	f(None=1)<string>r   r6   r   s    r   test_none_keyword_argz#TestSpecifics.test_none_keyword_arg;   s    +wZPr   c                 :    | j                  t        t        d       y )Nr1   r   r   r   r   s    r   test_duplicate_global_localz)TestSpecifics.test_duplicate_global_local>   s    +t-HIr   c                     G d d      } |       }t               }t        d||       | j                  |j                  d       	 t        d||       | j	                  d       t        d||       | j                  |j                  dt        d	      f       t        d
||       | j                  |j                  d|f       t        d||       | j                  |j                  d|f       | j                  t        t        d|        G d d      } |       }| j                  t        t        d||        G d dt              } |       }t        d||       | j                  |d   d       y # t
        $ r Y w xY w)Nc                   "    e Zd ZdZd Zd Zd Zy)BTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Mz9Test mapping interface versus possible calls from eval().c                     |dk(  ryt         Na   )KeyErrorr   keys     r   __getitem__zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__getitem__E   s    #:r   c                     ||f| _         y r   )resultsr   rG   values      r   __setitem__zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__setitem__I   s     #U|r   c                     t        d      S )Nxyz)listr   s    r   keyszGTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.keysK   s    E{"r   N)__name__
__module____qualname____doc__rH   rM   rQ    r   r   Mr@   C   s    G,#r   rW   zz = a)zrD   zz = bzDid not detect a KeyErrorz	z = dir()rX   rO   zz = globals()zz = locals()c                       e Zd ZdZy)BTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.AzNon-mappingN)rR   rS   rT   rU   rV   r   r   ArZ   `   s    r   r[   c                       e Zd Zd Zy)BTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Dc                 :    |dk(  ryt         j                  | |      S rB   )dictrH   rF   s     r   rH   zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.D.__getitem__h   s    #:''c22r   N)rR   rS   rT   rH   rV   r   r   Dr]   g   s    3r   r`   rD   )
globalsr   r-   rJ   fail	NameErrorrP   r   	TypeErrorr_   )r   rW   mgr[   r`   ds          r   )test_exec_with_general_mapping_for_localsz7TestSpecifics.test_exec_with_general_mapping_for_localsA   sS   		# 		# CIWaI.	3!Q II12[!QS$u+$67_a#S!H-^Q"S!H-)T7A6	 	 C)T7Aq9	3 	3
 CWa3$5  		s   E1 1	E>=E>zexhausts limited stack on WASIc                     t        t        dz        }dd|z  z   }i }t        j                  d|fdz  z        }t	        ||       | j                   |d   d      d       y )	N?z	x = x or z-xa  
            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   )intr   textwrapdedentr   r-   )r   repeatlongexprrf   codes        r   test_extended_argzTestSpecifics.test_extended_argp   sm    &,-.  " ;r># # $$ 	T13A&r   c                 :    | j                  t        t        d       y )Nzdef f(a=1, b): passr<   r   s    r   test_argument_orderz!TestSpecifics.test_argument_order   s    +t-BCr   c                     | j                  t        t        d       | j                  t        t        d       | j                  t        t        d       | j                  t        t        d       y )N2ez2.0e+z1e-z3-4e/21)r   r   r2   r   s    r   test_float_literalsz!TestSpecifics.test_float_literals   sJ    +tT2+tW5+tU3+tY7r   c                 H    t        j                  d      }t        |dd       y )NzN
            if 1:
                if 2:
                    pass
            r9   r   ro   rp   r   r   ss     r   test_indentationzTestSpecifics.test_indentation   s#    OO  
 	:v&r   c                    dj                  dgdz  dgz         }t        |dd      }| j                  |j                  d       |j	                         D cg c]  \  }}}|
 }}}| j                  |dd	g       y c c}}w )
Nr"   
   spamfnr      r   i  )joinr   r-   co_firstlinenoco_lines)r   s256co_lineliness         r   test_leading_newlinesz#TestSpecifics.test_leading_newlines   sy    wwv|vh./T4(**A.(*6*!Q66C) 7s   A;c                 X   dD ]  }| j                  t        t        |        | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d	       | j                  t        d
      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d       | j                  t        d      d        | j                  t        d!      d"       | j                  t        d#      d$       | j                  t        d%      d&       | j                  t        d'      d(       y ))N)0777870xjz0x.0e0900000000000000800000000000000000000000000090000000000000080b420BADCAFE0o123456789z0b1.1z0o4.20b101j0o153j0b100e10o777e107770007770000000000000070xff   z0777.i	  z0777.08000000000000000000000000000000000000000000000000000777e00777e1iZ  0e0r   z	0000e-012z09.5g      #@0777jy             H@00000j                z00.00e3z090000000000000.g  聰vBz&090000000000000.0000000000000000000000090000000000000e0z090000000000000e-0090000000000000jy          聰vBz000000000000008.g       @z000000000000009.g      "@0b101010*   z-0b0000000000100o777i  z
-0o0000010i)r   r   r2   r-   )r   args     r   !test_literals_with_leading_zeroesz/TestSpecifics.test_literals_with_leading_zeroes   s   1 	6C
 k45	6 	fs+g,h-XY[^_h.ea(k*A.fs+g-ea(eb)fq)ea(01?CFGY12OD23_E01?C01260126j)2./0"5g,l+R0r   c                    d}dd|z   d}t        j                  |      5  t        |dd       d d d        t        j                  |dz
        5  | j                  t              5 }t        |dd       d d d        j
                  }| j                  |j                  d	       | j                  d
t        |             | j                  dt        |             d d d        y # 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   y xY w)Ni  za = 1
b = 2
c = 3z
d = 4z<long_int_pass>r   r   z<long_int_fail>   zExceeds the limit z Consider hexadecimal )
r   adjust_int_max_str_digitsr   r   r   	exceptionr-   linenoassertInstr)r   nr   err_ctxexcs        r   test_int_literals_too_longz(TestSpecifics.test_int_literals_too_long   s    %c!eWG4..q1 	7F-v6	7..qs3 	>"";/ ;7 16:;##CSZZ+MM.C9MM2CH=	> 	>	7 	7; ;	> 	>s0   C"C:%C.3A&C:"C+.C7	3C::Dc                 2   t         j                  dk(  r<d}| j                  t        |      d       | j                  t        d|z         d       n`t         j                  dk(  r<d}| j                  t        |      d       | j                  t        d|z         d	       n| j	                  d
       | j                  t        dt         j                   dz
  z        t               | j                  t        dt         j                   dz
  z        t               y )Ni
0xffffffffl    -l     0xffffffffffffffffl    l z)How many bits *does* this machine have???z%sr      )sysmaxsizer-   r2   rb   assertIsInstancern   )r   all_one_bitss     r   test_unary_minuszTestSpecifics.test_unary_minus   s    ;;*$'LT,/<T#"45{C[[///LT,/1EFT#"457LMIIAB 	d4CKK<!+;#<=sCd4CKK<!+;#<=sCr   r   c                     d}d}d}d}d}d}d}d}| j                   j                  j                  D ]  }	|	| j                  |	t                y )	Nl        l     l          l       l            l         r   l )test_32_63_bit_values__code__	co_constsr   rn   )
r   rC   bcrg   erl   rf   hvariables
             r   r   z#TestSpecifics.test_32_63_bit_values   sa    AA A A$A$A$A$A 66??II 9'))(C89r   c                 V    d\  }}| j                  |d       | j                  |d       y )N)r   r   r   r-   )r   ijs      r   test_sequence_unpacking_errorz+TestSpecifics.test_sequence_unpacking_error   s+    !ABr   c                     g d}|D ]A  }|dz  }| j                  t        t        |dd       | j                  t        t        |dd       C y )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   r6   )r   stmtsstmts      r   test_none_assignmentz"TestSpecifics.test_none_assignment   sQ    
  	IDDLDk7D%Jk7D%H	Ir   c                     g d}g d}|D ]  }t        |dd        |D ]  }| j                  t        t         |dd       ! y )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   succeedrb   r   s       r   test_importzTestSpecifics.test_import  sT    "0  	)DD%(	) 	IDk7D%H	Ir   c                     d } |       \  }}| j                  t        |j                        t        |j                               y )Nc                      dd} dd}| |fS )Nc                     | S r   rV   xs    r   <lambda>zITestSpecifics.test_for_distinct_code_objects.<locals>.f.<locals>.<lambda>D      Q r   c                     | S r   rV   r   s    r   r   zITestSpecifics.test_for_distinct_code_objects.<locals>.f.<locals>.<lambda>E  r   r   r   )r   rV   )f1f2s     r   rl   z7TestSpecifics.test_for_distinct_code_objects.<locals>.fC  s    BBr6Mr   )assertNotEqualidr   )r   rl   r   r   s       r   test_for_distinct_code_objectsz,TestSpecifics.test_for_distinct_code_objectsA  s4    	 BBr{{OR_=r   c                 @    d }| j                  |j                         y )Nc                       y)NfoorV   rV   r   r   r   z/TestSpecifics.test_lambda_doc.<locals>.<lambda>K      r   )assertIsNonerU   )r   ls     r   test_lambda_doczTestSpecifics.test_lambda_docJ  s    !))$r   c                 ,   d}| j                  t        t        |dd       d}t        |dd       | j                  t	        |      d       d}| j                  t	        |      d       d}| j                  t	        |      d       d	}| j                  t	        |      d       d
}| j                  t	        |      d       d}| j                  t	        |      d       d}| j                  t	        |      d       d}| j                  t	        |      d       y )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-   r2   r   rs   s     r   test_encodingzTestSpecifics.test_encodingN  s    7+weVD<eV$dZ0dZ0dV,8dZ07dV,<d\2Cd%MNDd%IJr   c                     G d dt               } |       }d|d<   | j                  |d   d       |dxx   dz  cc<   | j                  |d   d       |d= | j                  d|       d|d<   | j                  |d   d       |dxx   dz  cc<   | j                  |d   d       |d= | j                  d|       d|dd | j                  |dd d       |ddxxx dz  ccc | j                  |dd d       |dd= | j                  t        dd      |       d|ddddf<   | j                  |ddddf   d       |ddddfxx   dz  cc<   | j                  |ddddf   d       |ddddf= | j                  t        dd      t        dd      f|       d|ddd<   | j                  |ddd   d       |dddxx   dz  cc<   | j                  |ddd   d       |ddd= | j                  t        ddd      |       d|ddddddf<   | j                  |ddddddf   d       |ddddddfxx   dz  cc<   | j                  |ddddddf   d       |ddddddf= | j                  t        ddd      t        ddd      f|       d|d<   | j                  |d   d       |dxx   dz  cc<   | j                  |d   d       |d= | j                  t        |       d|d<   | j                  |d   d       |dxx   dz  cc<   | j                  |d   d       |d= | j                  t        t        f|       y )	Nc                   *    e Zd Zd Zd Zd Zd Zd Zy).TestSpecifics.test_subscripts.<locals>.str_mapc                     i | _         y r   )datar   s    r   __init__z7TestSpecifics.test_subscripts.<locals>.str_map.__init__g  s	    	r   c                 2    | j                   t        |         S r   r   r   rF   s     r   rH   z:TestSpecifics.test_subscripts.<locals>.str_map.__getitem__i  s    yyS**r   c                 4    || j                   t        |      <   y r   r   rK   s      r   rM   z:TestSpecifics.test_subscripts.<locals>.str_map.__setitem__k  s    &+		#c(#r   c                 0    | j                   t        |      = y r   r   rF   s     r   __delitem__z:TestSpecifics.test_subscripts.<locals>.str_map.__delitem__m  s    IIc#h'r   c                 0    t        |      | j                  v S r   )r   r   rF   s     r   __contains__z;TestSpecifics.test_subscripts.<locals>.str_map.__contains__o  s    3x499,,r   N)rR   rS   rT   r   rH   rM   r  r  rV   r   r   str_mapr   f  s    +,(-r   r  r   r   )r   r   r   .)..)objectr-   assertNotInsliceEllipsis)r   r  rg   s      r   test_subscriptszTestSpecifics.test_subscriptsc  s   
	-f 
	- I!1q!	!	1q!aDA$4!$	$14!$dG#!A1Q#	!A!1Q#acFq!a(!A#qs(1Q3!8a(	!A#qs(q1Q3!8a(ac1Q3hK%1+uQ{3Q7!Aa%1Qq51%	!Aa%A1Qq51%a!eHq!Q+!Aa%1Q,1Qq5!Aa%<!,	!Aa%1Q,11Qq5!Aa%<!,a!eQqUlO%1a.%1a.91=#3#	#!3#cF1%(8a(	(q8a(hK(H-q1r   c                 j    d}|dj                  d t        d      D              z  }t        |dd       y )Nzdef f(%s): pass, c              3   *   K   | ]  }d ||fz    yw)za%d:%dNrV   .0r   s     r   	<genexpr>z6TestSpecifics.test_annotation_limit.<locals>.<genexpr>  s     <Ax1Q%'<   i,  r(   r   r   ranger   r|   s     r   test_annotation_limitz#TestSpecifics.test_annotation_limit  s0    	TYY<s<<<3r   c                     G d d      }| j                  d|j                  j                  j                         | j                  d|j                  j                  j                         | j                  d|j                  j                  j                         | j                  d|j                  j                  j                         y )Nc                       e Zd Zd Zy)&TestSpecifics.test_mangling.<locals>.Ac                      d} d}dd l }dd l}y )Nr   r   r   )_A__mangled_mod__package__.module)_A__mangled__not_mangled__r  __package__s       r   rl   z(TestSpecifics.test_mangling.<locals>.A.f  s    	"#$)r   N)rR   rS   rT   rl   rV   r   r   r[   r    s    *r   r[   r  r  r  r  )r   rl   r   co_varnames)r   r[   s     r   test_manglingzTestSpecifics.test_mangling  s    	* 	* 	mQSS\\%=%=>')A)AB')A)ABmQSS\\%=%=>r   c                 b   t        j                  t        j                  t        j                  t        j                  t        j
                  d      t        j
                  d            t        j                  t        j                  dt        j                               t        j                  dt        j                               g d	      g
            gg       }| j                  t        d      5  t        t        j                  |      dd       d d d        y # 1 sw Y   y xY w)Nr   rL   r   )targetrL   r   r   ctxyr   )r#  iterifsis_async)elt
generatorsbodytype_ignoreszNamedExpr target must be a Name<file>r   )astModuleExprListComp	NamedExprConstantcomprehensionNameStoreLoadassertRaisesRegexrd   r   fix_missing_locationsr   re   s     r   test_compile_invalid_namedexprz,TestSpecifics.test_compile_invalid_namedexpr  s    JJ,,MM#&<<a#8"%,,Q"7
  --'*xx3CIIK'H%(XX#((*%E$&)*	$$ '
, ##I/PQ 	DC--a0(FC	D 	D 	Ds   ;!D%%D.c                    t         }|j                         j                  d      r|d d }t        |d      5 }|j	                         }d d d        ddgddgd	d
gddg|gg}|D ]  \  }}t        |d|z  d      }t        |d|z  dt        j                        }| j                  t        |      t        j                  k(         t        |d|z  d      }| j                  ||       | j                  |j                  d|z          t        dddt        j                        }| j                  t        t
        |dd       | j                  t        t
        t        j                         dd       t        j                         }t        j                          g|_        | j                  t        t
        |dd       y # 1 sw Y   txY w)N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)r9   z<ast>r2   )__file__lowerendswithopenreadr   _astPyCF_ONLY_AST
assertTruetyper1  r-   co_filenamer   rd   IfBoolOpr-  )	r   fnamerl   	fcontentssample_coders   co1r0  co2s	            r   test_compile_astzTestSpecifics.test_compile_ast  s   ;;=!!%(#2JE%'* 	!aI	! !45DE=>I
 ' 	=KE4$v6C$vt7I7IJCOODI45#uu}f5CS#&S__eem<	= j*fd6H6HI)Wc7FC 	)Wdggi&I kkmKKM?)Wc7FC;	! 	!s   F;;Gc                 
   t        j                  t        j                  t        j                  t        j                  dt        j
                               t        j                  d      t        j                               g t        j                  dt        j
                                     gg       }| j                  t        d	      5  t        t        j                  |      d
d       d d d        y # 1 sw Y   y xY w)Nr   r$  r   r"  )rL   r	  r%  Callable)nametype_paramsrL   r,  zTypeAlias with non-Name namer/  r   )r0  r1  	TypeAlias	Subscriptr7  r9  r5  r8  r:  rd   r   r;  r<  s     r   test_compile_invalid_typealiasz,TestSpecifics.test_compile_invalid_typealias  s    JJ!hh%SXXZ@!ll5IIK
 !#((jchhjA
 
 ##I/MN 	DC--a0(FC	D 	D 	Ds   !C99Dc                 r    dfd} |        |        |        |       i}| j                  |ddd       y )Nr   c                       dz    S Nr   rV   r   s   r   rl   z3TestSpecifics.test_dict_evaluation_order.<locals>.f  s    FAHr   r      )r   r   r   )r   rl   rg   r   s      @r   test_dict_evaluation_orderz(TestSpecifics.test_dict_evaluation_order  s9    	
 S!#qsAC aL)r   c                 T   dD ]+  }t        d|d      }| j                  |j                  d       - t        d      t	        d      fD ]-  }| j                  t              5  t        d|d       d d d        / | j                  t        t         dt        d      d       y # 1 sw Y   `xY w)N)file.py   file.pypassr   ra  rb  )r   r-   rJ  	bytearray
memoryviewr   rd   rP   )r   r5   rs   s      r   test_compile_filenamez#TestSpecifics.test_compile_filename  s    - 	:H68V4DT--y9	: "*-z*/EE 	2H""9- 2&12 2	2 	)Wfd:6FO2 2s   BB'	c                     d}t        |dd      }|j                  D ]C  }t        |t        j                        s| j                  |j                  |j                         E y )Nzdef f(): pass
def g(): passmyfiler   )r   r   
isinstancetypesCodeTypeassertIsrJ  )r   r}   r   objs       r   test_same_filename_usedz%TestSpecifics.test_same_filename_used$  sL    .Ax(;; 	>C#u~~.cooq}}=	>r   c                    | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d	       | j                  d
       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y )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   s    r   test_single_statementz#TestSpecifics.test_single_statement,  s    G$I&I&K(M*1223F#-./034,-<=/09:r   c                 6   | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d	       y )
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   s    r   test_bad_single_statementz'TestSpecifics.test_bad_single_statement=  s      (  1  !23  0  ,  !67  !9:  !;<  !FGr   c                 f   d}t        j                         5 }t        j                  j	                  |d      }t        |d      5 }|j                  |       d d d        t        j                  |      d   }d d d        | j                  dj                         y # 1 sw Y   FxY w# 1 sw Y   2xY w)Ns   0000 
00000000000
 

bad.pywbr   %   source code cannot contain null bytestempfileTemporaryDirectoryospathr   rD  writer   run_python_until_endr   errr   srctmpdr   fpress         r   "test_particularly_evil_undecodablez0TestSpecifics.test_particularly_evil_undecodableH  s    4((* 	<ddH-Bb$ 244R8;C		<
 	>H 	< 	<#   -B'B B'B$	 B''B0c                 f   d}t        j                         5 }t        j                  j	                  |d      }t        |d      5 }|j                  |       d d d        t        j                  |      d   }d d d        | j                  dj                         y # 1 sw Y   FxY w# 1 sw Y   2xY w)Ns   # 
#
rt  ru  r   rv  rw  r  s         r   $test_yet_more_evil_still_undecodablez2TestSpecifics.test_yet_more_evil_still_undecodableR  s    ((* 	<ddH-Bb$ 244R8;C		<
 	>H 	< 	<r  c                      t         dz   t         dz  t        t         dz        d
 fd	} |dd        |dd        |dd        |dd	       y )Nr   d   rj   c                     | |
z  z   }t        |d|       fD ]J  }| ||z  z   }dj                  | ||      }	j                  t        |      5  t        |d|       d d d        L y # 1 sw Y   WxY w)Nr   zCompiling ({!r} + {!r} * {}))msg)r   formatr   RecursionError)prefixrepeatedmode	expect_okdepthbrokendetailscrash_depth
fail_depthr   success_depths          r   check_limitz@TestSpecifics.test_compiler_recursion_limit.<locals>.check_limitf  s    M!99IIx.$k2 4(U"228??"He5&&~7&C 4FHd34 4	44 4s   A))A2	rC   z()z.bz[0]z*a)r   )r   rn   )r   r  r  r  r  s   ` @@@r   test_compiler_recursion_limitz+TestSpecifics.test_compiler_recursion_limit\  s]     '*
'#--34	4 	4 	CCCCr   c                    | j                  t        d      5  t        ddd       d d d        | j                  t        d      5  t        t        d      dd       d d d        t        t        d      dd dd      }| j	                  t        |      d       t        t        d	      dd dd      }| j	                  t        |      d       t        t        d
      dd dd      }| j	                  t        |      d       | j	                  t        t        d	      dd       d       t               }t        t        d      dd |       | j	                  |d   d       y # 1 sw Y   :xY w# 1 sw Y   xY w)Nzcannot contain nullz123 <dummy>r2   s   123 r   r      s   1234s   $23$s   ax = 123r   rD   )r:  r   r   re  r-   r2   r_   r   )r   rs   	namespaces      r   test_null_terminatedz"TestSpecifics.test_null_terminatedx  sK    ##K1FG 	2Iy&1	2##K1FG 	?Jz*Iv>	?z*-a3YGdR(z'*1R0)VDdR(z'*1R0)VDdR( 	j1!B78"=F	Z$Qr*I63,	2 	2	? 	?s   EE*E'*E4c                     |j                   j                  D ]  }t        |      t        |      k(  s y  | j                  d|d|j                   j                         y )Nzunable to find constant z in )r   r   reprrb   )r   funcexpectedconsts       r   check_constantzTestSpecifics.check_constant  sP    ]],, 	=EE{d8n,	= II!4==#:#:< =r   c                      fd} |d         |d        |d        |d        |d       d d }} j                  |j                  j                  |j                  j                          j                  |t                j                  t         |             t        t                     d d }}d	 } j                  |j                  j                  d
   |j                  j                  d
   d           j                  t        t        |j                  j                  d
               |j                  j                  d
          d d }} j                  |j                  j                  |j                  j                          j                  |t        dh              j                   |d             y )Nc                 0   i }d| d| }t        ||       |d   }|d   }j                  |j                  j                  |j                  j                         j	                  ||        j                  t         |             t        |              y Nzf1, f2 = lambda: z
, lambda: r   r   )r   rl  r   r   r  r-   r  )r  nsrs   r   r   r   s        r   check_same_constantz?TestSpecifics.test_merge_constants.<locals>.check_same_constant  sy    B8=uEDrNDBDBMM"++//1F1FGE*T"$Ze5r   r           s   abcabcc                       y)N.rV   rV   r   r   r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>  r   r   c                       y)N
not a namerV   rV   r   r   r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>  r   r   c                       y)Nr  rV   rV   r   r   r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>  r   r   c                 
    | dv S )N>   r  rV   r   s    r   r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>  s    q-- r   r   c                 
    | dv S N>   r   rV   r   s    r   r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>  
    18 r   c                 
    | dv S r  rV   r   s    r   r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>  s
    qCx r   )rl  r   r   r  r
  r-   r  nextr'  	frozensetrH  )r   r  r   r   f3s   `    r   test_merge_constantsz"TestSpecifics.test_merge_constants  s[   
	6 	D!AC F#E" kBbkk++R[[-B-BCB)bdT(^4 &'>B-bkk++A.kk++A.q1	3d4 5 5a 89:kk++A.	0
 $%7Bbkk++R[[-B-BCB	1#/1r   c                     d }d }| j                  |j                  j                  |j                  j                         y )Nc                 .    | j                   j                  S r   )r&  rX   r   s    r   r   z5TestSpecifics.test_merge_code_attrs.<locals>.<lambda>      qssuu r   c                 .    | j                   j                  S r   )r   r   rC   s    r   r   z5TestSpecifics.test_merge_code_attrs.<locals>.<lambda>  r  r   )rl  r   co_linetable)r   r   r   s      r   test_merge_code_attrsz#TestSpecifics.test_merge_code_attrs  s0     bkk..0H0HIr   c                 n    d }| j                  |j                  j                  |j                  df       y )Nc                       	 y)	docstringusedrV   rV   r   r   rl   z2TestSpecifics.test_remove_unused_consts.<locals>.f  s    r   r  r-   r   r   rU   r   rl   s     r   test_remove_unused_constsz'TestSpecifics.test_remove_unused_consts  s/    	  	--))V,	.r   c                 V    d }| j                  |j                  j                  d       y )Nc                       	 yNr  rV   rV   r   r   rl   z?TestSpecifics.test_remove_unused_consts_no_docstring.<locals>.f  s    r   r  )r-   r   r   r  s     r   &test_remove_unused_consts_no_docstringz4TestSpecifics.test_remove_unused_consts_no_docstring  s&    	  	--'	)r   c                 ^   d}dg}|j                  d       |j                  d       t        |      D ],  }|j                  d| d       |j                  d| d       . |j                  d       d	j                  |      }i }t        t	        |d
d      |       t        ||       |d   }t        g dt        |      D cg c]  }d| 	 c}z         }| j                  |j                  j                  |       d	j                  |dd        }| j                  | |              y c c}w )Ni  z	def f():
z	s = ''
z	for i in range(1):
z		if True: s += 'tz'
z		if False: s += 'fz
	return s
r"   ra  r   rl   )Nr"   r   tr   )
appendr  r   r2   r   r   tupler-   r   r   )r   Nrs   r   rf   rl   r  s          r   'test_remove_unused_consts_extended_argsz5TestSpecifics.test_remove_unused_consts_extended_args  s   ~L!,-q 	8AKK.qc56KK/s#67	8 	N#wwt}WT9f-q1T1cF58)DaAaS')DDE--x8778AB<(13' *Es   D*
c                 n    d }| j                  |j                  j                  |j                  df       y )Nc                       y)r  r   rV   rV   r   r   r   z0TestSpecifics.test_strip_unused_None.<locals>.f1  s    r   r   r  )r   r   s     r   test_strip_unused_Nonez$TestSpecifics.test_strip_unused_None  s,    	 	..R0@Ar   c                     d }| j                  dt        t        j                  |            d   j                         y)z9Regression test for issue35193 when run under clang msan.c                       y)Nr   )RuntimeErrorrV   r   r   unused_code_at_endzcTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_bounds.<locals>.unused_code_at_end  s    r   RETURN_CONSTr   N)r-   rP   disget_instructionsopname)r   r  s     r   9test_peephole_opt_unreachable_code_array_access_in_boundszGTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_bounds  s:    	. 	%%&89:2>EE	Gr   c                      fd} |dd        |dd        |dd        |dd        |d	d
       d d }} j                  |j                  |j                          j                  |d        j                  |d        j                  t	         |             t	        d              j                  t	         |             t	        d             d d }} j                  |j                  |j                          j                  |t        dh              j                  |t        dh              j                   |d              j                   |d             y )Nc                    i }t        d| d||       |d   }|d   }j                  |j                  |j                         j                  |j                  |j                         j	                  ||        j	                  ||       j                  t         |             t        |              j                  t         |             t        |             y r  )r   assertIsNotr   r   r  r-   r  )const1const2r  r   r   r   s        r   check_different_constantszJTestSpecifics.test_dont_merge_constants.<locals>.check_different_constants  s    BffErJDBDBR[["++6R[[9F+F+T"$Zf6T"$Zf6r   r   r  g       )r   )r  rC      ar  )r  c                       y)Nr   rV   rV   r   r   r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>.  r   r   c                       y)N              rV   rV   r   r   r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>.  r   r   r   r  c                 
    | dv S r  rV   r   s    r   r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>7  r  r   c                 
    | dv S )N>   r  rV   r   s    r   r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>7  s
    qEz r   )r  r   r  r-   r  r  rH  )r   r  r   r   s   `   r   test_dont_merge_constantsz'TestSpecifics.test_dont_merge_constants  s$   
	7 	"!S)!$-!$/!#t,!&'2 Bbkk2B&B&bdT%[1bdT%[1 $%9Bbkk2B	1#/B	3% 0113 r   c                 0    t        dt        d      d       y )N42test_compile_pathliker   )r   r   r   s    r   test_path_like_objectsz$TestSpecifics.test_path_like_objects>  s    h67Br   cpuc                 $    t        ddz  dd       y )Nzif a: b
i@ r  r   r   r   s    r   test_stack_overflowz!TestSpecifics.test_stack_overflowB  s     	f$i8r   c                 $   d }d }d }d }||||g}|D ]y  }t        t        j                  |            }| j                  t	        |      d       | j                  d|d   j                         | j                  d |d   j                         { y )Nc                       y r   rV   rV   r   r   unused_block_ifzPTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_ifL  s    r   c                       y r   rV   rV   r   r   unused_block_whilezSTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_whileP  s    r   c                       	 y r   rV   rV   r   r   unused_block_if_elsezUTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_if_elseT  s    r   c                       	 y r   rV   rV   r   r   unused_block_while_elsezXTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_while_elseZ  s    r   r   r  r   )rP   r  r  assertLessEquallenr-   r  argval)r   r  r  r  r  funcsr  opcodess           r   )test_dead_blocks_do_not_generate_bytecodez7TestSpecifics.test_dead_blocks_do_not_generate_bytecodeJ  s    				 !"4%'>@  	7D3//56G  Wq1^WR[-?-?@T72;#5#56		7r   c                    d }d }||g}|D ]y  }t        t        j                  |            }| j                  dt	        |             | j                  d|d   j
                         | j                  d |d   j                         { y )Nc                       y r   rV   rV   r   r   break_in_whilez;TestSpecifics.test_false_while_loop.<locals>.break_in_whilej      r   c                       y r   rV   rV   r   r   continue_in_whilez>TestSpecifics.test_false_while_loop.<locals>.continue_in_whilen  r  r   r   r  r   )rP   r  r  r-   r  r  r  )r   r  r  r  r  r  s         r   test_false_while_loopz#TestSpecifics.test_false_while_loopi  s    		  !23  	6D3//56GQG-^WQZ->->?T71:#4#45		6r   c                 r   d }d }d }d }||||g}|D ]  }| j                  |      5  t        t        j                  |            }| j	                  t        |      d       | j                  d|d   j                         | j                  d	|d
   j                         d d d         y # 1 sw Y   xY w)Nc                     | S r   rV   r   s    r   and_truez;TestSpecifics.test_consts_in_conditionals.<locals>.and_true|      r   c                     dS )NFrV   r   s    r   	and_falsez<TestSpecifics.test_consts_in_conditionals.<locals>.and_false  s    r   c                     dS )NTrV   r   s    r   or_truez:TestSpecifics.test_consts_in_conditionals.<locals>.or_true  s    r   c                     | S r   rV   r   s    r   or_falsez;TestSpecifics.test_consts_in_conditionals.<locals>.or_false  r  r   r  r   LOAD_r   RETURN_VALUEr   )	subTestrP   r  r  r  r  r   r  r-   )r   r
  r  r  r  r  r  r  s           r   test_consts_in_conditionalsz)TestSpecifics.test_consts_in_conditionals{  s    				 9gx8  	ED4( Es33D9:$$S\15gwr{'9'9:  1C1CD	E E	EE Es   A8B--B6	c                    g d}|D ]  }i }t        t        j                  |      |       |d   }| j                  |j                        5  t        t        j                  |            }|D cg c]  }|j                   }}| j                  d|       | j                  d|       | j                  d|       d d d         y c c}w # 1 sw Y   xY w)N)z[            import os
            def foo():
                return os.uname()
            z}            import os as operating_system
            def foo():
                return operating_system.uname()
            zh            from os import path
            def foo(x):
                return path.join(x)
            zv            from os import path as os_path
            def foo(x):
                return os_path.join(x)
            r   r  LOAD_METHOD	LOAD_ATTRCALL)r   ro   rp   r  rR   rP   r  r  r  r  r   )r   sourcesr   r  r  r  opcodeinstructionss           r   test_imported_load_methodz'TestSpecifics.test_imported_load_method  s    
,  		4FI()4U#D4==1 4s33D9:<CD&DD  =k<8fl34 4			4  E4 4s   #C
/C8C
C

C	c                     d }|j                   j                  dz   }||j                   j                         D cg c]  \  }}}|
 c}}vsJ y c c}}w )Nc                      t                y r   )printrV   r   r   callz6TestSpecifics.test_lineno_procedure_call.<locals>.call  s    r   r   )r   r   r   )r   r"  line1r   r   s        r   test_lineno_procedure_callz(TestSpecifics.test_lineno_procedure_call  sL    	 ,,q0dmm6L6L6NOlq!TTOOOOOs   Ac                 F  
 d

fd}
fd}
fd}
fd}||||g}g d}d fd}t        ||d      D ][  \  }}	| j                  |	      5   ||       | j                  j                  j                  j
                  z
  |	       d d d        ] y # 1 sw Y   hxY w)
NTc                      |         ry y r   rV   r   TRUEs    r   if1z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if1  s    C r   c                      |         ry y r   rV   r'  s    r   if2z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if2  s    Cr   c                      |         ry y r   rV   r'  s    r   if3z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if3  s    Cr   c                      |         sy y r   rV   r'  s    r   if4z<TestSpecifics.test_lineno_after_implicit_return.<locals>.if4  s    C r   )r   r   r   r   c                  0    t        j                  d       y r\  )r   	_getframe)frames   r   save_caller_framezJTestSpecifics.test_lineno_after_implicit_return.<locals>.save_caller_frame  s    MM!$Er   strictr  )zipr  r-   f_linenof_coder   )r   r)  r+  r-  r/  r  	lastlinesr3  r  lastliner(  r2  s             @@r   !test_lineno_after_implicit_returnz/TestSpecifics.test_lineno_after_implicit_return  s    				 sC%!		% "%4@ 	WND(4( W&'  0K0K!KXVW W	WW Ws   <BB 	c                    d }d }||fD ]  }| j                  |      5  ||u r|j                  
	 d d d        0|j                  }|j                         \  \  }}}| j	                  |d       | j	                  |t        |j                               | j	                  ||j                         d d d         y # 1 sw Y   xY w)Nc                       y)z
doc stringNrV   rV   r   r   no_code1z9TestSpecifics.test_lineno_after_no_code.<locals>.no_code1  r   r   c                       y r   rV   rV   r   r   no_code2z9TestSpecifics.test_lineno_after_no_code.<locals>.no_code2  r   r   r  r   )r  rU   r   r   r-   r  co_coder   )r   r>  r@  r  rs   startendr   s           r   test_lineno_after_no_codez'TestSpecifics.test_lineno_after_no_code  s    		 x( 	<D4( <8#(8(8(@< < }}'+}}$#%d  *  c$,,&78  t':':;< <	<< <s   B;A5B;;C	c                     d}g }|j                         D ]/  \  }}}|
||k7  s|j                  ||j                  z
         |}1 |S )Nr   )r   r  r   )r   rs   	last_liner  r   r   s         r   get_code_lineszTestSpecifics.get_code_lines  sW    	--/ 	!JAq$DI$5

4$"5"556 		! 
r   c                 (   d }g d}d }g d}d }g d}d }g d}||||g}	||||g}
t        |	|
d	
      D ]M  \  }}| j                  |      5  | j                  |j                        }| j	                  ||       d d d        O y # 1 sw Y   ZxY w)Nc                  "    t         j                  S r   )orC   rV   r   r   	load_attrz6TestSpecifics.test_lineno_attribute.<locals>.load_attr  s    r   )r   r   r   r   c                  ,    t         j                  d      S Nr   )rJ  re   rV   r   r   load_methodz8TestSpecifics.test_lineno_attribute.<locals>.load_method   s    r   )r   r   r   r^  r   r   c                  "    t         t        _        y r   )vrJ  rC   rV   r   r   
store_attrz7TestSpecifics.test_lineno_attribute.<locals>.store_attr	  s    
  r   )r   rm   r   r   c                  >    t         xj                  t        z  c_        y r   )rJ  rC   rP  rV   r   r   aug_store_attrz;TestSpecifics.test_lineno_attribute.<locals>.aug_store_attr  s     	r   )r   r   r   rm   r   r   Tr4  r  )r6  r  rG  r   r-   )r   rK  load_attr_linesrN  load_method_linesrQ  store_attr_linesrS  aug_store_attr_linesr  
func_linesr  r   
code_liness                 r   test_lineno_attributez#TestSpecifics.test_lineno_attribute  s    	
 )	 1	 *	  4[*nE&(9!#79
 uj> 	4KD%4( 4!00?
  
34 4	44 4s   .BB	c                     d }g d}|j                   j                  d   }| j                  |      }| j                  ||       y )Nc                      d t         D        S )Nc              3       K   | ]  }d   yw)r   NrV   r  r   s     r   r  zOTestSpecifics.test_line_number_genexp.<locals>.return_genexp.<locals>.<genexpr>'  s        s   )r&  rV   r   r   return_genexpz<TestSpecifics.test_line_number_genexp.<locals>.return_genexp&  s     	 r   )r   r   r   r   )r   r   rG  r-   )r   r_  genexp_linesgenexp_coderY  s        r   test_line_number_genexpz%TestSpecifics.test_line_number_genexp$  sD    	 !#,,66q9((5
z2r   c                 l    d }g d}| j                  |j                        }| j                  ||       y )Nc                 6   K   | 2 3 d {   }t          7 6 y wr   )r-  )aseqr   s     r   testzLTestSpecifics.test_line_number_implicit_return_after_async_for.<locals>.test4  s        a4s   )r   r   r   r   )rG  r   r-   )r   rf  expected_linesrY  s       r   0test_line_number_implicit_return_after_async_forz>TestSpecifics.test_line_number_implicit_return_after_async_for2  s2    	 &((7
4r   c                     d }t        d t        j                  |j                        D              }| j	                  t        |      dkD         | j	                  t        d |D                     y )Nc                  (    t         D ]	  } t        s
 y r   )r   r&  r]  s    r   rl   z5TestSpecifics.test_lineno_of_backward_jump.<locals>.f>  s     r   c              3   f   K   | ])  }|j                   d k(  r|j                  j                   + yw)JUMP_BACKWARDN)r  	positionsr   )r  insts     r   r  z=TestSpecifics.test_lineno_of_backward_jump.<locals>.<genexpr>C  s.      :++8 ~~,, :s   /1r   c              3   $   K   | ]  }|d u 
 y wr   rV   )r  r   s     r   r  z=TestSpecifics.test_lineno_of_backward_jump.<locals>.<genexpr>H  s     ;aATM;s   )rP   r  r  r   rH  r  all)r   rl   linenoss      r   test_lineno_of_backward_jumpz*TestSpecifics.test_lineno_of_backward_jump<  s]    	
  :#&#7#7

#C: : 	Gq();7;;<r   c                     d}ddj                  d t        |      D              z   dz   }| j                  t        t	        |            |       y )Ni   {,c              3   *   K   | ]  }| d |   yw):NrV   r^  s     r   r  z6TestSpecifics.test_big_dict_literal.<locals>.<genexpr>Q  s     !GQCq*!Gr  })r   r  r-   r  r2   )r   	dict_sizethe_dicts      r   test_big_dict_literalz#TestSpecifics.test_big_dict_literalJ  sE     	!GeI6F!GGG#MT(^,i8r   c                    d }d}d}t        t        j                  |d            D ]b  \  }}|j                  dk(  r| j	                  |j
                  d       2|j                  |v sA| j	                  |j
                  |dz   |z         d y )	Nc                  &    d} 	 | dkD  r| dz  } ny d} )Nr   r   r   rV   )vals    r   if_else_breakzITestSpecifics.test_redundant_jump_in_if_else_break.<locals>.if_else_breakX  s'    C71HC r   r   )POP_JUMP_IF_FALSEPOP_JUMP_IF_TRUEJUMP_ABSOLUTEJUMP_FORWARDTshow_cachesr  r   r   )	enumerater  Bytecoder  r   r   )r   r  
INSTR_SIZEHANDLED_JUMPSr   instrs         r   $test_redundant_jump_in_if_else_breakz2TestSpecifics.test_redundant_jump_in_if_else_breakT  s    	 

 %LLD9
 	FKD% ||~-##EIIq1.##EIIq*/DE	Fr   c                 v    d }t        j                  |      D ]  }| j                  |j                  d         y )Nc                 >    | |cxk  r|k  sn 	 | |cxk  r|k  sy  y r   rV   )rC   r   r   s      r   while_not_chainedz@TestSpecifics.test_no_wraparound_jump.<locals>.while_not_chainedt  s    1yqy 1yqyr   EXTENDED_ARG)r  r  r   r  )r   r  r  s      r   test_no_wraparound_jumpz%TestSpecifics.test_no_wraparound_jumpq  s6    	 \\"34 	>En=	>r   c                       fd}d }d }d }d } ||dd        ||dd	        ||d
d        ||dd	        ||dd        ||dd	        ||dd        ||d
d        ||dd	       y )Nc                     d}t        j                  |       D ]  }|j                  |k(  s|dz  } j                  ||       y )Nr   r   )r  r  r  r-   )r  opr  actualr  r   s        r   check_op_countzBTestSpecifics.test_uses_slice_instructions.<locals>.check_op_count~  sG    Fd+  <<2%aKF  VX.r   c                  p    t         t        t         t         t        d  z   t         d t         z   t         d d  z   S r   )r   rC   r   rV   r   r   loadz8TestSpecifics.test_uses_slice_instructions.<locals>.load  s,    Qq6AqrF?QrU*QqT11r   c                      t         t        t        t         t         t        t        d  t         t        d t         t         t        d d  y r   )r&  r   rC   r   rV   r   r   storez9TestSpecifics.test_uses_slice_instructions.<locals>.store  s,    AaFAqrFAbqEAaDr   c                  2    t         t        t        t           S r   )r   rC   r   r   rV   r   r   
long_slicez>TestSpecifics.test_uses_slice_instructions.<locals>.long_slice  s    QqU8Or   c                  @    t         t        t        xxx t        z  ccc y r   )r   rC   r   r&  rV   r   r   augz7TestSpecifics.test_uses_slice_instructions.<locals>.aug  s    aFaKFr   BINARY_SLICEr^  BUILD_SLICEr   STORE_SLICEr   rV   )r   r  r  r  r  r  s   `     r   test_uses_slice_instructionsz*TestSpecifics.test_uses_slice_instructions{  s    	/	2			 	t^Q/t]A.umQ/umQ/z=!4z>15sNA.sM1-sM1-r   c                    dD ]  \  }}d| d| d}ddddt        |      fgz  }d| d| d	d
| dfD ]  }t        |dd      }t        j                  |      D cg c])  }|j                  j                  |      r|j                  + }}| j                  |      5  | j                  ||       d d d          y c c}w # 1 sw Y   xY w)N))COMPARE_<)r  z<=)r  >)r  z>=)CONTAINS_OPin)r  znot in)IS_OPis)r  zis notza z b z cr   r   z\
zif \
z: xzx if \
z else yr   r   )	r  r   r  r  r  
startswithrm  r  r-   )	r   opname_prefixr  exprexpected_positionsr   rs   instructionactual_positionss	            r   test_compare_positionsz$TestSpecifics.test_compare_positions  s   	"
 	KM2 t3rd"%D!"q!QD	&:%;!;tfc2ivW4M 
K vx8 (+';';D'A$#"))44]C  ))$  $
 \\&) K$$%57IJK K
K	K $
K Ks   .B=CCc                     g d}|D ]*  }| j                  |      5  t        |dd       d d d        , y # 1 sw Y   7xY w)N)zassert (False if 1 else True)z=def f():
	if not (False if 1 else True): raise AssertionErrorz2def f():
	if not (False if 1 else True): return 12)r  r   r   )r  r   )r   exprsr  s      r   )test_if_expression_expression_empty_blockz7TestSpecifics.test_if_expression_expression_empty_block  sN    

  	2D4( 2j&12 2	22 2s   5>	c                 H    t        j                  d      }t        |dd       y )Nz
            def foo(param, lambda_exp):
                pass

            foo(param=0,
                lambda_exp=lambda:
                1)
        r   r   r{   r   s     r   "test_multi_line_lambda_as_argumentz0TestSpecifics.test_multi_line_lambda_as_argument  s#        	h'r   c                 <    d }| j                   |dd      d       y )Nc                     | |c}}|S r   rV   )r   r&  rC   s      r   rl   z0TestSpecifics.test_apply_static_swaps.<locals>.f  s    aDAqHr   r   r&  r   r  s     r   test_apply_static_swapsz%TestSpecifics.test_apply_static_swaps  s    	 	3c*r   c                 >    d }| j                   |ddd      d       y )Nc                     | ||c}}}|S r   rV   r   r&  rX   rC   r   s        r   rl   z2TestSpecifics.test_apply_static_swaps_2.<locals>.f      AGAq!Hr   r   r&  rX   r   r  s     r   test_apply_static_swaps_2z'TestSpecifics.test_apply_static_swaps_2  "    	 	3S)3/r   c                 >    d }| j                   |ddd      d       y )Nc                     | ||c}}}|S r   rV   r  s        r   rl   z2TestSpecifics.test_apply_static_swaps_3.<locals>.f  r  r   r   r&  rX   r   r  s     r   test_apply_static_swaps_3z'TestSpecifics.test_apply_static_swaps_3  r  r   c                 
    d }y )Nc                  \    t         rt        r		 t        S y y y y #  Y nxY wt         st        r r   )element	somethingrV   r   r   rl   z9TestSpecifics.test_duplicated_small_exit_block.<locals>.f  s.    i$$ i'	 is    rV   r  s     r    test_duplicated_small_exit_blockz.TestSpecifics.test_duplicated_small_exit_block  s    	r   c                 
    d }y )Nc                  6    t         r	 y d y #  Y nxY wt         rr\  )rU  rV   r   r   rl   z5TestSpecifics.test_cold_block_moved_to_end.<locals>.f  s"     	 s   rV   r  s     r   test_cold_block_moved_to_endz*TestSpecifics.test_cold_block_moved_to_end  s    	r   c                 
    d }y )Nc                     | rd | ry y rM  rV   r   s    r   rl   zMTestSpecifics.test_remove_empty_basic_block_with_jump_target_label.<locals>.f  s     r   rV   r  s     r   4test_remove_empty_basic_block_with_jump_target_labelzBTestSpecifics.test_remove_empty_basic_block_with_jump_target_label  s    	r   c                 
    d }y )Nc                  D    t         rt         y t        rt         y t         y r   )r   r   rC   rg   rV   r   r   rl   z<TestSpecifics.test_remove_redundant_nop_edge_case.<locals>.f  s    AaAar   rV   r  s     r   #test_remove_redundant_nop_edge_casez1TestSpecifics.test_remove_redundant_nop_edge_case  s    	(r   N)YrR   rS   rT   r   r   r    r#   r&   r/   r3   r7   r:   r=   rh   unittestskipIfr   is_wasirt   rv   ry   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r=  rR  rY  r_  rf  cpython_onlyrn  rp  rr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  requires_resourcer  r   r  r  r  r$  r;  rD  rG  rZ  rb  rh  rr  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  rV   r   r   r
   r
      s   .D*&Q-JLQJ-%^ X__W__&FG' H'2D8'*1B>D& {{))	9 I(-I^>%K*F2P ?D6!DFD(	*P > >;"	HII X__W__&FG H 4-(= ( (X J J 	. 	. 
) 
) ( (, B B G G&!PC Wu%9 &9 7 7<6$E. 4DP WD<"*4X35=9F:>  .  .DK2	2
(+00	(r   r
   c                   R   e Zd Zd Z	 d$dZd Zd Zd Zed        Z	 e
j                  ej                  j                  d      d        Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d  Z'e(jR                  d!        Z*d" Z+y#)%TestSourcePositionsc                 Z  	
 t        |dd      }t        |ddt        j                        }| j                  t	        |      t        j
                  k(         t               t               t               t               f\  	
 G 	
fddt        j                        } |       j                  |       |j                         D ]^  \  }}}}|dk(  r|| j                  |       || j                  |       || j                  |	       |M| j                  |
       ` ||fS )Nztest_compile.pyr   c                   (     e Zd Z fdZ xZS )LTestSourcePositions.check_positions_against_ast.<locals>.SourceOffsetVisitorc                 p   t         |   |       t        |t        j                  t        j
                  t        j                  f      sy j                  |j                         j                  |j                         j                  |j                         j                  |j                         y r   )supergeneric_visitri  r0  r  r   patternaddr   
end_lineno
col_offsetend_col_offset)r   node	__class__columnsend_columns	end_linesr   s     r   r  zZTestSourcePositions.check_positions_against_ast.<locals>.SourceOffsetVisitor.generic_visit  sr    %d+!$388S[[(IJ		$++&doo.DOO, 3 34r   )rR   rS   rT   r  __classcell__)r  r  r  r  r   s   @r   SourceOffsetVisitorr    s    5 5r   r  r   )r   rF  rG  rH  rI  r1  setr0  NodeVisitorvisitco_positionsr   )r   snippetrs   ast_treer  r   end_linecolend_colr  r  r  r   s            @@@@r   check_positions_against_astz/TestSourcePositions.check_positions_against_ast  s    w 16:7$5vt?Q?QRX$++56 25suce1K.y';	5 	5#// 	5 	##H- /3.?.?.A 	4*T8S'qy dE*#h	2c7+"g{3	4 X~r   c                 z   t        t        j                  |d      |j                         d      D ]r  \  }}	|j                  |k(  s|dz  }|r| j                  |	d   |       | j                  |	d   |       | j                  |	d   |       | j                  |	d   |        y  | j                  d| d	       y )
NTr  r4  r   r   r   r   zOpcode z not found in code)r6  r  r  r  r  r-   rb   )
r   rs   r  r   r  column
end_column
occurrencer  positions
             r   assertOpcodeSourcePositionIsz0TestSourcePositions.assertOpcodeSourcePositionIs*  s      #LL40$2C2C2Ed 
 
	OE8 ||v%a
!$$Xa[$7$$Xa[(;$$Xa[&9$$Xa[*=
	 			GF8#567r   c                 *    d}| j                  |       y )Nzx = 1)r  r   r  s     r   test_simple_assignmentz*TestSourcePositions.test_simple_assignment;  s    ((1r   c           	          ddz  }|dz  }| j                  |      \  }}| j                  |dddddd	       | j                  |dd
d
ddd	       y )Nzx = x
i'  z/while x != 0:
  x -= 1
while x != 0:
  x +=  1
	BINARY_OPi'  r      r   r   r  r  r  r  i'  	   r  r  r   r  compiled_coder   s       r    test_compiles_to_extended_op_argz4TestSourcePositions.test_compiles_to_extended_op_arg?  s|     f$ " 	  ;;GDq))-jq 	* 	2 	))-jq 	* 	2r   c                     t        j                  d      }| j                  |      \  }}| j                  |ddddd       y )NzD            f(
                1, 2, 3, 4
            )
            r  r   r   r   r   r  r  r  ro   rp   r  r  r  s       r   test_multiline_expressionz-TestSourcePositions.test_multiline_expressionS  sL    // # 
  ;;GDq))-QqQ 	* 	8r   c           	      F   t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |ddddd	d       | j                  |dddd
dd       | j                  |dddddd       | j                  |dddddd       y )Nz            if (a or
                (b and not c) or
                not (
                    d > 0)):
                x = 42
            r  r   r^  rm   r  r  r            
COMPARE_OPr     r  r  s       r   !test_multiline_boolean_expressionz5TestSourcePositions.test_multiline_boolean_expression]  s    // #   ;;GDq))-9KQqQ1 	* 	F 	))-9LQqQ1 	* 	F 	))-9LQrbQ 	* 	H 	))-QqRA 	* 	G 	))-9KQqRA 	* 	Gr   z)Assertions are disabled in optimized modec           	         t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |dddd	dd
       | j                  |dddddd       | j                  |dddddd       y )Nzt            assert (a > 0 and
                    bb > 0 and
                    ccc == 4), "error msg"
            LOAD_ASSERTION_ERRORr   r   r      r  
LOAD_CONST   r^  r  RAISE_VARARGSr  r  r  r  s       r   test_multiline_assertz)TestSourcePositions.test_multiline_assertw  s    // # 
  ;;GDq))-9OQqRA 	* 	G 	))-QrbQ 	* 	H))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	      D   t        j                  d      }| j                  |      \  }}|j                  d   }| j	                  |t
        j                         | j                  |dddddd       | j                  |dddddd       | j                  |d	dd
ddd       y )Nz            ((x,
                2*x)
                for x
                in [1,2,3] if (x > 0
                               and x < 100
                               and x != 50))
            r   YIELD_VALUEr   r   r  r  rl  r  r
      ro   rp   r  r   r   rj  rk  r  r  s       r   #test_multiline_generator_expressionz7TestSourcePositions.test_multiline_generator_expression  s    // #   ;;GDq%//2mU^^<))-QqQ1 	* 	F))-QqQ1 	* 	F))-QqRA 	* 	Gr   c           	         t        j                  d      }| j                  |      \  }}|j                  d   }| j	                  |t
        j                         | j                  |dddddd       | j                  |ddd	dd
d       y )Nz            ((x,
                2*x)
                async for x
                in [1,2,3] if (x > 0
                               and x < 100
                               and x != 50))
            r   r  r   r   r  r  r  r
  r  r  r  s       r   )test_multiline_async_generator_expressionz=TestSourcePositions.test_multiline_async_generator_expression  s    // #   ;;GDq%//2mU^^<))-QqQ1 	* 	F))-QqRA 	* 	Gr   c           	          t        j                  d      }| j                  |      \  }}| j                  |t        j
                         | j                  |dddddd       | j                  |dddddd       y )Nz            [(x,
                2*x)
                for x
                in [1,2,3] if (x > 0
                               and x < 100
                               and x != 50)]
            LIST_APPENDr   r   r  r  rl  ro   rp   r  r   rj  rk  r  r  s       r   !test_multiline_list_comprehensionz5TestSourcePositions.test_multiline_list_comprehension  s    // #   ;;GDqmU^^<))-QqQ1 	* 	F))-QqQ1 	* 	Fr   c           	      `   t        j                  d      }| j                  |      \  }}i }t        ||       |d   j                  }| j                  |t        j                         | j                  |dddddd	       | j                  |d
ddddd	       | j                  |dddddd	       y )Nz            async def f():
                [(x,
                    2*x)
                    async for x
                    in [1,2,3] if (x > 0
                                   and x < 100
                                   and x != 50)]
            rl   r  r   r   rm   rD   r   r  rl  r     r^  $   	ro   rp   r  r2   r   r   rj  rk  r  r   r  r  r   rf   s        r   'test_multiline_async_list_comprehensionz;TestSourcePositions.test_multiline_async_list_comprehension  s    // #   ;;GDq]A#mU^^<))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	          t        j                  d      }| j                  |      \  }}| j                  |t        j
                         | j                  |dddddd       | j                  |dddddd       y )Nz            {(x,
                2*x)
                for x
                in [1,2,3] if (x > 0
                               and x < 100
                               and x != 50)}
            SET_ADDr   r   r  r  rl  r   r  s       r    test_multiline_set_comprehensionz4TestSourcePositions.test_multiline_set_comprehension      // #   ;;GDqmU^^<))-QqQ1 	* 	F))-QqQ1 	* 	Fr   c           	      `   t        j                  d      }| j                  |      \  }}i }t        ||       |d   j                  }| j                  |t        j                         | j                  |dddddd	       | j                  |d
ddddd	       | j                  |dddddd	       y )Nz            async def f():
                {(x,
                    2*x)
                    async for x
                    in [1,2,3] if (x > 0
                                   and x < 100
                                   and x != 50)}
            rl   r)  r   r   rm   rD   r   r  rl  r  r#  r^  r$  r%  r&  s        r   &test_multiline_async_set_comprehensionz:TestSourcePositions.test_multiline_async_set_comprehension      // #   ;;GDq]A#mU^^<))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	          t        j                  d      }| j                  |      \  }}| j                  |t        j
                         | j                  |dddddd       | j                  |dddddd       y )Nz            {x:
                2*x
                for x
                in [1,2,3] if (x > 0
                               and x < 100
                               and x != 50)}
            MAP_ADDr   r   r#  r  rl  r   r  s       r   !test_multiline_dict_comprehensionz5TestSourcePositions.test_multiline_dict_comprehension  r+  r   c           	      `   t        j                  d      }| j                  |      \  }}i }t        ||       |d   j                  }| j                  |t        j                         | j                  |dddddd	       | j                  |d
ddddd	       | j                  |dddddd	       y )Nz            async def f():
                {x:
                    2*x
                    async for x
                    in [1,2,3] if (x > 0
                                   and x < 100
                                   and x != 50)}
            rl   r0  r   r   rm      r   r  rl  r  r#  r^  r$  r%  r&  s        r   'test_multiline_async_dict_comprehensionz;TestSourcePositions.test_multiline_async_dict_comprehension	  r.  r   c           	         t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |dddddd       | j                  |d	ddddd       | j                  |d	ddddd       y )
NzU            match x:
                case a, b:
                    pass
            MATCH_SEQUENCEr   r   r  r   r  UNPACK_SEQUENCE
STORE_NAMEr  r  s       r   test_matchcase_sequencez+TestSourcePositions.test_matchcase_sequence  s    // # 
  ;;GDq))-9IQqRA 	* 	G))-9JQqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	      F   t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |dddddd       | j                  |d	ddddd       | j                  |d	ddddd       | j                  |d	ddddd
       y )NzY            match x:
                case a, *b, c:
                    pass
            r6  r   r      r   r  	UNPACK_EXr8  r   r  r  s       r    test_matchcase_sequence_wildcardz4TestSourcePositions.test_matchcase_sequence_wildcard/  s    // # 
  ;;GDq))-9IQqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	         t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |dddddd       | j                  |d	ddddd       | j                  |d	ddddd       y )
Nzb            match x:
                case {"a" : a, "b": b}:
                    pass
            MATCH_MAPPINGr   r      r   r  
MATCH_KEYSr8  r  r  s       r   test_matchcase_mappingz*TestSourcePositions.test_matchcase_mappingA      // # 
  ;;GDq))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	         t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |dddddd       | j                  |d	ddddd       | j                  |d	ddddd       y )
Nzg            match x:
                case {"a" : a, "b": b, **c}:
                    pass
            r?  r   r      r   r  rA  r8  r  r  s       r   test_matchcase_mapping_wildcardz3TestSourcePositions.test_matchcase_mapping_wildcardQ  rC  r   c           	         t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |dddddd       | j                  |d	ddddd       | j                  |d	ddddd       y )
NzX            match x:
                case C(a, b):
                    pass
            MATCH_CLASSr   r   r  r   r  r7  r8  r  r  s       r   test_matchcase_classz(TestSourcePositions.test_matchcase_classa  s    // # 
  ;;GDq))-QqRA 	* 	G))-9JQqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c           	          t        j                  d      }| j                  |      \  }}| j                  |dddddd       | j                  |ddddd	d       y )
Nz\            match x:
                case C(1) | C(2):
                    pass
            rH  r   r   r  r   r  r     r  r  s       r   test_matchcase_orz%TestSourcePositions.test_matchcase_orq  sr    // # 
  ;;GDq))-QqRA 	* 	G))-QrbQ 	* 	Hr   c                 j    d}d| d}| j                  |      \  }}| j                  |ddddd       y )	N  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazg('z')r  r   r   i  r  r  )r   long_stringr  r  r   s        r   test_very_long_line_end_offsetz2TestSourcePositions.test_very_long_line_end_offset}  sL     !}B';;GDq))-QqT 	* 	;r   c           	         d}| j                  |      \  }}| j                  |ddddd       | j                  |dddddd	       | j                  |ddddd
d	       | j                  |dddddd	       | j                  |dddddd	       y )Nza - b @ (c * x['key'] + 23)BINARY_SUBSCRr   r     r  r  r   r  r@  r   r^     r   r   r  r  s       r   #test_complex_single_line_expressionz7TestSourcePositions.test_complex_single_line_expression  s    /;;GDq))-Qrb 	* 	:))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	G))-QqRA 	* 	Gr   c                    t        j                  d      }|j                  d   }t        j                  t        j                  t        j
                  t        j                  dt        j                               dt        j                               g g             }t        j                  ||       t        j                  |       ||j                  d<   t        |dd       y )Nzassert (
42
)r   r   eggsr   r   )r0  parser-  r2  Call	Attributer7  r9  copy_locationr;  r   )r   treeold_nodenew_nodes       r   .test_multiline_assert_rewritten_as_method_callzBTestSourcePositions.test_multiline_assert_rewritten_as_method_call  s     yy*+99Q<88HHHHVSXXZ0HHJ
 

 	(H-!!(+		!h'r   c           
         d}dD ]  }| j                  |      5  i }t        j                  |j                  |            }t	        j
                         5  t	        j                  dt               t        ||       d d d        |d   j                  }| j                  |ddddd	       d d d         y # 1 sw Y   :xY w# 1 sw Y   xY w)
Nz
        import abc, dis
        import ast as art

        abc = None
        dix = dis
        ast = art

        def f():
        {}
        )
z    abc.a()z    art.a()z    ast.a()z    dis.a()z    dix.a()z    abc[...]()z    art()()z   (ast or ...)()z
   [dis]()z   (dix + ...)()ignorerl   LOAD_GLOBALrk   r^  r#  r  )r  ro   rp   r  warningscatch_warningssimplefilterSyntaxWarningr   r   r  )r   source_templater-  r  r   rs   s         r   $test_push_null_load_global_positionsz8TestSourcePositions.test_push_null_load_global_positions  s    

 	D d# 	!)?)?)EF,,. ,))(MB+, !~..11!  2  	, , s#   ;C 'B4;.C 4B=9C  C		c                 ~    d}t        |dd      }| j                  |ddddd       | j                  |d	dddd       y )
Nz/(
 lhs  
   .    
     rhs      
       ) += 42r   r   r  r^  rm   r  r  
STORE_ATTRr   r  r   r   rs   s      r   test_attribute_augassignz,TestSourcePositions.test_attribute_augassign  sW    Fvx0))+A! 	* 	
 	)),Q1 	* 	
r   c                 P    d}t        |dd      }| j                  |ddddd       y )	Nz-del (
 lhs  
   .    
     rhs      
       )r   r   DELETE_ATTRr^  rm   r  r  rk  rl  s      r   test_attribute_delz&TestSourcePositions.test_attribute_del  s5    Dvx0))-a!A! 	* 	
r   c                 P    d}t        |dd      }| j                  |ddddd       y )	Nz)(
 lhs  
   .    
     rhs      
       )r   r   r  r^  rm   r  r  rk  rl  s      r   test_attribute_loadz'TestSourcePositions.test_attribute_load  s5    @vx0))+A! 	* 	
r   c                 P    d}t        |dd      }| j                  |ddddd       y )	Nz.(
 lhs  
   .    
     rhs      
       ) = 42r   r   rj  r^  rm   r  r  rk  rl  s      r   test_attribute_storez(TestSourcePositions.test_attribute_store  s5    Evx0)),Q1 	* 	
r   c                 ~    d}t        |dd      }| j                  |ddddd       | j                  |d	dddd
       y )Nz+(
 lhs  
   .    
     rhs      
       )()r   r   r  r^  rm   r  r  r  rk   rk  rl  s      r   test_method_callz$TestSourcePositions.test_method_call  sW    Bvx0))+A! 	* 	
 	))&q1Q2 	* 	
r   c                    d }|j                   j                         D ]a  \  }}}}| j                  |       | j                  |       | j                  |       | j                  |       | j                  ||f||f       c y )Nc                      t         j                   t         j                          t               j                  d      j                  d       y rM  )barbazfiles
setdefaultrV   r   r   rl   zHTestSourcePositions.test_weird_attribute_position_regressions.<locals>.f  s7     	
Gjr   )r   r  assertIsNotNoner  )r   rl   r   r  r  r  s         r   )test_weird_attribute_position_regressionsz=TestSourcePositions.test_weird_attribute_position_regressions  s    
	 34**2I2I2K 	I.D(FJ  &  *  (  ,  $(J1GH	Ir   c           	         dD ]4  }| j                  |      5  t        | d| dd      }| j                  t        |j                        d       | j                  |j                  d   t        j                         | j                  |j                  d   t        j                         | j                  |j                  d   |j                  d          | j                  t        |j                  d   j                               t        |j                  d   j                                      d d d        7 y # 1 sw Y   CxY w)N)z	lambda: az(a for b in c)r  r   r2   r   r   r   )r  r   r-   r  r   r   rj  rk  r   rP   r  rl  s      r    test_column_offset_deduplicationz4TestSourcePositions.test_column_offset_deduplication  s   
 	F f% 	&F84hG  T^^!4a8%%dnnQ&7H%%dnnQ&7H##DNN1$5t~~a7HI##*779:*779:	 				 	s   DD<<E	c                     d}t        |dd      j                  d   j                  d   }| j                  |ddddd	
       y )Nz5class C:
  def __init__(self):
    super().__init__()r   r   r   r   rb  r   r^  r   r  )r   r   r  rl  s      r   test_load_super_attrz(TestSourcePositions.test_load_super_attr!  sK    Jvx0::1=GGJ))-a!A! 	* 	
r   Nr   ),rR   rS   rT   r  r  r  r  r  r   r  r  r  r   flagsoptimizer  r  r  r!  r'  r*  r-  r1  r4  r9  r=  rB  rF  rI  rL  rP  rU  r_  rh  rm  rp  rr  rt  rv  r~  r   r  r  r  rV   r   r   r  r    s   
$N <=8"22(8 G G2 X__SYY'')TUG VG"G&G"F G,F G,F G,G G$G G G 
H;G(*&P




I&  "
r   r  c                   |    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestExpressionStackSizer  c                     t        |t              rt        |dd      }t        j                  t        j
                  t        |j                                    }| j                  |j                  |       y )N<foo>r   )
ri  r   r   mathceillogr  rA  r  co_stacksize)r   rs   max_sizes      r   check_stack_sizez(TestExpressionStackSize.check_stack_size/  sR     dC 4(3D99TXXc$,,&789T..9r   c                 F    | j                  d| j                  z  dz          y )Nzx and r   r  r  r   s    r   test_andz TestExpressionStackSize.test_and7  s    h/#56r   c                 F    | j                  d| j                  z  dz          y )Nzx or r   r  r   s    r   test_orzTestExpressionStackSize.test_or:  s    g.45r   c                 F    | j                  d| j                  z  dz          y )Nzx and x or r   r  r   s    r   test_and_orz#TestExpressionStackSize.test_and_or=  s    mdff4s:;r   c                 F    | j                  d| j                  z  dz          y )Nzx < r   r  r   s    r   test_chained_comparisonz/TestExpressionStackSize.test_chained_comparison@      ftvvo34r   c                 F    | j                  d| j                  z  dz          y )Nzx if x else r   r  r   s    r   test_if_elsez$TestExpressionStackSize.test_if_elseC  s    ntvv5;<r   c                 F    | j                  d| j                  z  dz          y )Nzx + r   r  r   s    r   
test_binopz"TestExpressionStackSize.test_binopF  r  r   c                 L    | j                  dd| j                  z  z   dz          y )N[x, zx]r  r   s    r   	test_listz!TestExpressionStackSize.test_listI  "    cEDFFN2T9:r   c                 L    | j                  dd| j                  z  z   dz          y )N(r  zx)r  r   s    r   
test_tuplez"TestExpressionStackSize.test_tupleL  r  r   c                 L    | j                  dd| j                  z  z   dz          y )Nrt  r  zx}r  r   s    r   test_setz TestExpressionStackSize.test_setO  r  r   c                 L    | j                  dd| j                  z  z   dz          y )Nrt  zx:x, zx:x}r  r   s    r   	test_dictz!TestExpressionStackSize.test_dictR  s#    cGdff$44v=>r   c                 L    | j                  dd| j                  z  z   dz          y )Nf(r  )r  r   s    r   test_func_argsz&TestExpressionStackSize.test_func_argsU  s"    dUTVV^3c9:r   c                     d t        | j                        D        }| j                  ddj                  |      z   dz          y )Nc              3   (   K   | ]
  }d | d  ywrC   z=xNrV   r  s     r   r  z;TestExpressionStackSize.test_func_kwargs.<locals>.<genexpr>Y       3AaS)3   r  r  r  r  r  r  r   r   kwargss     r   test_func_kwargsz(TestExpressionStackSize.test_func_kwargsX  s5    3U466]3ddii&77#=>r   c                 L    | j                  dd| j                  z  z   dz          y )No.m(r  r  r  r   s    r   test_meth_argsz&TestExpressionStackSize.test_meth_args\  s"    futvv~5;<r   c                     d t        | j                        D        }| j                  ddj                  |      z   dz          y )Nc              3   (   K   | ]
  }d | d  ywr  rV   r  s     r   r  z;TestExpressionStackSize.test_meth_kwargs.<locals>.<genexpr>`  r  r  r  r  r  r  r  s     r   test_meth_kwargsz(TestExpressionStackSize.test_meth_kwargs_  s5    3U466]3f		&(99C?@r   c                 N    d}|d| j                   z  z  }| j                  |       y )Nz
def f(x):
z   x and x
)r  r  r   s     r   test_func_andz%TestExpressionStackSize.test_func_andc  s(    ''d#r   c                 2    d}d|z  dz   }t        |dd       y )N  zx,z=tr  r   r   )r   rW   rs   s      r   test_stack_3050z'TestExpressionStackSize.test_stack_3050h  s     ax$gx(r   c                 p    d}dj                  d t        |      D              }d| d}t        |dd       y )Nr  r  c              3   ,   K   | ]  }d | d|   yw)r   z:typeNrV   r  s     r   r  z<TestExpressionStackSize.test_stack_3050_2.<locals>.<genexpr>p  s     =q3qcqc*=s   zdef f(z	):
  passr  r   r  )r   rW   argsrs   s       r   test_stack_3050_2z)TestExpressionStackSize.test_stack_3050_2n  s9    yy=E!H==vZ(gx(r   N)rR   rS   rT   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rV   r   r   r  r  )  sd     	A:76<5=5;;;?;?=A$
))r   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestStackSizeStabilityc           	      T   fd}t        dd      D cg c]  } ||      j                   }}t        t        |            dk7  r[dd l}dd l}|j                         } |j                   |d      |       | j                  d|dd|j                                y y c c}w )	Nc                 x    i }d| z  z   }rd|z   }t        |dd      }t        |||       |d   j                  S )Nzdef func():
zasync z<script>r   r  )r   r   r   )r   r  scriptrs   async_r  s       r   compile_snippetz@TestStackSizeStability.check_stack_size.<locals>.compile_snippet{  sM    B(1w;6F!F*6:v6Dr2f:&&&r   r   rm   r   r   )filez4stack sizes diverge with # of consecutive snippets: r   )	r  r  r  r  r  ioStringIOrb   getvalue)	r   r  r  r  r   sizesr  r  outs	    ``      r   r  z'TestStackSizeStability.check_stack_sizez  s    	' ;@1+FQ#00FFs5z?a++-CCGGOA&S1II&+WcllnF G	   Gs   B%c                 *    d}| j                  |       y )Nz1
            if x:
                a
            r  r  s     r   test_ifzTestStackSizeStability.test_if       	g&r   c                 *    d}| j                  |       y )Nz{
            if x:
                a
            elif y:
                b
            else:
                c
            r  r  s     r   r  z#TestStackSizeStability.test_if_else       	g&r   c                 *    d}| j                  |       y )NzV
            try:
                a
            except:
                b
            r  r  s     r   test_try_except_barez+TestStackSizeStability.test_try_except_bare       	g&r   c                 *    d}| j                  |       y )Nz
            try:
                a
            except ImportError:
                b
            except:
                c
            else:
                d
            r  r  s     r   test_try_except_qualifiedz0TestStackSizeStability.test_try_except_qualified      	 	g&r   c                 *    d}| j                  |       y )Nz
            try:
                a
            except ImportError as e:
                b
            except:
                c
            else:
                d
            r  r  s     r   test_try_except_asz)TestStackSizeStability.test_try_except_as  r  r   c                 *    d}| j                  |       y )Nz
            try:
                a
            except* ImportError:
                b
            else:
                c
            r  r  s     r   test_try_except_star_qualifiedz5TestStackSizeStability.test_try_except_star_qualified  r  r   c                 *    d}| j                  |       y )Nz
            try:
                a
            except* ImportError as e:
                b
            else:
                c
            r  r  s     r   test_try_except_star_asz.TestStackSizeStability.test_try_except_star_as  r  r   c                 *    d}| j                  |       y )Nz
                try:
                    a
                except* A:
                    b
                finally:
                    c
            r  r  s     r   test_try_except_star_finallyz3TestStackSizeStability.test_try_except_star_finally  r  r   c                 *    d}| j                  |       y )Nzg
                try:
                    a
                finally:
                    b
            r  r  s     r   test_try_finallyz'TestStackSizeStability.test_try_finally  r  r   c                 *    d}| j                  |       y )Nz8
            with x as y:
                a
            r  r  s     r   	test_withz TestStackSizeStability.test_with  r  r   c                 *    d}| j                  |       y )NzX
            while x:
                a
            else:
                b
            r  r  s     r   test_while_elsez&TestStackSizeStability.test_while_else  r  r   c                 *    d}| j                  |       y )Nz7
            for x in y:
                a
            r  r  s     r   test_forzTestStackSizeStability.test_for  r  r   c                 *    d}| j                  |       y )Nz[
            for x in y:
                a
            else:
                b
            r  r  s     r   test_for_elsez$TestStackSizeStability.test_for_else  r  r   c                 *    d}| j                  |       y )Nz
            for x in y:
                if z:
                    break
                elif u:
                    continue
                else:
                    a
            else:
                b
            r  r  s     r   test_for_break_continuez.TestStackSizeStability.test_for_break_continue  s    
 	g&r   c                 *    d}| j                  |       y )Na6  
            for x in y:
                try:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
                finally:
                    f
            else:
                b
            r  r  s     r   0test_for_break_continue_inside_try_finally_blockzGTestStackSizeStability.test_for_break_continue_inside_try_finally_block       	g&r   c                 *    d}| j                  |       y )Na6  
            for x in y:
                try:
                    t
                finally:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  s     r   ,test_for_break_continue_inside_finally_blockzCTestStackSizeStability.test_for_break_continue_inside_finally_block*  r  r   c                 *    d}| j                  |       y )Na5  
            for x in y:
                try:
                    t
                except:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  s     r   +test_for_break_continue_inside_except_blockzBTestStackSizeStability.test_for_break_continue_inside_except_block;  r  r   c                 *    d}| j                  |       y )Na
  
            for x in y:
                with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r  r  s     r   )test_for_break_continue_inside_with_blockz@TestStackSizeStability.test_for_break_continue_inside_with_blockL  s     	g&r   c                 *    d}| j                  |       y )Nz
            try:
                if z:
                    return
                else:
                    a
            finally:
                f
            r  r  s     r   $test_return_inside_try_finally_blockz;TestStackSizeStability.test_return_inside_try_finally_block[       	g&r   c                 *    d}| j                  |       y )Nz
            try:
                t
            finally:
                if z:
                    return
                else:
                    a
            r  r  s     r    test_return_inside_finally_blockz7TestStackSizeStability.test_return_inside_finally_blockg  r  r   c                 *    d}| j                  |       y )Nz
            try:
                t
            except:
                if z:
                    return
                else:
                    a
            r  r  s     r   test_return_inside_except_blockz6TestStackSizeStability.test_return_inside_except_blocks  r  r   c                 *    d}| j                  |       y )Nz~
            with c:
                if z:
                    return
                else:
                    a
            r  r  s     r   test_return_inside_with_blockz4TestStackSizeStability.test_return_inside_with_block  s     	g&r   c                 .    d}| j                  |d       y )Nz>
            async with x as y:
                a
            Tr  r  r  s     r   test_async_withz&TestStackSizeStability.test_async_with       	gd3r   c                 .    d}| j                  |d       y )Nz=
            async for x in y:
                a
            Tr  r  r  s     r   test_async_forz%TestStackSizeStability.test_async_for  r  r   c                 .    d}| j                  |d       y )Nza
            async for x in y:
                a
            else:
                b
            Tr  r  r  s     r   test_async_for_elsez*TestStackSizeStability.test_async_for_else  s     	gd3r   c                 .    d}| j                  |d       y )Na  
            for x in y:
                async with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            Tr  r  r  s     r   /test_for_break_continue_inside_async_with_blockzFTestStackSizeStability.test_for_break_continue_inside_async_with_block  s     	gd3r   c                 .    d}| j                  |d       y )Nz
            async with c:
                if z:
                    return
                else:
                    a
            Tr  r  r  s     r   #test_return_inside_async_with_blockz:TestStackSizeStability.test_return_inside_async_with_block  s     	gd3r   N)F)rR   rS   rT   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  rV   r   r   r  r  v  s    G$'	''''	'	'	''''''''"'"'"'
'
'
''44444r   r  __main__)r  r  rz  r  r   r0  rF  rx  rj  ro   rc  rf  r   test.supportr   r   r   r   test.support.os_helperr   TestCaser
   r  r  r  rR   mainrV   r   r   <module>r     s    
  	  
 
      F F +l(H%% l(\' f
(++ f
 f
RJ)h// J)ZA4X.. A4H
 zHMMO r   