From ca6b294c925b7430a8f2d95699acb4040503d84c Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Fri, 24 Aug 2012 01:13:24 -0400
Subject: [PATCH] Reenable If() and comparisons.

---
 loopy/codegen/expression.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/loopy/codegen/expression.py b/loopy/codegen/expression.py
index a0f430545..0ea6e169e 100644
--- a/loopy/codegen/expression.py
+++ b/loopy/codegen/expression.py
@@ -360,6 +360,24 @@ class LoopyCCodeMapper(RecursiveMapper):
 
     map_max = map_min
 
+    def map_if(self, expr, enclosing_prec, type_context):
+        from pymbolic.mapper.stringifier import PREC_NONE
+        return "(%s ? %s : %s)" % (
+                self.rec(expr.condition, PREC_NONE, "i"),
+                self.rec(expr.then, PREC_NONE, type_context),
+                self.rec(expr.else_, PREC_NONE, type_context),
+                )
+
+    def map_comparison(self, expr, enclosing_prec, type_context):
+        from pymbolic.mapper.stringifier import PREC_COMPARISON
+
+        return self.parenthesize_if_needed(
+                "%s %s %s" % (
+                    self.rec(expr.left, PREC_COMPARISON, None),
+                    expr.operator,
+                    self.rec(expr.right, PREC_COMPARISON, None)),
+                enclosing_prec, PREC_COMPARISON)
+
     def map_constant(self, expr, enclosing_prec, type_context):
         if isinstance(expr, complex):
             cast_type = "cdouble_t"
@@ -375,6 +393,9 @@ class LoopyCCodeMapper(RecursiveMapper):
             elif type_context == "i":
                 return str(int(expr))
             else:
+                if isinstance(expr, int):
+                    return str(int(expr))
+
                 raise RuntimeError("don't know how to generated code "
                         "for constant '%s'" % expr)
 
-- 
GitLab