From ab0db002c3f8b3196f0878bc34a59a33e1984b4a Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Tue, 3 Apr 2012 12:18:44 -0400 Subject: [PATCH] Prevent CSE finder from destroying CSE subclasses. --- pymbolic/cse.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pymbolic/cse.py b/pymbolic/cse.py index b7c6109..34fe275 100644 --- a/pymbolic/cse.py +++ b/pymbolic/cse.py @@ -110,14 +110,15 @@ class CSEMapper(IdentityMapper): def map_common_subexpression(self, expr): # Avoid creating CSE(CSE(...)) - # - # NOTE: This is not equivalent to isinstance--it's more specific, - # and for a reason! (Because we don't want to obliterate derived - # CSE types.) if type(expr) is prim.CommonSubexpression: return prim.wrap_in_cse(self.rec(expr.child), expr.prefix) else: - return IdentityMapper.map_common_subexpression(self, expr) + # expr is of a derived CSE type + result = self.rec(expr.child) + if type(result) is prim.CommonSubexpression: + result = result.child + + return type(expr)(result, expr.prefix, **expr.get_extra_properties()) def map_substitution(self, expr): return type(expr)( -- GitLab