Mercurial > genshi > genshi-test
comparison markup/eval.py @ 69:e9a3930f8823
A couple of minor performance improvements.
author | cmlenz |
---|---|
date | Mon, 10 Jul 2006 17:37:01 +0000 |
parents | 822089ae65ce |
children | cc034182061e |
comparison
equal
deleted
inserted
replaced
68:a1f93d095759 | 69:e9a3930f8823 |
---|---|
67 >>> data = dict(items=[1, 2, 3]) | 67 >>> data = dict(items=[1, 2, 3]) |
68 >>> Expression('len(items)').evaluate(data) | 68 >>> Expression('len(items)').evaluate(data) |
69 3 | 69 3 |
70 """ | 70 """ |
71 __slots__ = ['source', 'ast'] | 71 __slots__ = ['source', 'ast'] |
72 __visitors = {} | 72 _visitors = {} |
73 | 73 |
74 def __init__(self, source): | 74 def __init__(self, source): |
75 """Create the expression. | 75 """Create the expression. |
76 | 76 |
77 @param source: the expression as string | 77 @param source: the expression as string |
95 return self._visit(self.ast.node, data) | 95 return self._visit(self.ast.node, data) |
96 | 96 |
97 # AST traversal | 97 # AST traversal |
98 | 98 |
99 def _visit(self, node, data): | 99 def _visit(self, node, data): |
100 v = self.__visitors.get(node.__class__) | 100 v = self._visitors.get(node.__class__) |
101 if not v: | 101 if not v: |
102 v = getattr(self, '_visit_%s' % node.__class__.__name__.lower()) | 102 v = getattr(self, '_visit_%s' % node.__class__.__name__.lower()) |
103 self.__visitors[node.__class__] = v | 103 self._visitors[node.__class__] = v |
104 return v(node, data) | 104 return v(node, data) |
105 | 105 |
106 def _visit_expression(self, node, data): | 106 def _visit_expression(self, node, data): |
107 for child in node.getChildNodes(): | 107 for child in node.getChildNodes(): |
108 return self._visit(child, data) | 108 return self._visit(child, data) |
246 return self._visit(self.ast, data) | 246 return self._visit(self.ast, data) |
247 | 247 |
248 # AST traversal | 248 # AST traversal |
249 | 249 |
250 def _visit(self, node, data): | 250 def _visit(self, node, data): |
251 v = self.__visitors.get(node.__class__) | 251 v = self._visitors.get(node.__class__) |
252 if not v: | 252 if not v: |
253 v = getattr(self, '_visit_%s' % node.__class__.__name__.lower()) | 253 v = getattr(self, '_visit_%s' % node.__class__.__name__.lower()) |
254 self.__visitors[node.__class__] = v | 254 self._visitors[node.__class__] = v |
255 return v(node, data) | 255 return v(node, data) |
256 | 256 |
257 def _visit_expression(self, node, data): | 257 def _visit_expression(self, node, data): |
258 return self._visit(node.body, data) | 258 return self._visit(node.body, data) |
259 | 259 |