Commit 92a052eb authored by Robert Bradshaw's avatar Robert Bradshaw

Optimize conditions when one side of binop is pure C.

parent ff152fe9
......@@ -747,6 +747,10 @@ class IntNode(ConstNode):
# in which case a type test node will be needed.
return ConstNode.coerce_to(self, dst_type, env)
def coerce_to_boolean(self, env):
self.type = PyrexTypes.c_bint_type
return self
def calculate_result_code(self):
if self.type.is_pyobject:
return self.entry.cname
......@@ -3781,6 +3785,12 @@ class BoolBinopNode(ExprNode):
return self.operand1.compile_time_value(denv) \
or self.operand2.compile_time_value(denv)
def coerce_to_boolean(self, env):
self.operand1 = self.operand1.coerce_to_boolean(env)
self.operand2 = self.operand2.coerce_to_boolean(env)
self.type = PyrexTypes.c_bint_type
return self
def analyse_types(self, env):
self.operand1.analyse_types(env)
self.operand2.analyse_types(env)
......@@ -4398,6 +4408,9 @@ class CoerceToPyTypeNode(CoercionNode):
gil_message = "Converting to Python object"
def coerce_to_boolean(self, env):
return self.arg.coerce_to_boolean(env)
def analyse_types(self, env):
# The arg is always already analysed
pass
......@@ -4492,6 +4505,12 @@ class CoerceToTempNode(CoercionNode):
# The arg is always already analysed
pass
def coerce_to_boolean(self, env):
self.arg = self.arg.coerce_to_boolean(env)
self.type = self.arg.type
self.result_ctype = self.type
return self
def generate_result_code(self, code):
#self.arg.generate_evaluation_code(code) # Already done
# by generic generate_subexpr_evaluation_code!
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment