From f252c8a1b7ed0908f844f7085901db29a0334c1b Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Mon, 29 Dec 2008 03:13:49 +0100
Subject: [PATCH] Tolerate constant evaluation failure in constant folding
 mapper.

---
 src/mapper/constant_folder.py | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/mapper/constant_folder.py b/src/mapper/constant_folder.py
index c9fa198..680375f 100644
--- a/src/mapper/constant_folder.py
+++ b/src/mapper/constant_folder.py
@@ -8,8 +8,14 @@ class ConstantFoldingMapperBase(object):
         from pymbolic.mapper.dependency import DependencyMapper
         return not bool(DependencyMapper()(expr))
 
-    def fold(self, expr, klass, op, constructor):
+    def evaluate(self, expr):
         from pymbolic import evaluate
+        try:
+            return evaluate(expr)
+        except ValueError:
+            return None
+
+    def fold(self, expr, klass, op, constructor):
 
         constants = []
         nonconstants = []
@@ -21,7 +27,12 @@ class ConstantFoldingMapperBase(object):
                 queue = list(child.children) + queue
             else:
                 if self.is_constant(child):
-                    constants.append(evaluate(child))
+                    value = self.evaluate(child)
+                    if value is None:
+                        # couldn't evaluate
+                        nonconstants.append(child)
+                    else:
+                        constants.append(value)
                 else:
                     nonconstants.append(child)
 
-- 
GitLab