Home | History | Annotate | Download | only in jinja2
      1 # -*- coding: utf-8 -*-
      2 """
      3     jinja2.nodes
      4     ~~~~~~~~~~~~
      5 
      6     This module implements additional nodes derived from the ast base node.
      7 
      8     It also provides some node tree helper functions like `in_lineno` and
      9     `get_nodes` used by the parser and translator in order to normalize
     10     python and jinja nodes.
     11 
     12     :copyright: (c) 2010 by the Jinja Team.
     13     :license: BSD, see LICENSE for more details.
     14 """
     15 import operator
     16 
     17 from collections import deque
     18 from jinja2.utils import Markup
     19 from jinja2._compat import next, izip, with_metaclass, text_type, \
     20      method_type, function_type
     21 
     22 
     23 #: the types we support for context functions
     24 _context_function_types = (function_type, method_type)
     25 
     26 
     27 _binop_to_func = {
     28     '*':        operator.mul,
     29     '/':        operator.truediv,
     30     '//':       operator.floordiv,
     31     '**':       operator.pow,
     32     '%':        operator.mod,
     33     '+':        operator.add,
     34     '-':        operator.sub
     35 }
     36 
     37 _uaop_to_func = {
     38     'not':      operator.not_,
     39     '+':        operator.pos,
     40     '-':        operator.neg
     41 }
     42 
     43 _cmpop_to_func = {
     44     'eq':       operator.eq,
     45     'ne':       operator.ne,
     46     'gt':       operator.gt,
     47     'gteq':     operator.ge,
     48     'lt':       operator.lt,
     49     'lteq':     operator.le,
     50     'in':       lambda a, b: a in b,
     51     'notin':    lambda a, b: a not in b
     52 }
     53 
     54 
     55 class Impossible(Exception):
     56     """Raised if the node could not perform a requested action."""
     57 
     58 
     59 class NodeType(type):
     60     """A metaclass for nodes that handles the field and attribute
     61     inheritance.  fields and attributes from the parent class are
     62     automatically forwarded to the child."""
     63 
     64     def __new__(cls, name, bases, d):
     65         for attr in 'fields', 'attributes':
     66             storage = []
     67             storage.extend(getattr(bases[0], attr, ()))
     68             storage.extend(d.get(attr, ()))
     69             assert len(bases) == 1, 'multiple inheritance not allowed'
     70             assert len(storage) == len(set(storage)), 'layout conflict'
     71             d[attr] = tuple(storage)
     72         d.setdefault('abstract', False)
     73         return type.__new__(cls, name, bases, d)
     74 
     75 
     76 class EvalContext(object):
     77     """Holds evaluation time information.  Custom attributes can be attached
     78     to it in extensions.
     79     """
     80 
     81     def __init__(self, environment, template_name=None):
     82         self.environment = environment
     83         if callable(environment.autoescape):
     84             self.autoescape = environment.autoescape(template_name)
     85         else:
     86             self.autoescape = environment.autoescape
     87         self.volatile = False
     88 
     89     def save(self):
     90         return self.__dict__.copy()
     91 
     92     def revert(self, old):
     93         self.__dict__.clear()
     94         self.__dict__.update(old)
     95 
     96 
     97 def get_eval_context(node, ctx):
     98     if ctx is None:
     99         if node.environment is None:
    100             raise RuntimeError('if no eval context is passed, the '
    101                                'node must have an attached '
    102                                'environment.')
    103         return EvalContext(node.environment)
    104     return ctx
    105 
    106 
    107 class Node(with_metaclass(NodeType, object)):
    108     """Baseclass for all Jinja2 nodes.  There are a number of nodes available
    109     of different types.  There are four major types:
    110 
    111     -   :class:`Stmt`: statements
    112     -   :class:`Expr`: expressions
    113     -   :class:`Helper`: helper nodes
    114     -   :class:`Template`: the outermost wrapper node
    115 
    116     All nodes have fields and attributes.  Fields may be other nodes, lists,
    117     or arbitrary values.  Fields are passed to the constructor as regular
    118     positional arguments, attributes as keyword arguments.  Each node has
    119     two attributes: `lineno` (the line number of the node) and `environment`.
    120     The `environment` attribute is set at the end of the parsing process for
    121     all nodes automatically.
    122     """
    123     fields = ()
    124     attributes = ('lineno', 'environment')
    125     abstract = True
    126 
    127     def __init__(self, *fields, **attributes):
    128         if self.abstract:
    129             raise TypeError('abstract nodes are not instanciable')
    130         if fields:
    131             if len(fields) != len(self.fields):
    132                 if not self.fields:
    133                     raise TypeError('%r takes 0 arguments' %
    134                                     self.__class__.__name__)
    135                 raise TypeError('%r takes 0 or %d argument%s' % (
    136                     self.__class__.__name__,
    137                     len(self.fields),
    138                     len(self.fields) != 1 and 's' or ''
    139                 ))
    140             for name, arg in izip(self.fields, fields):
    141                 setattr(self, name, arg)
    142         for attr in self.attributes:
    143             setattr(self, attr, attributes.pop(attr, None))
    144         if attributes:
    145             raise TypeError('unknown attribute %r' %
    146                             next(iter(attributes)))
    147 
    148     def iter_fields(self, exclude=None, only=None):
    149         """This method iterates over all fields that are defined and yields
    150         ``(key, value)`` tuples.  Per default all fields are returned, but
    151         it's possible to limit that to some fields by providing the `only`
    152         parameter or to exclude some using the `exclude` parameter.  Both
    153         should be sets or tuples of field names.
    154         """
    155         for name in self.fields:
    156             if (exclude is only is None) or \
    157                (exclude is not None and name not in exclude) or \
    158                (only is not None and name in only):
    159                 try:
    160                     yield name, getattr(self, name)
    161                 except AttributeError:
    162                     pass
    163 
    164     def iter_child_nodes(self, exclude=None, only=None):
    165         """Iterates over all direct child nodes of the node.  This iterates
    166         over all fields and yields the values of they are nodes.  If the value
    167         of a field is a list all the nodes in that list are returned.
    168         """
    169         for field, item in self.iter_fields(exclude, only):
    170             if isinstance(item, list):
    171                 for n in item:
    172                     if isinstance(n, Node):
    173                         yield n
    174             elif isinstance(item, Node):
    175                 yield item
    176 
    177     def find(self, node_type):
    178         """Find the first node of a given type.  If no such node exists the
    179         return value is `None`.
    180         """
    181         for result in self.find_all(node_type):
    182             return result
    183 
    184     def find_all(self, node_type):
    185         """Find all the nodes of a given type.  If the type is a tuple,
    186         the check is performed for any of the tuple items.
    187         """
    188         for child in self.iter_child_nodes():
    189             if isinstance(child, node_type):
    190                 yield child
    191             for result in child.find_all(node_type):
    192                 yield result
    193 
    194     def set_ctx(self, ctx):
    195         """Reset the context of a node and all child nodes.  Per default the
    196         parser will all generate nodes that have a 'load' context as it's the
    197         most common one.  This method is used in the parser to set assignment
    198         targets and other nodes to a store context.
    199         """
    200         todo = deque([self])
    201         while todo:
    202             node = todo.popleft()
    203             if 'ctx' in node.fields:
    204                 node.ctx = ctx
    205             todo.extend(node.iter_child_nodes())
    206         return self
    207 
    208     def set_lineno(self, lineno, override=False):
    209         """Set the line numbers of the node and children."""
    210         todo = deque([self])
    211         while todo:
    212             node = todo.popleft()
    213             if 'lineno' in node.attributes:
    214                 if node.lineno is None or override:
    215                     node.lineno = lineno
    216             todo.extend(node.iter_child_nodes())
    217         return self
    218 
    219     def set_environment(self, environment):
    220         """Set the environment for all nodes."""
    221         todo = deque([self])
    222         while todo:
    223             node = todo.popleft()
    224             node.environment = environment
    225             todo.extend(node.iter_child_nodes())
    226         return self
    227 
    228     def __eq__(self, other):
    229         return type(self) is type(other) and \
    230                tuple(self.iter_fields()) == tuple(other.iter_fields())
    231 
    232     def __ne__(self, other):
    233         return not self.__eq__(other)
    234 
    235     # Restore Python 2 hashing behavior on Python 3
    236     __hash__ = object.__hash__
    237 
    238     def __repr__(self):
    239         return '%s(%s)' % (
    240             self.__class__.__name__,
    241             ', '.join('%s=%r' % (arg, getattr(self, arg, None)) for
    242                       arg in self.fields)
    243         )
    244 
    245 
    246 class Stmt(Node):
    247     """Base node for all statements."""
    248     abstract = True
    249 
    250 
    251 class Helper(Node):
    252     """Nodes that exist in a specific context only."""
    253     abstract = True
    254 
    255 
    256 class Template(Node):
    257     """Node that represents a template.  This must be the outermost node that
    258     is passed to the compiler.
    259     """
    260     fields = ('body',)
    261 
    262 
    263 class Output(Stmt):
    264     """A node that holds multiple expressions which are then printed out.
    265     This is used both for the `print` statement and the regular template data.
    266     """
    267     fields = ('nodes',)
    268 
    269 
    270 class Extends(Stmt):
    271     """Represents an extends statement."""
    272     fields = ('template',)
    273 
    274 
    275 class For(Stmt):
    276     """The for loop.  `target` is the target for the iteration (usually a
    277     :class:`Name` or :class:`Tuple`), `iter` the iterable.  `body` is a list
    278     of nodes that are used as loop-body, and `else_` a list of nodes for the
    279     `else` block.  If no else node exists it has to be an empty list.
    280 
    281     For filtered nodes an expression can be stored as `test`, otherwise `None`.
    282     """
    283     fields = ('target', 'iter', 'body', 'else_', 'test', 'recursive')
    284 
    285 
    286 class If(Stmt):
    287     """If `test` is true, `body` is rendered, else `else_`."""
    288     fields = ('test', 'body', 'else_')
    289 
    290 
    291 class Macro(Stmt):
    292     """A macro definition.  `name` is the name of the macro, `args` a list of
    293     arguments and `defaults` a list of defaults if there are any.  `body` is
    294     a list of nodes for the macro body.
    295     """
    296     fields = ('name', 'args', 'defaults', 'body')
    297 
    298 
    299 class CallBlock(Stmt):
    300     """Like a macro without a name but a call instead.  `call` is called with
    301     the unnamed macro as `caller` argument this node holds.
    302     """
    303     fields = ('call', 'args', 'defaults', 'body')
    304 
    305 
    306 class FilterBlock(Stmt):
    307     """Node for filter sections."""
    308     fields = ('body', 'filter')
    309 
    310 
    311 class Block(Stmt):
    312     """A node that represents a block."""
    313     fields = ('name', 'body', 'scoped')
    314 
    315 
    316 class Include(Stmt):
    317     """A node that represents the include tag."""
    318     fields = ('template', 'with_context', 'ignore_missing')
    319 
    320 
    321 class Import(Stmt):
    322     """A node that represents the import tag."""
    323     fields = ('template', 'target', 'with_context')
    324 
    325 
    326 class FromImport(Stmt):
    327     """A node that represents the from import tag.  It's important to not
    328     pass unsafe names to the name attribute.  The compiler translates the
    329     attribute lookups directly into getattr calls and does *not* use the
    330     subscript callback of the interface.  As exported variables may not
    331     start with double underscores (which the parser asserts) this is not a
    332     problem for regular Jinja code, but if this node is used in an extension
    333     extra care must be taken.
    334 
    335     The list of names may contain tuples if aliases are wanted.
    336     """
    337     fields = ('template', 'names', 'with_context')
    338 
    339 
    340 class ExprStmt(Stmt):
    341     """A statement that evaluates an expression and discards the result."""
    342     fields = ('node',)
    343 
    344 
    345 class Assign(Stmt):
    346     """Assigns an expression to a target."""
    347     fields = ('target', 'node')
    348 
    349 
    350 class Expr(Node):
    351     """Baseclass for all expressions."""
    352     abstract = True
    353 
    354     def as_const(self, eval_ctx=None):
    355         """Return the value of the expression as constant or raise
    356         :exc:`Impossible` if this was not possible.
    357 
    358         An :class:`EvalContext` can be provided, if none is given
    359         a default context is created which requires the nodes to have
    360         an attached environment.
    361 
    362         .. versionchanged:: 2.4
    363            the `eval_ctx` parameter was added.
    364         """
    365         raise Impossible()
    366 
    367     def can_assign(self):
    368         """Check if it's possible to assign something to this node."""
    369         return False
    370 
    371 
    372 class BinExpr(Expr):
    373     """Baseclass for all binary expressions."""
    374     fields = ('left', 'right')
    375     operator = None
    376     abstract = True
    377 
    378     def as_const(self, eval_ctx=None):
    379         eval_ctx = get_eval_context(self, eval_ctx)
    380         # intercepted operators cannot be folded at compile time
    381         if self.environment.sandboxed and \
    382            self.operator in self.environment.intercepted_binops:
    383             raise Impossible()
    384         f = _binop_to_func[self.operator]
    385         try:
    386             return f(self.left.as_const(eval_ctx), self.right.as_const(eval_ctx))
    387         except Exception:
    388             raise Impossible()
    389 
    390 
    391 class UnaryExpr(Expr):
    392     """Baseclass for all unary expressions."""
    393     fields = ('node',)
    394     operator = None
    395     abstract = True
    396 
    397     def as_const(self, eval_ctx=None):
    398         eval_ctx = get_eval_context(self, eval_ctx)
    399         # intercepted operators cannot be folded at compile time
    400         if self.environment.sandboxed and \
    401            self.operator in self.environment.intercepted_unops:
    402             raise Impossible()
    403         f = _uaop_to_func[self.operator]
    404         try:
    405             return f(self.node.as_const(eval_ctx))
    406         except Exception:
    407             raise Impossible()
    408 
    409 
    410 class Name(Expr):
    411     """Looks up a name or stores a value in a name.
    412     The `ctx` of the node can be one of the following values:
    413 
    414     -   `store`: store a value in the name
    415     -   `load`: load that name
    416     -   `param`: like `store` but if the name was defined as function parameter.
    417     """
    418     fields = ('name', 'ctx')
    419 
    420     def can_assign(self):
    421         return self.name not in ('true', 'false', 'none',
    422                                  'True', 'False', 'None')
    423 
    424 
    425 class Literal(Expr):
    426     """Baseclass for literals."""
    427     abstract = True
    428 
    429 
    430 class Const(Literal):
    431     """All constant values.  The parser will return this node for simple
    432     constants such as ``42`` or ``"foo"`` but it can be used to store more
    433     complex values such as lists too.  Only constants with a safe
    434     representation (objects where ``eval(repr(x)) == x`` is true).
    435     """
    436     fields = ('value',)
    437 
    438     def as_const(self, eval_ctx=None):
    439         return self.value
    440 
    441     @classmethod
    442     def from_untrusted(cls, value, lineno=None, environment=None):
    443         """Return a const object if the value is representable as
    444         constant value in the generated code, otherwise it will raise
    445         an `Impossible` exception.
    446         """
    447         from .compiler import has_safe_repr
    448         if not has_safe_repr(value):
    449             raise Impossible()
    450         return cls(value, lineno=lineno, environment=environment)
    451 
    452 
    453 class TemplateData(Literal):
    454     """A constant template string."""
    455     fields = ('data',)
    456 
    457     def as_const(self, eval_ctx=None):
    458         eval_ctx = get_eval_context(self, eval_ctx)
    459         if eval_ctx.volatile:
    460             raise Impossible()
    461         if eval_ctx.autoescape:
    462             return Markup(self.data)
    463         return self.data
    464 
    465 
    466 class Tuple(Literal):
    467     """For loop unpacking and some other things like multiple arguments
    468     for subscripts.  Like for :class:`Name` `ctx` specifies if the tuple
    469     is used for loading the names or storing.
    470     """
    471     fields = ('items', 'ctx')
    472 
    473     def as_const(self, eval_ctx=None):
    474         eval_ctx = get_eval_context(self, eval_ctx)
    475         return tuple(x.as_const(eval_ctx) for x in self.items)
    476 
    477     def can_assign(self):
    478         for item in self.items:
    479             if not item.can_assign():
    480                 return False
    481         return True
    482 
    483 
    484 class List(Literal):
    485     """Any list literal such as ``[1, 2, 3]``"""
    486     fields = ('items',)
    487 
    488     def as_const(self, eval_ctx=None):
    489         eval_ctx = get_eval_context(self, eval_ctx)
    490         return [x.as_const(eval_ctx) for x in self.items]
    491 
    492 
    493 class Dict(Literal):
    494     """Any dict literal such as ``{1: 2, 3: 4}``.  The items must be a list of
    495     :class:`Pair` nodes.
    496     """
    497     fields = ('items',)
    498 
    499     def as_const(self, eval_ctx=None):
    500         eval_ctx = get_eval_context(self, eval_ctx)
    501         return dict(x.as_const(eval_ctx) for x in self.items)
    502 
    503 
    504 class Pair(Helper):
    505     """A key, value pair for dicts."""
    506     fields = ('key', 'value')
    507 
    508     def as_const(self, eval_ctx=None):
    509         eval_ctx = get_eval_context(self, eval_ctx)
    510         return self.key.as_const(eval_ctx), self.value.as_const(eval_ctx)
    511 
    512 
    513 class Keyword(Helper):
    514     """A key, value pair for keyword arguments where key is a string."""
    515     fields = ('key', 'value')
    516 
    517     def as_const(self, eval_ctx=None):
    518         eval_ctx = get_eval_context(self, eval_ctx)
    519         return self.key, self.value.as_const(eval_ctx)
    520 
    521 
    522 class CondExpr(Expr):
    523     """A conditional expression (inline if expression).  (``{{
    524     foo if bar else baz }}``)
    525     """
    526     fields = ('test', 'expr1', 'expr2')
    527 
    528     def as_const(self, eval_ctx=None):
    529         eval_ctx = get_eval_context(self, eval_ctx)
    530         if self.test.as_const(eval_ctx):
    531             return self.expr1.as_const(eval_ctx)
    532 
    533         # if we evaluate to an undefined object, we better do that at runtime
    534         if self.expr2 is None:
    535             raise Impossible()
    536 
    537         return self.expr2.as_const(eval_ctx)
    538 
    539 
    540 class Filter(Expr):
    541     """This node applies a filter on an expression.  `name` is the name of
    542     the filter, the rest of the fields are the same as for :class:`Call`.
    543 
    544     If the `node` of a filter is `None` the contents of the last buffer are
    545     filtered.  Buffers are created by macros and filter blocks.
    546     """
    547     fields = ('node', 'name', 'args', 'kwargs', 'dyn_args', 'dyn_kwargs')
    548 
    549     def as_const(self, eval_ctx=None):
    550         eval_ctx = get_eval_context(self, eval_ctx)
    551         if eval_ctx.volatile or self.node is None:
    552             raise Impossible()
    553         # we have to be careful here because we call filter_ below.
    554         # if this variable would be called filter, 2to3 would wrap the
    555         # call in a list beause it is assuming we are talking about the
    556         # builtin filter function here which no longer returns a list in
    557         # python 3.  because of that, do not rename filter_ to filter!
    558         filter_ = self.environment.filters.get(self.name)
    559         if filter_ is None or getattr(filter_, 'contextfilter', False):
    560             raise Impossible()
    561         obj = self.node.as_const(eval_ctx)
    562         args = [x.as_const(eval_ctx) for x in self.args]
    563         if getattr(filter_, 'evalcontextfilter', False):
    564             args.insert(0, eval_ctx)
    565         elif getattr(filter_, 'environmentfilter', False):
    566             args.insert(0, self.environment)
    567         kwargs = dict(x.as_const(eval_ctx) for x in self.kwargs)
    568         if self.dyn_args is not None:
    569             try:
    570                 args.extend(self.dyn_args.as_const(eval_ctx))
    571             except Exception:
    572                 raise Impossible()
    573         if self.dyn_kwargs is not None:
    574             try:
    575                 kwargs.update(self.dyn_kwargs.as_const(eval_ctx))
    576             except Exception:
    577                 raise Impossible()
    578         try:
    579             return filter_(obj, *args, **kwargs)
    580         except Exception:
    581             raise Impossible()
    582 
    583 
    584 class Test(Expr):
    585     """Applies a test on an expression.  `name` is the name of the test, the
    586     rest of the fields are the same as for :class:`Call`.
    587     """
    588     fields = ('node', 'name', 'args', 'kwargs', 'dyn_args', 'dyn_kwargs')
    589 
    590 
    591 class Call(Expr):
    592     """Calls an expression.  `args` is a list of arguments, `kwargs` a list
    593     of keyword arguments (list of :class:`Keyword` nodes), and `dyn_args`
    594     and `dyn_kwargs` has to be either `None` or a node that is used as
    595     node for dynamic positional (``*args``) or keyword (``**kwargs``)
    596     arguments.
    597     """
    598     fields = ('node', 'args', 'kwargs', 'dyn_args', 'dyn_kwargs')
    599 
    600     def as_const(self, eval_ctx=None):
    601         eval_ctx = get_eval_context(self, eval_ctx)
    602         if eval_ctx.volatile:
    603             raise Impossible()
    604         obj = self.node.as_const(eval_ctx)
    605 
    606         # don't evaluate context functions
    607         args = [x.as_const(eval_ctx) for x in self.args]
    608         if isinstance(obj, _context_function_types):
    609             if getattr(obj, 'contextfunction', False):
    610                 raise Impossible()
    611             elif getattr(obj, 'evalcontextfunction', False):
    612                 args.insert(0, eval_ctx)
    613             elif getattr(obj, 'environmentfunction', False):
    614                 args.insert(0, self.environment)
    615 
    616         kwargs = dict(x.as_const(eval_ctx) for x in self.kwargs)
    617         if self.dyn_args is not None:
    618             try:
    619                 args.extend(self.dyn_args.as_const(eval_ctx))
    620             except Exception:
    621                 raise Impossible()
    622         if self.dyn_kwargs is not None:
    623             try:
    624                 kwargs.update(self.dyn_kwargs.as_const(eval_ctx))
    625             except Exception:
    626                 raise Impossible()
    627         try:
    628             return obj(*args, **kwargs)
    629         except Exception:
    630             raise Impossible()
    631 
    632 
    633 class Getitem(Expr):
    634     """Get an attribute or item from an expression and prefer the item."""
    635     fields = ('node', 'arg', 'ctx')
    636 
    637     def as_const(self, eval_ctx=None):
    638         eval_ctx = get_eval_context(self, eval_ctx)
    639         if self.ctx != 'load':
    640             raise Impossible()
    641         try:
    642             return self.environment.getitem(self.node.as_const(eval_ctx),
    643                                             self.arg.as_const(eval_ctx))
    644         except Exception:
    645             raise Impossible()
    646 
    647     def can_assign(self):
    648         return False
    649 
    650 
    651 class Getattr(Expr):
    652     """Get an attribute or item from an expression that is a ascii-only
    653     bytestring and prefer the attribute.
    654     """
    655     fields = ('node', 'attr', 'ctx')
    656 
    657     def as_const(self, eval_ctx=None):
    658         if self.ctx != 'load':
    659             raise Impossible()
    660         try:
    661             eval_ctx = get_eval_context(self, eval_ctx)
    662             return self.environment.getattr(self.node.as_const(eval_ctx),
    663                                             self.attr)
    664         except Exception:
    665             raise Impossible()
    666 
    667     def can_assign(self):
    668         return False
    669 
    670 
    671 class Slice(Expr):
    672     """Represents a slice object.  This must only be used as argument for
    673     :class:`Subscript`.
    674     """
    675     fields = ('start', 'stop', 'step')
    676 
    677     def as_const(self, eval_ctx=None):
    678         eval_ctx = get_eval_context(self, eval_ctx)
    679         def const(obj):
    680             if obj is None:
    681                 return None
    682             return obj.as_const(eval_ctx)
    683         return slice(const(self.start), const(self.stop), const(self.step))
    684 
    685 
    686 class Concat(Expr):
    687     """Concatenates the list of expressions provided after converting them to
    688     unicode.
    689     """
    690     fields = ('nodes',)
    691 
    692     def as_const(self, eval_ctx=None):
    693         eval_ctx = get_eval_context(self, eval_ctx)
    694         return ''.join(text_type(x.as_const(eval_ctx)) for x in self.nodes)
    695 
    696 
    697 class Compare(Expr):
    698     """Compares an expression with some other expressions.  `ops` must be a
    699     list of :class:`Operand`\s.
    700     """
    701     fields = ('expr', 'ops')
    702 
    703     def as_const(self, eval_ctx=None):
    704         eval_ctx = get_eval_context(self, eval_ctx)
    705         result = value = self.expr.as_const(eval_ctx)
    706         try:
    707             for op in self.ops:
    708                 new_value = op.expr.as_const(eval_ctx)
    709                 result = _cmpop_to_func[op.op](value, new_value)
    710                 value = new_value
    711         except Exception:
    712             raise Impossible()
    713         return result
    714 
    715 
    716 class Operand(Helper):
    717     """Holds an operator and an expression."""
    718     fields = ('op', 'expr')
    719 
    720 if __debug__:
    721     Operand.__doc__ += '\nThe following operators are available: ' + \
    722         ', '.join(sorted('``%s``' % x for x in set(_binop_to_func) |
    723                   set(_uaop_to_func) | set(_cmpop_to_func)))
    724 
    725 
    726 class Mul(BinExpr):
    727     """Multiplies the left with the right node."""
    728     operator = '*'
    729 
    730 
    731 class Div(BinExpr):
    732     """Divides the left by the right node."""
    733     operator = '/'
    734 
    735 
    736 class FloorDiv(BinExpr):
    737     """Divides the left by the right node and truncates conver the
    738     result into an integer by truncating.
    739     """
    740     operator = '//'
    741 
    742 
    743 class Add(BinExpr):
    744     """Add the left to the right node."""
    745     operator = '+'
    746 
    747 
    748 class Sub(BinExpr):
    749     """Substract the right from the left node."""
    750     operator = '-'
    751 
    752 
    753 class Mod(BinExpr):
    754     """Left modulo right."""
    755     operator = '%'
    756 
    757 
    758 class Pow(BinExpr):
    759     """Left to the power of right."""
    760     operator = '**'
    761 
    762 
    763 class And(BinExpr):
    764     """Short circuited AND."""
    765     operator = 'and'
    766 
    767     def as_const(self, eval_ctx=None):
    768         eval_ctx = get_eval_context(self, eval_ctx)
    769         return self.left.as_const(eval_ctx) and self.right.as_const(eval_ctx)
    770 
    771 
    772 class Or(BinExpr):
    773     """Short circuited OR."""
    774     operator = 'or'
    775 
    776     def as_const(self, eval_ctx=None):
    777         eval_ctx = get_eval_context(self, eval_ctx)
    778         return self.left.as_const(eval_ctx) or self.right.as_const(eval_ctx)
    779 
    780 
    781 class Not(UnaryExpr):
    782     """Negate the expression."""
    783     operator = 'not'
    784 
    785 
    786 class Neg(UnaryExpr):
    787     """Make the expression negative."""
    788     operator = '-'
    789 
    790 
    791 class Pos(UnaryExpr):
    792     """Make the expression positive (noop for most expressions)"""
    793     operator = '+'
    794 
    795 
    796 # Helpers for extensions
    797 
    798 
    799 class EnvironmentAttribute(Expr):
    800     """Loads an attribute from the environment object.  This is useful for
    801     extensions that want to call a callback stored on the environment.
    802     """
    803     fields = ('name',)
    804 
    805 
    806 class ExtensionAttribute(Expr):
    807     """Returns the attribute of an extension bound to the environment.
    808     The identifier is the identifier of the :class:`Extension`.
    809 
    810     This node is usually constructed by calling the
    811     :meth:`~jinja2.ext.Extension.attr` method on an extension.
    812     """
    813     fields = ('identifier', 'name')
    814 
    815 
    816 class ImportedName(Expr):
    817     """If created with an import name the import name is returned on node
    818     access.  For example ``ImportedName('cgi.escape')`` returns the `escape`
    819     function from the cgi module on evaluation.  Imports are optimized by the
    820     compiler so there is no need to assign them to local variables.
    821     """
    822     fields = ('importname',)
    823 
    824 
    825 class InternalName(Expr):
    826     """An internal name in the compiler.  You cannot create these nodes
    827     yourself but the parser provides a
    828     :meth:`~jinja2.parser.Parser.free_identifier` method that creates
    829     a new identifier for you.  This identifier is not available from the
    830     template and is not threated specially by the compiler.
    831     """
    832     fields = ('name',)
    833 
    834     def __init__(self):
    835         raise TypeError('Can\'t create internal names.  Use the '
    836                         '`free_identifier` method on a parser.')
    837 
    838 
    839 class MarkSafe(Expr):
    840     """Mark the wrapped expression as safe (wrap it as `Markup`)."""
    841     fields = ('expr',)
    842 
    843     def as_const(self, eval_ctx=None):
    844         eval_ctx = get_eval_context(self, eval_ctx)
    845         return Markup(self.expr.as_const(eval_ctx))
    846 
    847 
    848 class MarkSafeIfAutoescape(Expr):
    849     """Mark the wrapped expression as safe (wrap it as `Markup`) but
    850     only if autoescaping is active.
    851 
    852     .. versionadded:: 2.5
    853     """
    854     fields = ('expr',)
    855 
    856     def as_const(self, eval_ctx=None):
    857         eval_ctx = get_eval_context(self, eval_ctx)
    858         if eval_ctx.volatile:
    859             raise Impossible()
    860         expr = self.expr.as_const(eval_ctx)
    861         if eval_ctx.autoescape:
    862             return Markup(expr)
    863         return expr
    864 
    865 
    866 class ContextReference(Expr):
    867     """Returns the current template context.  It can be used like a
    868     :class:`Name` node, with a ``'load'`` ctx and will return the
    869     current :class:`~jinja2.runtime.Context` object.
    870 
    871     Here an example that assigns the current template name to a
    872     variable named `foo`::
    873 
    874         Assign(Name('foo', ctx='store'),
    875                Getattr(ContextReference(), 'name'))
    876     """
    877 
    878 
    879 class Continue(Stmt):
    880     """Continue a loop."""
    881 
    882 
    883 class Break(Stmt):
    884     """Break a loop."""
    885 
    886 
    887 class Scope(Stmt):
    888     """An artificial scope."""
    889     fields = ('body',)
    890 
    891 
    892 class EvalContextModifier(Stmt):
    893     """Modifies the eval context.  For each option that should be modified,
    894     a :class:`Keyword` has to be added to the :attr:`options` list.
    895 
    896     Example to change the `autoescape` setting::
    897 
    898         EvalContextModifier(options=[Keyword('autoescape', Const(True))])
    899     """
    900     fields = ('options',)
    901 
    902 
    903 class ScopedEvalContextModifier(EvalContextModifier):
    904     """Modifies the eval context and reverts it later.  Works exactly like
    905     :class:`EvalContextModifier` but will only modify the
    906     :class:`~jinja2.nodes.EvalContext` for nodes in the :attr:`body`.
    907     """
    908     fields = ('body',)
    909 
    910 
    911 # make sure nobody creates custom nodes
    912 def _failing_new(*args, **kwargs):
    913     raise TypeError('can\'t create custom node types')
    914 NodeType.__new__ = staticmethod(_failing_new); del _failing_new
    915