diff --git a/pymbolic/mapper/__init__.py b/pymbolic/mapper/__init__.py index 8970a743c990895d643c961e8f72b20cf63cd0d9..8aa66ca66fe899813427ca9be132dd2d3f9ffbf7 100644 --- a/pymbolic/mapper/__init__.py +++ b/pymbolic/mapper/__init__.py @@ -721,7 +721,23 @@ class CallbackMapper(RecursiveMapper): # }}} -# {{{ cse caching mixin +# {{{ caching mixins + +class CachingMapperMixin(object): + def __init__(self): + super(CachingMapperMixin, self).__init__() + self.result_cache = {} + + def rec(self, expr): + try: + return self.result_cache[expr] + except KeyError: + result = super(CachingMapperMixin, self).rec(expr) + self.result_cache[expr] = result + return result + + __call__ = rec + class CSECachingMapperMixin(object): """A :term:`mix-in` that helps