NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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