/snap/core20/2769/usr/lib/python3/dist-packages/jinja2
NameSizeModeActions
__pycache__/-0755rm
asyncfilters.py41440644editdlrm
asyncsupport.py78780644editdlrm
bccache.py127940644editdlrm
compiler.py657470644editdlrm
constants.py16260644editdlrm
debug.py120450644editdlrm
defaults.py14000644editdlrm
environment.py508490644editdlrm
exceptions.py44280644editdlrm
ext.py245000644editdlrm
filters.py375730644editdlrm
idtracking.py91970644editdlrm
lexer.py286160644editdlrm
loaders.py173820644editdlrm
meta.py43400644editdlrm
nativetypes.py73080644editdlrm
nodes.py309210644editdlrm
optimizer.py17220644editdlrm
parser.py358750644editdlrm
runtime.py278700644editdlrm
sandbox.py178250644editdlrm
tests.py42960644editdlrm
utils.py209690644editdlrm
visitor.py33160644editdlrm
_compat.py25960644editdlrm
_identifier.py17260644editdlrm
__init__.py26160644editdlrm
Edit: /snap/core20/2769/usr/lib/python3/dist-packages/jinja2/optimizer.py (1722B)
# -*- coding: utf-8 -*- """ jinja2.optimizer ~~~~~~~~~~~~~~~~ The jinja optimizer is currently trying to constant fold a few expressions and modify the AST in place so that it should be easier to evaluate it. Because the AST does not contain all the scoping information and the compiler has to find that out, we cannot do all the optimizations we want. For example loop unrolling doesn't work because unrolled loops would have a different scoping. The solution would be a second syntax tree that has the scoping rules stored. :copyright: (c) 2017 by the Jinja Team. :license: BSD. """ from jinja2 import nodes from jinja2.visitor import NodeTransformer def optimize(node, environment): """The context hint can be used to perform an static optimization based on the context given.""" optimizer = Optimizer(environment) return optimizer.visit(node) class Optimizer(NodeTransformer): def __init__(self, environment): self.environment = environment def fold(self, node, eval_ctx=None): """Do constant folding.""" node = self.generic_visit(node) try: return nodes.Const.from_untrusted(node.as_const(eval_ctx), lineno=node.lineno, environment=self.environment) except nodes.Impossible: return node visit_Add = visit_Sub = visit_Mul = visit_Div = visit_FloorDiv = \ visit_Pow = visit_Mod = visit_And = visit_Or = visit_Pos = visit_Neg = \ visit_Not = visit_Compare = visit_Getitem = visit_Getattr = visit_Call = \ visit_Filter = visit_Test = visit_CondExpr = fold del fold