
    ZQd	                     `    d Z ddlmZmZ ddlmZmZmZmZm	Z	m
Z
  G d dej                  ZdS )z7
Convert use of sys.exitfunc to use the atexit module.
    )pytree
fixer_base)NameAttrCallCommaNewlinesymsc                   :     e Zd ZdZdZdZ fdZ fdZd Z xZ	S )FixExitfuncTa  
              (
                  sys_import=import_name<'import'
                      ('sys'
                      |
                      dotted_as_names< (any ',')* 'sys' (',' any)* >
                      )
                  >
              |
                  expr_stmt<
                      power< 'sys' trailer< '.' 'exitfunc' > >
                  '=' func=any >
              )
              c                 B     t          t          |           j        |  d S N)superr   __init__)selfargs	__class__s     1/usr/lib/python3.11/lib2to3/fixes/fix_exitfunc.pyr   zFixExitfunc.__init__   s#    )k4  )40000    c                 h    t          t          |                               ||           d | _        d S r   )r   r   
start_tree
sys_import)r   treefilenamer   s      r   r   zFixExitfunc.start_tree!   s.    k4  ++D(;;;r   c           	         d|v r| j         |d         | _         d S |d                                         }d|_        t          j        t
          j        t          t          d          t          d                              }t          ||g|j                  }|
                    |           | j         |                     |d           d S | j         j        d         }|j        t
          j        k    rF|                    t!                                 |                    t          dd                     d S | j         j        }|j                            | j                   }|j        }	t          j        t
          j        t          d	          t          dd          g          }
t          j        t
          j        |
g          }|                    |dz   t-                                 |                    |d
z   |           d S )Nr   func atexitregisterzKCan't find sys import; Please add an atexit import at the top of your file.    import   )r   cloneprefixr   Noder
   powerr   r   r   replacewarningchildrentypedotted_as_namesappend_childr   parentindeximport_namesimple_stmtinsert_childr	   )r   noderesultsr   r   callnamescontaining_stmtpositionstmt_container
new_importnews               r   	transformzFixExitfunc.transform%   s   7""&"),"7Fv$$&&;tz#DNND4D4DEE! ! Htfdk22T?"LL  ? @ @ @F (+:---uww'''tHc2233333"o4O&/55doFFH,3NT%5#H~~tHc/B/BC   J +d.==C((AwyyAAA((As;;;;;r   )
__name__
__module____qualname__keep_line_orderBM_compatiblePATTERNr   r   r<   __classcell__)r   s   @r   r   r      sq        OMG1 1 1 1 1    #< #< #< #< #< #< #<r   r   N)__doc__lib2to3r   r   lib2to3.fixer_utilr   r   r   r   r	   r
   BaseFixr    r   r   <module>rI      s     ' & & & & & & & E E E E E E E E E E E E E E E E=< =< =< =< =<*$ =< =< =< =< =<r   