3
2)^                 @   s   d Z ddlmZmZmZ ddlmZ ddlmZ	 ddl
mZ ddlmZmZmZmZmZmZmZmZmZmZ G dd deZd	S )
zT
Python 3.7 base code. We keep non-custom-generated grammar rules out of this file.
    )ParserErrorPythonParsernop_func)
SyntaxTree)DEFAULT_DEBUG)rule2str)
	and_check
ifelsestmt
iflaststmtifstmtifstmts_jumpor_checktesttruetryelsestmtl3
while1stmtwhile1elsestmtc                   sT   e Zd Zef fdd	Zedd Zdd Zdd Zd	d
 Z	dd Z
dd Z  ZS )Python37BaseParserc                s*   t  | _tt| jtd|d t  | _d S )NZstmts)debug)setZadded_rulessuperr   __init__r   Z	new_rules)selfZdebug_parser)	__class__ [/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/parsers/parse37base.pyr      s    
zPython37BaseParser.__init__c             C   s(   | j dk	rd| j| j f S d| j S dS )zACustomize CALL_FUNCTION to add the number of positional argumentsNz%s_%iz%s_0)attrkind)tokenr   r   r   call_fn_name    s    
zPython37BaseParser.call_fn_namec             C   s   |d }| j |||| dS )ztPython 3.3 added a an addtional LOAD_STR before MAKE_FUNCTION and
        this has an effect on many rules.
        z	LOAD_STR N)add_unique_rule)r   ruleopnamer   	customizeZnew_ruler   r   r   add_make_function_rule(   s    z)Python37BaseParser.add_make_function_rulec       	      C   s  x@t |d t|D ]*}|| jjdr,P q|| jjdrP qW |t|k sVtd||d  jdksptdd}x0t |t|D ]}|| jjdr|| }P qW |std	| |j}|jd
r| jdt dd|jd  |f }n | j	|}dd|jd  |f }| j|t dS )a  
        # Should the first rule be somehow folded into the 2nd one?
        build_class ::= LOAD_BUILD_CLASS mkfunc
                        LOAD_CLASSNAME {expr}^n-1 CALL_FUNCTION_n
                        LOAD_CONST CALL_FUNCTION_n
        build_class ::= LOAD_BUILD_CLASS mkfunc
                        expr
                        call
                        CALL_FUNCTION_3
            MAKE_FUNCTIONMAKE_CLOSUREz7build_class needs to find MAKE_FUNCTION or MAKE_CLOSUREZLOAD_STRz<build_class expecting CONST after MAKE_FUNCTION/MAKE_CLOSURENCALL_FUNCTIONz:build_class custom rule for %s needs to find CALL_FUNCTIONCALL_FUNCTION_KWz!classdef ::= build_class_kw storez:build_class_kw ::= LOAD_BUILD_CLASS mkfunc %sLOAD_CONST %szexpr z,build_class ::= LOAD_BUILD_CLASS mkfunc %s%s)
rangelenr   
startswithAssertionErrorRuntimeErroraddRuler   r   r   )	r   r!   ir   tokensr"   Zcall_fn_tokcall_functionr    r   r   r   custom_build_class_rule/   s>    




z*Python37BaseParser.custom_build_class_rulec       !      C   sd  d}t dۃ}td܃}t dd |D | _t dd | jD | _d|krVd}| jdt t|}d}xBt|D ]6\}}	|	dkrl||d k rl| j||d  dkrld}qlW xt|D ]\}}	|	j	}
|
d |
j
d |ks|
|k rq|
d |
jd }|
dkrd|krd}| j|| q|
d krVd!}| jd"k r@|d#7 }n|d$7 }| j|t q|d%krd&|	j }d'||
f }| j|t q|
jd(r|	j}d)d&| |
f }| j|t d*}| j|t q|dkr|
d,kr| jd-t n.|
jd.r|	j}d/d&| |
f }| j|t d0|	j }|
d1krld2}| j|d3d| d4}d5}| j|d4d6| d7}| j|d4d| d8}|
jd9s|
jd,rd:| jkrd;d<|	j |
f }| j|t d=d&|	j |
f }n2d>|d&|	jd  |
f }| j||
|	j| d?| }| j||
|	j| q|
jd.r8|	j}d/d&| |
f }| j|t q|
jdr|	j}d@dAt|dB   dCt|dD dD   d&|dD   |
 }| j|t dEd&| |
f }| j|t q|dkr|	j}d}|dHkr(d}x0t|D ]$}||| d  j	dJkrd}P qW |r(dKdL| |
f }| j||
|	j| | s8|d6kr|	j}|dB }|dD dD }|d6krxdMdNdD  }| j|||| |d6kr| jdOdPdD  ||| ||j
dd d  j }dQ| dA|  dC|  d&|dD   |
 }| jdR| |g| qqq|dSkrH|	jdkr| jdTdUg| n(|	jdVks6tdW| | jdXdYg| q|
jdZr|	j}d[d&| |f }| j|| d\| jkrd]}| j|| q|
t d߃ks|
jdcr|
d^kr|	jdkrdd}| j|t | j|
|	|||d   q|dekrN| j|	\}}t|tde dV }dfdg|  dh|  d&|  |
 }| j||
|	j| q|
dkrp| jdit |j|
 q|
djkr| jdkt |j|
 q|
dlkr| jdmt |j|
 q|
dnkr| jdot |j|
 q|
dpkr| jdqt |j|
 q|
drkrds}| j|| q|
d\kr0dt}| j|| q|
dkrR| jdut |j|
 q|
dvkrj| jdwt q|
dxkr|	j}| jdyt |j|
 q|
dzkr| j|
||	|| q|
d{kr| jd|t |j|
 q|
d}kr| jd~t |j|
 q|
d:kr&|rd}| j||
|	j| |j|
 q|
dkrH| jdt |j|
 q|
dkrp| jd|
|	j| |j|
 q|
dkr|	jdkrd| jkrd|	_	| jdt q|
dkr|r| jdt d}| j||
|	j| |j|
 q|
dk	r| jdt |j|
 q|
jd
r|
dk	r8d:| jk	r8d}| j|t |	j\}}}d}|	sj||k	r|||  dk	rddg| |
f }| j||
|	j| |
rddg| |
f }| j||
|	j| |
r|	s||k	r|||  dk	rddg| |
f }| j||
|	j| |
s ||k
rB|||  dk
rBddg| |
f }| j||
|	j| |
sd||k
r|||  d:k
r| jddg| |
f |
|	j| |d6k
rd}nd}dd&| |d&| |
f }| j||
|	j| |d6krddg| |
f }| j||
|	j| q|jdr|	j\}}}}|| | }|r`|r:dd&| d| d|
f }ndd| d|
f }| j||
|	j| n"dd&| |
f }| j||
|	j| dd&| d| d|
f }| j||
|	j| |rVddg| |
f }| j||
|	j| ddg| |
f }| j||
|	j| |s|dkrV||d  dkrVd|
f }| j||
|	j| dd&| |
f }| j||
|	j| |st|dkr||d  dkrddg| dh| |
f }| j||
|	j| q|	j\}}}}d}|rddg| |
f }| j||
|	j| |s||kr|||  dkrdd&| |
f }| j||
|	j| |s>||krf|||  dkrfddg| dh| |
f }| j||
|	j| |d6krd}| jd|
|	j| nd}ddg| |d|
f }| j||
|	j| q|
dkrd:| jkrd}| j|t nd| jkrd}| j|t q|
dkr| jdt |j|
 q|
dkr>| jdt |j|
 q|
dkr`| jdt |j|
 q|
dkr| jdt |j|
 q|
dkr| jdt |j|
 q|
dkrd}| j|t q|
dkrd}| jd"k r|d7 }n|d7 }| j|t q|dkr4|	j\}} d|
 d||  d   }| j|t q|dkr^d|
 d|	j  }| j|t q|dkrd|
 d|	j  }| j|t |j|
 qW ttttttttt t!t!t"t#t$dƜ| _%d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d| j&d< d S )NFBEFOREBUILDCALLCONTINUEDELETEFORMATGETJUMPLOADLOOKUPMAKERETURNRAISESETUPUNPACKWITHBUILD_TUPLE_UNPACK_WITH_CALLc             S   s   g | ]
}|j qS r   )r   ).0tr   r   r   
<listcomp>   s    z>Python37BaseParser.customize_grammar_rules.<locals>.<listcomp>c             S   s   g | ]}|d |j d qS )N_)rfind)rD   r!   r   r   r   rF      s    PyPyTaW  
              stmt ::= assign3_pypy
              stmt ::= assign2_pypy
              assign3_pypy       ::= expr expr expr store store store
              assign2_pypy       ::= expr expr store store
              stmt               ::= if_exp_lambda
              stmt               ::= if_exp_not_lambda
              if_exp_lambda      ::= expr jmp_false expr return_if_lambda
                                     return_lambda LAMBDA_MARKER
              if_exp_not_lambda  ::= expr jmp_true expr return_if_lambda
                                     return_lambda LAMBDA_MARKER
              GET_ITER   r$   ZCALL_FUNCTION_1rG   ZLOAD_ASSERTzL
                stmt ::= JUMP_IF_NOT_DEBUG stmts COME_FROM
                BEFORE_ASYNC_WITHz
                   stmt            ::= async_with_stmt
                   stmt            ::= async_with_as_stmt
                gffffff@a
  
                      stmt                 ::= async_with_stmt SETUP_ASYNC_WITH
                      c_stmt               ::= c_async_with_stmt SETUP_ASYNC_WITH
                      async_with_stmt      ::= expr
                                               async_with_pre
                                               POP_TOP
                                               suite_stmts_opt
                                               POP_BLOCK LOAD_CONST
                                               async_with_post
                      c_async_with_stmt    ::= expr
                                               async_with_pre
                                               POP_TOP
                                               c_suite_stmts_opt
                                               POP_BLOCK LOAD_CONST
                                               async_with_post
                      async_with_stmt      ::= expr
                                               async_with_pre
                                               POP_TOP
                                               suite_stmts_opt
                                               async_with_post
                      c_async_with_stmt    ::= expr
                                               async_with_pre
                                               POP_TOP
                                               c_suite_stmts_opt
                                               async_with_post
                      async_with_as_stmt   ::= expr
                                               async_with_pre
                                               store
                                               suite_stmts_opt
                                               POP_BLOCK LOAD_CONST
                                               async_with_post
                      c_async_with_as_stmt ::= expr
                                              async_with_pre
                                              store
                                              c_suite_stmts_opt
                                              POP_BLOCK LOAD_CONST
                                              async_with_post
                      async_with_as_stmt   ::= expr
                                              async_with_pre
                                              store
                                              suite_stmts_opt
                                              async_with_post
                      c_async_with_as_stmt ::= expr
                                              async_with_pre
                                              store
                                              suite_stmts_opt
                                              async_with_post
                    a  
                      async_with_pre       ::= BEFORE_ASYNC_WITH GET_AWAITABLE LOAD_CONST YIELD_FROM SETUP_ASYNC_WITH
                      async_with_post      ::= BEGIN_FINALLY COME_FROM_ASYNC_WITH
                                               WITH_CLEANUP_START GET_AWAITABLE LOAD_CONST YIELD_FROM
                                               WITH_CLEANUP_FINISH END_FINALLY
                      async_with_stmt      ::= expr
                                               async_with_pre
                                               POP_TOP
                                               suite_stmts
                                               POP_TOP POP_BLOCK
                                               async_with_post
                      c_async_with_stmt    ::= expr
                                               async_with_pre
                                               POP_TOP
                                               c_suite_stmts
                                               POP_TOP POP_BLOCK
                                               async_with_post
                      async_with_stmt      ::= expr
                                               async_with_pre
                                               POP_TOP
                                               suite_stmts
                                               POP_BLOCK
                                               BEGIN_FINALLY
                                               WITH_CLEANUP_START GET_AWAITABLE LOAD_CONST YIELD_FROM
                                               WITH_CLEANUP_FINISH POP_FINALLY LOAD_CONST RETURN_VALUE
                                               COME_FROM_ASYNC_WITH
                                               WITH_CLEANUP_START GET_AWAITABLE LOAD_CONST YIELD_FROM
                                               WITH_CLEANUP_FINISH END_FINALLY
                      c_async_with_stmt   ::= expr
                                              async_with_pre
                                              POP_TOP
                                              c_suite_stmts
                                              POP_BLOCK
                                              BEGIN_FINALLY
                                              WITH_CLEANUP_START GET_AWAITABLE LOAD_CONST YIELD_FROM
                                              WITH_CLEANUP_FINISH POP_FINALLY LOAD_CONST RETURN_VALUE
                                              COME_FROM_ASYNC_WITH
                                              WITH_CLEANUP_START GET_AWAITABLE LOAD_CONST YIELD_FROM
                                              WITH_CLEANUP_FINISH END_FINALLY
                      async_with_as_stmt   ::= expr
                                               async_with_pre
                                               store suite_stmts
                                               POP_TOP POP_BLOCK
                                               async_with_post
                      c_async_with_as_stmt ::= expr
                                               async_with_pre
                                               store suite_stmts
                                               POP_TOP POP_BLOCK
                                               async_with_post
                      async_with_as_stmt   ::= expr
                                               async_with_pre
                                               store suite_stmts
                                               POP_BLOCK async_with_post
                      c_async_with_as_stmt ::= expr
                                               async_with_pre
                                               store suite_stmts
                                               POP_BLOCK async_with_post
                    BUILD_CONST_KEY_MAPzexpr zdict ::= %sLOAD_CONST %sBUILD_LIST_UNPACKzbuild_list_unpack ::= %s%szexpr ::= build_list_unpack	BUILD_MAPBUILD_MAP_UNPACKz
                        expr       ::= unmap_dict
                        unmap_dict ::= dict_comp BUILD_MAP_UNPACK
                        BUILD_MAP_UNPACK_WITH_CALLz#build_map_unpack_with_call ::= %s%sz	kvlist_%sZBUILD_MAP_nzddict_comp_func ::= BUILD_MAP_n LOAD_FAST for_iter store comp_iter JUMP_BACK RETURN_VALUE RETURN_LASTZdict_comp_funckvlist_nzkvlist_n ::=  kvlist_n kv3r   zkvlist_n ::=zdict ::=  BUILD_MAP_n kvlist_nZBUILD_MAP_WITH_CALLZLOAD_DICTCOMPzdict ::= %s%sz
dict_comp zz
                         expr       ::= unmap_dict
                         unmap_dict ::= %s%s
                         z%s ::= %s %szdict ::=  %sz!build_tuple_unpack_with_call ::= z	expr1024 i   zexpr32     zstarred ::= %s %s
BUILD_LIST	BUILD_SETBUILD_TUPLEBUILD_TUPLE_UNPACKLOAD_CLOSUREzload_closure ::= %s%szLOAD_CLOSURE zexpr32 ::=%sz exprzexpr1024 ::=%sz expr32z%s ::= zexpr ::= %sBUILD_SLICEzexpr ::= build_slice2z(build_slice2 ::= expr expr BUILD_SLICE_2   z'BUILD_SLICE value must be 2 or 3; is %szexpr ::= build_slice3z-build_slice3 ::= expr expr expr BUILD_SLICE_3BUILD_STRINGz
                    expr                 ::= joined_str
                    joined_str           ::= %sBUILD_STRING_%d
                ZFORMAT_VALUE_ATTRz
                      formatted_value_attr ::= expr expr FORMAT_VALUE_ATTR expr BUILD_STRING
                      expr                 ::= formatted_value_attr
                    r'   CALL_FUNCTION_EXCALL_FUNCTION_EX_KWCALL_FUNCTION_VARCALL_FUNCTION_VAR_KWr(   a8  
                     dict_comp    ::= LOAD_DICTCOMP LOAD_STR MAKE_FUNCTION_0 expr
                                      GET_ITER CALL_FUNCTION_1
                    classdefdeco1 ::= expr classdefdeco2 CALL_FUNCTION_1
                    classdefdeco1 ::= expr classdefdeco1 CALL_FUNCTION_1
                    ZCALL_METHODzcall ::= expr zpos_arg zkwarg zcontinue ::= CONTINUECONTINUE_LOOPzcontinue ::= CONTINUE_LOOPDELETE_ATTRzdel_stmt ::= expr DELETE_ATTRDELETE_DEREFz|
                   stmt           ::= del_deref_stmt
                   del_deref_stmt ::= DELETE_DEREF
                   DELETE_SUBSCRz
                    del_stmt ::= delete_subscript
                    delete_subscript ::= expr expr DELETE_SUBSCR
                   FORMAT_VALUEz
                    expr              ::= formatted_value1
                    formatted_value1  ::= expr FORMAT_VALUE
                z
                expr              ::= formatted_value2
                formatted_value2  ::= expr expr FORMAT_VALUE_ATTR
                zp
                    expr      ::= get_iter
                    get_iter  ::= expr GET_ITER
                    	GET_AITERam  
                    expr                ::= generator_exp_async
                    generator_exp_async ::= load_genexpr LOAD_STR MAKE_FUNCTION_0 expr
                                            GET_AITER CALL_FUNCTION_1

                    stmt                ::= genexpr_func_async

                    func_async_prefix   ::= _come_froms SETUP_EXCEPT GET_ANEXT LOAD_CONST YIELD_FROM
                    func_async_middle   ::= POP_BLOCK JUMP_FORWARD COME_FROM_EXCEPT
                                            DUP_TOP LOAD_GLOBAL COMPARE_OP POP_JUMP_IF_TRUE
                                            END_FINALLY COME_FROM
                    genexpr_func_async  ::= LOAD_FAST func_async_prefix
                                            store func_async_middle comp_iter
                                            JUMP_BACK COME_FROM
                                            POP_TOP POP_TOP POP_TOP POP_EXCEPT POP_TOP

                    expr                ::= list_comp_async
                    list_comp_async     ::= LOAD_LISTCOMP LOAD_STR MAKE_FUNCTION_0
                                            expr GET_AITER CALL_FUNCTION_1
                                            GET_AWAITABLE LOAD_CONST
                                            YIELD_FROM

                    expr                ::= list_comp_async
                    list_afor2          ::= func_async_prefix
                                            store func_async_middle list_iter
                                            JUMP_BACK COME_FROM
                                            POP_TOP POP_TOP POP_TOP POP_EXCEPT POP_TOP
                    list_comp_async     ::= BUILD_LIST_0 LOAD_FAST list_afor2
                    get_aiter           ::= expr GET_AITER
                    list_afor           ::= get_aiter list_afor2
                    list_iter           ::= list_afor
                   ZJUMP_IF_NOT_DEBUGa  
                    stmt        ::= assert_pypy
                    stmt        ::= assert2_pypy", nop_func)
                    assert_pypy ::=  JUMP_IF_NOT_DEBUG expr jmp_true
                                     LOAD_ASSERT RAISE_VARARGS_1 COME_FROM
                    assert2_pypy ::= JUMP_IF_NOT_DEBUG assert_expr jmp_true
                                     LOAD_ASSERT expr CALL_FUNCTION_1
                                     RAISE_VARARGS_1 COME_FROM
                    assert2_pypy ::= JUMP_IF_NOT_DEBUG expr jmp_true
                                     LOAD_ASSERT expr CALL_FUNCTION_1
                                     RAISE_VARARGS_1 COME_FROM,
                    LOAD_BUILD_CLASSLOAD_CLASSDEREFzexpr ::= LOAD_CLASSDEREFZLOAD_CLASSNAMEzexpr ::= LOAD_CLASSNAMEzKdict_comp ::= LOAD_DICTCOMP %sMAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1	LOAD_ATTRzl
                  expr      ::= attribute
                  attribute ::= expr LOAD_ATTR
                  ZLOAD_LISTCOMPzexpr ::= listcomp	LOAD_NAME__annotations__SETUP_ANNOTATIONSZLOAD_ANNOTATIONz
                        stmt       ::= SETUP_ANNOTATIONS
                        stmt       ::= ann_assign
                        ann_assign ::= expr LOAD_ANNOTATION LOAD_STR STORE_SUBSCR
                        ZLOAD_SETCOMPzexpr ::= set_compzIset_comp ::= LOAD_SETCOMP %sMAKE_FUNCTION_0 expr GET_ITER CALL_FUNCTION_1ZLOOKUP_METHODz
                             expr      ::= attribute
                             attribute ::= expr LOOKUP_METHOD
                             r&   ZMAKE_CLOSURE_0z
                        dict_comp ::= load_closure LOAD_DICTCOMP LOAD_STR
                                      MAKE_CLOSURE_0 expr
                                      GET_ITER CALL_FUNCTION_1
                    ZLOAD_LAMBDAz-mklambda ::= %sload_closure LOAD_LAMBDA %%s%szQgenerator_exp ::= %sload_closure load_genexpr %%s%s expr GET_ITER CALL_FUNCTION_1zMlistcomp ::= %sload_closure LOAD_LISTCOMP %%s%s expr GET_ITER CALL_FUNCTION_1zLset_comp ::= %sload_closure LOAD_SETCOMP %%s%s expr GET_ITER CALL_FUNCTION_1zKdict_comp ::= %sload_closure LOAD_DICTCOMP %s expr GET_ITER CALL_FUNCTION_1zkwargs  z4mkfunc ::= %s%s%s load_closure LOAD_CODE LOAD_STR %sz)mkfunc ::= %sload_closure load_genexpr %sr%   zmklambda ::= %s%s%s%szload_closure z#BUILD_TUPLE_1 LOAD_LAMBDA LOAD_STR zmklambda ::= %s%s%szLOAD_LAMBDA LOAD_STR z&mklambda ::= %sLOAD_LAMBDA LOAD_STR %szmkfunc ::= %s%s%s%szLOAD_CODE LOAD_STR zDgenerator_exp ::= %sload_genexpr %%s%s expr GET_ITER CALL_FUNCTION_1zKlistcomp ::= load_closure LOAD_LISTCOMP %%s%s expr GET_ITER CALL_FUNCTION_1z@listcomp ::= %sLOAD_LISTCOMP %%s%s expr GET_ITER CALL_FUNCTION_1z"mklambda ::= %s%sLOAD_LAMBDA %%s%sZ	no_kwargszno_kwargs ::=kwargszmkfunc ::= %s%s %s%sZMAKE_FUNCTION_8z
                       dict_comp ::= load_closure LOAD_DICTCOMP LOAD_STR
                                     MAKE_FUNCTION_8 expr
                                     GET_ITER CALL_FUNCTION_1
                       z
                       set_comp ::= load_closure LOAD_SETCOMP LOAD_STR
                                    MAKE_FUNCTION_8 expr
                                    GET_ITER CALL_FUNCTION_1
                       ZRETURN_VALUE_LAMBDAzX
                    return_lambda ::= ret_expr RETURN_VALUE_LAMBDA
                    ZRAISE_VARARGS_0zy
                    stmt        ::= raise_stmt0
                    raise_stmt0 ::= RAISE_VARARGS_0
                    ZRAISE_VARARGS_1z~
                    stmt        ::= raise_stmt1
                    raise_stmt1 ::= expr RAISE_VARARGS_1
                    ZRAISE_VARARGS_2z
                    stmt        ::= raise_stmt2
                    raise_stmt2 ::= expr expr RAISE_VARARGS_2
                    SETUP_EXCEPTa  
                    try_except     ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
                                       except_handler opt_come_from_except

                    tryelsestmt    ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
                                       except_handler else_suite come_from_except_clauses

                    tryelsestmt    ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
                                       except_handler else_suite come_froms

                    tryelsestmtl   ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
                                       except_handler else_suitel come_from_except_clauses

                    stmt             ::= tryelsestmtl3
                    tryelsestmtl3    ::= SETUP_EXCEPT suite_stmts_opt POP_BLOCK
                                         except_handler COME_FROM else_suitel
                                         opt_come_from_except
                    WITH_CLEANUP_STARTz
                  stmt        ::= with_null
                  with_null   ::= with_suffix
                  with_suffix ::= WITH_CLEANUP_START WITH_CLEANUP_FINISH END_FINALLY
                
SETUP_WITHa_  
                  stmt       ::= with
                  stmt       ::= withasstmt

                  with       ::= expr
                                 SETUP_WITH POP_TOP
                                 suite_stmts_opt
                                 COME_FROM_WITH
                                 with_suffix
                  withasstmt ::= expr SETUP_WITH store suite_stmts_opt COME_FROM_WITH
                                 with_suffix

                  with       ::= expr
                                 SETUP_WITH POP_TOP
                                 suite_stmts_opt
                                 POP_BLOCK LOAD_CONST COME_FROM_WITH
                                 with_suffix

                  withasstmt ::= expr
                                 SETUP_WITH store suite_stmts_opt
                                 POP_BLOCK LOAD_CONST COME_FROM_WITH
                                 with_suffix

                  with       ::= expr
                                 SETUP_WITH POP_TOP suite_stmts_opt
                                 POP_BLOCK LOAD_CONST COME_FROM_WITH
                                 with_suffix
                  withasstmt ::= expr
                                 SETUP_WITH store suite_stmts_opt
                                 POP_BLOCK LOAD_CONST COME_FROM_WITH
                                 with_suffix
                z
                    with     ::= expr SETUP_WITH POP_TOP suite_stmts_opt POP_BLOCK
                                   LOAD_CONST
                                   with_suffix
                    aK  
                      with       ::= expr
                                     SETUP_WITH POP_TOP suite_stmts_opt
                                     POP_BLOCK LOAD_CONST COME_FROM_WITH
                                     with_suffix

                      withasstmt ::= expr
                                     SETUP_WITH store suite_stmts_opt
                                     POP_BLOCK LOAD_CONST COME_FROM_WITH

                      withasstmt ::= expr
                                     SETUP_WITH store suite_stmts
                                     POP_BLOCK BEGIN_FINALLY COME_FROM_WITH with_suffix

                      with       ::= expr SETUP_WITH POP_TOP suite_stmts_opt POP_BLOCK
                                     BEGIN_FINALLY COME_FROM_WITH
                                     with_suffix
                    	UNPACK_EXzunpack ::= z storeUNPACK_TUPLEUNPACK_SEQUENCEZUNPACK_LISTzunpack_list ::= )_ifstmts_jumpandr	   ifelsestmtlr
   iflaststmtlr   ifstmtlorr   
testfalselr   r   Ztry_elsestmtl38ASTru   ZnoASTannotate_tupleaug_assign1aug_assign2r   r   rt   r	   rv   r
   rw   r   rx   import_from37ry   r0   r   rz   )r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   )rC   )rO   rP   )rT   rU   rV   rW   )r'   r\   r]   r^   r_   )rq   )rr   rs   )'	frozensetr   seen_opsZseen_op_basenamesr.   r   r*   	enumerater   r   findrH   Zadd_unique_doc_rulesversionr   r+   r   intr)   lowerZadd_unique_rulesr,   custom_classfunc_rule
get_pos_kwaddr2   r#   r   r   r	   r
   r   r   r   r   r   r   reduce_check_tableZcheck_reduce)!r   r0   r"   Zis_pypyZcustomize_instruction_basenamesZcustom_ops_processednZhas_get_iter_call_function1r/   r   r!   Zopname_baseZ	rules_strrR   r    vZis_LOAD_CLOSUREjZbuild_countZ	thousandsZ	thirty32sZ
collectionargs_posargs_kwnakZrule_patZannotate_argsZ
kwargs_strclosureZstack_countrm   Zbefore_countZafter_countr   r   r   customize_grammar_rulesj   s                  

/9






8   



(

    

 








 









""""


"""








 





















z*Python37BaseParser.customize_grammar_rulesc             C   s  | j |\}}t|td d }|| }tdj| jrdd|  d|  d|  |j d	 }	| j|	|j|| | jd
|j|| |jdr| j||_|j	drd}
nd}
dd|  d|  |
 |j }	| j|	|j|| n| j||_|| }dd|  d|  d|  |j }	| j|	|j|| d| jkr||dkr||j
dkr||dkr|dd|d  ||f }	| j|	|j|| dS )a!  
        call ::= expr {expr}^n CALL_FUNCTION_n
        call ::= expr {expr}^n CALL_FUNCTION_VAR_n
        call ::= expr {expr}^n CALL_FUNCTION_VAR_KW_n
        call ::= expr {expr}^n CALL_FUNCTION_KW_n

        classdefdeco2 ::= LOAD_BUILD_CLASS mkfunc {expr}^n-1 CALL_FUNCTION_n
        r'   rZ   GET_AWAITABLE
YIELD_FROMzasync_call ::= expr zpos_arg zkwarg zexpr z$ GET_AWAITABLE LOAD_CONST YIELD_FROMzexpr ::= async_callr^   ZKWrl   zcall ::= expr expr zcall ::= expr rf   r$   z1classdefdeco2 ::= LOAD_BUILD_CLASS mkfunc %s%s_%dN)r   r   )r   r*   r   issubsetr   r   r   r+   r   endswithr   )r   r!   r   r"   Z
next_tokenr   r   r   Z
uniq_paramr    kwr   r   r   r   _  s8    	&

	"


z(Python37BaseParser.custom_classfunc_rulec             C   sf  |d }t |}t||d }| jj|d }y|rH|| |||||||S W n   dd l}	dd l}
td|j|	j d t	||| j
|| j
f  t|
j|	j d d t|| || j | jd Y nX |dkr|d d d
krdS |dkrt|| jt S |dkrb|d }|d }|dkr^|dkr^|d }|dksJt|d j|d jkS dS dS )Nr   r$   zException in %s %s
z	rule: %s
zoffsets %s .. %srK   Zrulesr}   r~   ru   Tr|   r   rZ   importlist37alias37storeFzException in %s %s
rule: %s
z,Exception in %s %s
rule: %s
offsets %s .. %s)r}   r~   )r*   minr   getsys	tracebackprint__name__exc_infor   offsetprint_tbr   Zoff2intr   
isinstancer   tupler,   )r   r    astr0   firstlastlhsr   fnr   r   r   r   r   r   r   r   reduce_is_invalid  s>    
$

z$Python37BaseParser.reduce_is_invalid)r   
__module____qualname__PARSER_DEFAULT_DEBUGr   staticmethodr   r#   r2   r   r   r   __classcell__r   r   )r   r   r      s   ;       |Or   N)__doc__Zuncompyle6.parserr   r   r   Zuncompyle6.parsers.treenoder   Zspark_parserr   r   Zspark_parser.sparkr   Zuncompyle6.parsers.reducecheckr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   0