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
Copyright (C) 2012-2017 Edgewall Software