
    (g                         d Z ddlZddlZej                  D  cg c]  }  ee|        c} Zg dZdZdZd Z	d Z
ddZdd	Z G d
 d      Z G d d      Zyc c} w )aA  Utilities to compile possibly incomplete Python source code.

This module provides two interfaces, broadly similar to the builtin
function compile(), which take program text, a filename and a 'mode'
and:

- Return code object if the command is complete and valid
- Return None if the command is incomplete
- Raise SyntaxError, ValueError or OverflowError if the command is a
  syntax error (OverflowError and ValueError can be produced by
  malformed literals).

The two interfaces are:

compile_command(source, filename, symbol):

    Compiles a single command in the manner described above.

CommandCompiler():

    Instances of this class have __call__ methods identical in
    signature to compile_command; the difference is that if the
    instance compiles program text containing a __future__ statement,
    the instance 'remembers' and compiles all subsequent program texts
    with the statement in force.

The module also provides another class:

Compile():

    Instances of this class act like the built-in function compile,
    but with 'memory' in the sense described above.
    N)compile_commandCompileCommandCompileri   i @  c                    |j                  d      D ]  }|j                         }|s|d   dk7  s n |dk7  rd}t        j                         5  t        j                  dt
        t        f       	  | |||       d d d         | |||d	      S # t        $ rL 	  | |dz   ||       Y d d d        y # t        $ r%}dt        |      v rY d }~Y d d d        y Y d }~nd }~ww xY wY hw xY w# 1 sw Y   mxY w)
N
r   #evalpassignorezincomplete inputF)incomplete_input)	splitstripwarningscatch_warningssimplefilterSyntaxWarningDeprecationWarningSyntaxErrorstr)compilersourcefilenamesymbollinees         /usr/lib/python3.12/codeop.py_maybe_compiler   1   s   T" zz|DGsN
 VF 
	 	 	" 
 h8J(KL	 VXv.
  FHfuEE  	  $&9
  
    %Q/
  
  0 /	 	
  
 s`   !C'1
B	C$B0&C'0	C9CC$
C'C$CC$!C'#C$$C''C0c                 N    t        |       }t        |      }d|v rd|v ry||k(  ryy)Nzwas never closedFT)repr)err1err2rep1rep2s       r   _is_syntax_errorr$   K   s4    :D:DT!&8D&@t|    c                 J    d}|r|t         z  }|t        z  }t        | |||      S )Nr   )PyCF_ALLOW_INCOMPLETE_INPUTPyCF_DONT_IMPLY_DEDENTcompile)r   r   r   r   flagss        r   _compiler+   T   s1    E,,''68VU33r%   c                 &    t        t        | ||      S )a  Compile a command and determine whether it is incomplete.

    Arguments:

    source -- the source string; may contain \n characters
    filename -- optional filename from which source was read; default
                "<input>"
    symbol -- optional grammar start symbol; "single" (default), "exec"
              or "eval"

    Return value / exceptions raised:

    - Return a code object if the command is complete and valid
    - Return None if the command is incomplete
    - Raise SyntaxError, ValueError or OverflowError if the command is a
      syntax error (OverflowError and ValueError can be produced by
      malformed literals).
    )r   r+   )r   r   r   s      r   r   r   \   s    & (FHf==r%   c                       e Zd ZdZd Zd Zy)r   zInstances of this class behave much like the built-in compile
    function, but if one is used to compile text containing a future
    statement, it "remembers" and compiles all subsequent program texts
    with the statement in force.c                 (    t         t        z  | _        y N)r(   r'   r*   selfs    r   __init__zCompile.__init__v   s    +.II
r%   c                    | j                   }|j                  dd      du r|t         z  }|t         z  }t	        ||||d      }t
        D ];  }|j                  |j                  z  s| xj                   |j                  z  c_         = |S )Nr   TF)r*   getr(   r'   r)   	_featuresco_flagscompiler_flag)r1   r   r   r   kwargsr*   codeobfeatures           r   __call__zCompile.__call__y   s    

::($/58,,,E111E65$?  	4G!6!66

g333
	4 r%   N__name__
__module____qualname____doc__r2   r;    r%   r   r   r   q   s    $J	r%   r   c                       e Zd ZdZd ZddZy)r   a(  Instances of this class have __call__ methods identical in
    signature to compile_command; the difference is that if the
    instance compiles program text containing a __future__ statement,
    the instance 'remembers' and compiles all subsequent program texts
    with the statement in force.c                 "    t               | _        y r/   )r   r   r0   s    r   r2   zCommandCompiler.__init__   s    	r%   c                 2    t        | j                  |||      S )a  Compile a command and determine whether it is incomplete.

        Arguments:

        source -- the source string; may contain \n characters
        filename -- optional filename from which source was read;
                    default "<input>"
        symbol -- optional grammar start symbol; "single" (default) or
                  "eval"

        Return value / exceptions raised:

        - Return a code object if the command is complete and valid
        - Return None if the command is incomplete
        - Raise SyntaxError, ValueError or OverflowError if the command is a
          syntax error (OverflowError and ValueError can be produced by
          malformed literals).
        )r   r   )r1   r   r   r   s       r   r;   zCommandCompiler.__call__   s    & dmmVXvFFr%   Nz<input>singler<   rA   r%   r   r   r      s    $"Gr%   r   )TrE   )r@   
__future__r   all_feature_namesgetattrr5   __all__r(   r'   r   r$   r+   r   r   r   )fnames   0r   <module>rL      s    D   %668 Z' 8	 <
  $ F44>* &G G}8s   A