o
    4cm                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ej
r7eg dZed	Zneg d
ZedZee dddZG dd dejZG dd dejZG dd dejZG dd deZdS )zyHandles parsing of Python code.

Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler
module is used.
    N)	_ast_util)compat)
exceptions)util)arg_stringname)TrueFalseNoneprintarg)r   r   r	   idexecc              
   K   sP   zt | d|W S  ty'   tjdt jjt | dd f fi |w )zParse an expression into ASTz	<unknown>z(%s) %s (%r)r   2   )	r   parse	Exceptionr   SyntaxExceptionr   exception_as	__class____name__)codemodeexception_kwargs r   C/var/www/html/gps/gps/lib/python3.10/site-packages/mako/pyparser.pyr   )   s   

r   c                   @   sz   e Zd Zdd Zdd Zdd Zdd Zejrd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )FindIdentifiersc                 K   s$   d| _ d| _t | _|| _|| _d S NF)in_functionin_assign_targetssetlocal_ident_stacklistenerr   selfr    r   r   r   r   __init__;   s
   
zFindIdentifiers.__init__c                 C   s(   | j s| jj| d S | j| d S N)r   r    declared_identifiersaddr   )r"   namer   r   r   _add_declaredB   s   zFindIdentifiers._add_declaredc                 C   s   |  |j d S r$   )r(   r'   r"   noder   r   r   visit_ClassDefH      zFindIdentifiers.visit_ClassDefc                 C   s8   |  |j | j}d| _|jD ]}|  | q|| _d S NT)visitvaluer   targets)r"   r*   in_anr   r   r   visit_AssignK   s   

zFindIdentifiers.visit_Assignc                 C   sF   |j d ur| |j  |jd ur| |j |jD ]}| | qd S r$   )r'   r(   typer.   bodyr"   r*   	statementr   r   r   visit_ExceptHandler]   s   


z#FindIdentifiers.visit_ExceptHandlerc                 G   s   |  |d d S r-   )_visit_function)r"   r*   argsr   r   r   visit_Lambdae   r,   zFindIdentifiers.visit_Lambdac                 C   s   |  |j | |d d S r   )r(   r'   r9   r)   r   r   r   visit_FunctionDefh      z!FindIdentifiers.visit_FunctionDefc                 c   s6    |D ]}t |tjr|jD ]}|V  qq|V  qd S r$   )
isinstance_astTupleelts)r"   r:   r   r2   r   r   r   _expand_tuplesl   s   
zFindIdentifiers._expand_tuplesc                 C   sj   | j }d| _ | j}|dd | |jjD | _|r"| |j n|jD ]}| | q%|| _ || _d S )NTc                 S      g | ]}t |qS r   arg_id.0r   r   r   r   
<listcomp>       z3FindIdentifiers._visit_function.<locals>.<listcomp>)r   r   unionrB   r:   r.   r5   )r"   r*   islambdainfr   r2   r   r   r   r9   t   s   

zFindIdentifiers._visit_functionc                 C   sH   |  |j |  |j |jD ]}|  | q|jD ]}|  | qd S r$   )r.   itertargetr5   orelser6   r   r   r   	visit_For   s   

zFindIdentifiers.visit_Forc                 C   sb   t |jtjr| |j d S |jtvr+|j| jjvr-|j| j	vr/| jj
|j d S d S d S d S r$   )r>   ctxr?   Storer(   r   reservedr    r%   r   undeclared_identifiersr&   r)   r   r   r   
visit_Name   s   
zFindIdentifiers.visit_Namec                 C   s>   |j D ]}|jd ur| |j q| |jdd  qd S )N.r   )namesasnamer(   r'   splitr"   r*   r'   r   r   r   visit_Import   s
   

zFindIdentifiers.visit_Importc                 C   sR   |j D ]#}|jd ur| |j q|jdkr tj	di | j| |j qd S )N*'import *' is not supported, since all identifier names must be explicitly declared.  Please use the form 'from <modulename> import <name1>, <name2>, ...' instead.)r]   )rW   rX   r(   r'   r   CompileExceptionr   rZ   r   r   r   visit_ImportFrom   s   


z FindIdentifiers.visit_ImportFromN)r   
__module____qualname__r#   r(   r+   r3   r   py3kr8   r;   r<   rB   r9   rP   rU   r[   r_   r   r   r   r   r   :   s    r   c                   @      e Zd Zdd Zdd ZdS )	FindTuplec                 K   s   || _ || _|| _d S r$   )r    r   code_factory)r"   r    re   r   r   r   r   r#      s   
zFindTuple.__init__c                 C   sx   |j D ]6}| j|fi | j}| jj| | jjt|  | jj	}|
|j	| j_	| jj}|
|j| j_qd S r$   )rA   re   r   r    codeargsappendr:   ExpressionGeneratorr/   r%   rJ   rT   )r"   r*   r2   pldiluir   r   r   visit_Tuple   s   

zFindTuple.visit_TupleN)r   r`   ra   r#   rl   r   r   r   r   rd      s    rd   c                   @   rc   )	ParseFuncc                 K   s   || _ || _d S r$   )r    r   r!   r   r   r   r#      s   
zParseFunc.__init__c                 C   s   |j | j_dd |jjD }|jjr|t|jj tjr!g }n	dd |jj	D }|jj
r7|t|jj
 || j_|jj| j_|| j_tjrMg | j_n|jj| j_|jj| j_|jj
| j_d S )Nc                 S   rC   r   rD   rF   r   r   r   rH      rI   z/ParseFunc.visit_FunctionDef.<locals>.<listcomp>c                 S   rC   r   rD   rF   r   r   r   rH      rI   )r'   r    funcnamer:   varargrg   r   r   py2k
kwonlyargskwargargnamesdefaults
kwargnames
kwdefaultskw_defaultsvarargskwargs)r"   r*   rs   ru   r   r   r   r<      s"   

zParseFunc.visit_FunctionDefN)r   r`   ra   r#   r<   r   r   r   r   rm          rm   c                   @   rc   )rh   c                 C   s   t d| _| j| d S )Nz    )r   SourceGenerator	generatorr.   )r"   astnoder   r   r   r#      r=   zExpressionGenerator.__init__c                 C   s   d | jjS )N )joinr|   result)r"   r   r   r   r/      s   zExpressionGenerator.valueN)r   r`   ra   r#   r/   r   r   r   r   rh      rz   rh   )r   )__doc__operatorr?   makor   r   r   r   mako.compatr   rb   r   rS   
attrgetterrE   restore__astr   NodeVisitorr   rd   rm   objectrh   r   r   r   r   <module>   s&   


