Commit 95cd0a3d authored by Lisandro Dalcin's avatar Lisandro Dalcin

fixes and tests for enum in bool contexts and func args

parent 9127adce
......@@ -593,7 +593,7 @@ class ExprNode(Node):
if type.is_pyobject or type.is_ptr or type.is_float:
return CoerceToBooleanNode(self, env)
else:
if not type.is_int and not type.is_error:
if not (type.is_int or type.is_enum or type.is_error):
error(self.pos,
"Type '%s' not acceptable as a boolean" % type)
return self
......
......@@ -2621,10 +2621,13 @@ class DefNode(FuncDefNode):
func = new_type.from_py_function
# copied from CoerceFromPyTypeNode
if func:
code.putln("%s = %s(%s); %s" % (
arg.entry.cname,
func,
arg.hdr_cname,
lhs = arg.entry.cname
rhs = "%s(%s)" % (func, arg.hdr_cname)
if new_type.is_enum:
rhs = PyrexTypes.typecast(new_type, PyrexTypes.c_long_type, rhs)
code.putln("%s = %s; %s" % (
lhs,
rhs,
code.error_goto_if(new_type.error_condition(arg.entry.cname), arg.pos)))
else:
error(arg.pos,
......
cdef public enum Truth:
FALSE=0
TRUE=1
def enum_boolctx(Truth arg):
"""
>>> enum_boolctx(FALSE)
False
>>> enum_boolctx(TRUE)
True
"""
if arg:
return True
else:
return False
cdef extern from *:
enum: FALSE_VALUE "(0)"
enum: TRUE_VALUE "(1)"
def extern_enum_false():
"""
>>> extern_enum_false()
"""
if FALSE_VALUE:
raise ValueError
def extern_enum_true():
"""
>>> extern_enum_true()
"""
if not TRUE_VALUE:
raise ValueError
def extern_enum_false_true():
"""
>>> extern_enum_false_true()
"""
if not TRUE_VALUE or FALSE_VALUE:
raise ValueError
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