def temporary_identifier(self):
"""Get a new unique identifier."""
self._last_identifier += 1
- return 't%d' % self._last_identifier
+ return 't_%d' % self._last_identifier
def buffer(self, frame):
"""Enable buffering for the frame from that point onwards."""
return tuple.__new__(cls, (lineno, intern(str(type)), value))
def __str__(self):
- from jinja.lexer import keywords, reverse_operators
- if self.type in keywords:
- return self.type
- elif self.type in reverse_operators:
+ if self.type in reverse_operators:
return reverse_operators[self.type]
elif self.type is 'name':
return self.value
}
-# if this is `True` no new Node classes can be created.
-_node_setup_finished = False
-
-
class Impossible(Exception):
"""Raised if the node could not perform a requested action."""
automatically forwarded to the child."""
def __new__(cls, name, bases, d):
- if __debug__ and _node_setup_finished:
- raise TypeError('Can\'t create custom node types.')
for attr in 'fields', 'attributes':
storage = []
storage.extend(getattr(bases[0], attr, ()))
"""Break a loop."""
-# and close down
-_node_setup_finished = True
+# make sure nobody creates custom nodes
+def _failing_new(*args, **kwargs):
+ raise TypeError('can\'t create custom node types')
+NodeType.__new__ = staticmethod(_failing_new); del _failing_new