File: //home/arjun/projects/env/lib/python3.10/site-packages/mako/__pycache__/ast.cpython-310.pyc
o
%we� � @ sr d Z ddlZddlmZ ddlmZ G dd� d�ZG dd� d�ZG d d
� d
e�ZG dd� d�ZG d
d� de�Z dS )zjutilities for analyzing expressions and blocks of Python
code, as well as generating Python from AST nodes� N)�
exceptions)�pyparserc @ � e Zd ZdZdd� ZdS )�
PythonCodez<represents information about a string containing Python codec K s^ || _ t� | _t� | _t|t�rtj|�� dfi |��}n|}tj | fi |��}|�
|� d S )N�exec)�code�set�declared_identifiers�undeclared_identifiers�
isinstance�strr �parse�lstrip�FindIdentifiers�visit��selfr �exception_kwargs�expr�f� r �A/home/arjun/projects/env/lib/python3.10/site-packages/mako/ast.py�__init__ s
zPythonCode.__init__N��__name__�
__module__�__qualname__�__doc__r r r r r r � r c @ r )�ArgumentListzBparses a fragment of code as a comma-separated list of expressionsc K s� g | _ g | _t� | _t� | _t|t�r.t�d|�r#t�d|�s#|d7 }t j
|dfi |��}n|}t j| tfi |��}|�
|� d S )Nz\Sz,\s*$�,r )�codeargs�argsr r r
r r �re�matchr r
� FindTupler r r r r r r 6 s
zArgumentList.__init__Nr r r r r r 2 r r c � e Zd ZdZ� fdd�Z� ZS )�PythonFragmentz�extends PythonCode to provide identifier lookups in partial control
statements
e.g.::
for x in 5:
elif y==9:
except (MyException, e):
c s� t �d|�� t j�}|stjd| fi |���|�d�r%|d |�d�� }|�dd�\}}|dv r6|d }n3|dkr?|d }n*|d
v rJd| d }n|dkrUd
| d }n|dkr^|d }ntjd| fi |���t� j |fi |�� d S )Nz^(\w+)(?:\s+(.*?))?:\s*(#|$)z0Fragment '%s' is not a partial control statement� � � )�for�if�while�pass�tryzpass
except:pass)�elif�elsezif False:pass
�exceptz try:pass
�withz!Unsupported control keyword: '%s')
r# r$ �strip�Sr �CompileException�group�start�superr )r r r �m�keywordr �� __class__r r r U s4 ��
��zPythonFragment.__init__�r r r r r �
__classcell__r r r<