optimizer.py (1399B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\jinja2\optimizer.py 2 from jinja2 import nodes 3 from jinja2.visitor import NodeTransformer 4 5 def optimize(node, environment): 6 optimizer = Optimizer(environment) 7 return optimizer.visit(node) 8 9 10 class Optimizer(NodeTransformer): 11 12 def __init__(self, environment): 13 self.environment = environment 14 15 def visit_If(self, node): 16 if node.find(nodes.Block) is not None: 17 return self.generic_visit(node) 18 try: 19 val = self.visit(node.test).as_const() 20 except nodes.Impossible: 21 return self.generic_visit(node) 22 23 if val: 24 body = node.body 25 else: 26 body = node.else_ 27 result = [] 28 for node in body: 29 result.extend(self.visit_list(node)) 30 31 return result 32 33 def fold(self, node): 34 node = self.generic_visit(node) 35 try: 36 return nodes.Const.from_untrusted(node.as_const(), lineno=node.lineno, environment=self.environment) 37 except nodes.Impossible: 38 return node 39 40 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 41 del fold