관리-도구
편집 파일: compiler.cpython-39.pyc
a �`� � @ sB d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl mZ ddl mZ dd l mZ dd lmZ ddlmZ ddlmZ dd lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% dddddd d!d"d#�Z&e'e(d$��rLd$Z)nd%Z)d&gZ*ze+d'� e*�,d(� W n e-�y� Y n0 ze+d)� W n e-�y� d*Z.Y n0 d+Z.d,d-� Z/dCd/d0�Z0d1d2� Z1d3d4� Z2G d5d6� d6e3�Z4G d7d8� d8e3�Z5G d9d:� d:e6�Z7G d;d<� d<e%�Z8G d=d>� d>e%�Z9G d?d@� d@e:�Z;G dAdB� dBe%�Z<d.S )Dz0Compiles nodes from the parser into Python code.� )� namedtuple��update_wrapper)�chain)� iskeyword)�escape)�Markup� )�nodes)�imap)� iteritems)�izip)�NativeStringIO)� range_type)�string_types)� text_type)�TemplateAssertionError)�Symbols)�VAR_LOAD_ALIAS)�VAR_LOAD_PARAMETER)�VAR_LOAD_RESOLVE)�VAR_LOAD_UNDEFINED)�EvalContext)� Optimizer)�concat)�NodeVisitorz==z!=�>z>=�<z<=�inznot in)�eq�ne�gtZgteq�ltZlteqr Znotinr �itemsZdivisionz%from __future__ import generator_stopZgenerator_stopzdef f(): yield from x()FTc s � fdd�}t |� �S )Nc sF | j r2|jjs2| j�||j�}||kr2| �||�S � | ||fi |��S �N)� optimized�eval_ctx�volatile� optimizer�visit)�self�node�frame�kwargsZnew_node��f� �3/usr/lib/python3.9/site-packages/jinja2/compiler.py�new_funcC s zoptimizeconst.<locals>.new_funcr )r/ r2 r0 r. r1 � optimizeconstB s r3 Nc C sH t | tj�std��|�||||||�}|�| � |du rD|j�� S dS )z+Generate the python source for a node tree.z Can't compile non template nodesN)� isinstancer ZTemplate� TypeErrorZcode_generator_classr) �stream�getvalue)r+ �environment�name�filenamer6 � defer_initr% � generatorr0 r0 r1 �generateN s � r= c C s� | du s| t u s| tu rdS t| �ttttttft v r<dS t| �t ttt fv rl| D ]}t|�sT dS qTdS t| �tu r�t| �D ]$\}} t|�s� dS t| �s� dS q�dS dS )z)Does the node have a safe representation?NTF)�NotImplemented�Ellipsis�type�bool�int�float�complexr r r �tuple�list�set� frozenset� has_safe_repr�dictr )�value�item�keyr0 r0 r1 rI \ s"