summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-19 17:27:23 -0700
committerEevee (Alex Munroe) <eevee.git@veekun.com>2013-08-19 17:27:23 -0700
commitb01641126192ffb9926784a0b62c02840e68c821 (patch)
tree1816d092612a7653d985005b43e1ec16d56cdbd5
parentd1cb4b5bbf3e9629052a433dc210514c3dcf3cb1 (diff)
downloadpyscss-b01641126192ffb9926784a0b62c02840e68c821.tar.gz
Simplify AST cache.
-rw-r--r--scss/expression.py17
1 files changed, 6 insertions, 11 deletions
diff --git a/scss/expression.py b/scss/expression.py
index 686781f..38a0064 100644
--- a/scss/expression.py
+++ b/scss/expression.py
@@ -30,6 +30,8 @@ FATAL_UNDEFINED = True
class Calculator(object):
"""Expression evaluator."""
+ ast_cache = {}
+
def __init__(self, namespace=None):
if namespace is None:
self.namespace = Namespace()
@@ -115,13 +117,6 @@ class Calculator(object):
value = _vi
return value
- def get_ast_cache(self, target):
- if not hasattr(self, 'ast_cache'):
- self.__class__.ast_cache = {}
- if target not in self.ast_cache:
- self.ast_cache[target] = {}
- return self.ast_cache[target]
-
def evaluate_expression(self, expr, divide=False):
try:
ast = self.parse_expression(expr)
@@ -140,9 +135,9 @@ class Calculator(object):
if not isinstance(expr, six.string_types):
raise TypeError("Expected string, got %r" % (expr,))
- ast_cache = self.get_ast_cache(target)
- if expr in ast_cache:
- return ast_cache[expr]
+ key = (target, expr)
+ if key in self.ast_cache:
+ return self.ast_cache[key]
try:
parser = SassExpression(SassExpressionScanner(expr))
@@ -150,7 +145,7 @@ class Calculator(object):
except SyntaxError, e:
raise SassParseError(e, expression=expr, expression_pos=parser._char_pos)
- ast_cache[expr] = ast
+ self.ast_cache[key] = ast
return ast