[Pyrex] Bug in CoerceFromPyTypeNode in 0.9.5
Peter Johnson
peter at tortall.net
Sun Jan 28 21:08:33 UTC 2007
I've run into a bug in 0.9.5 in ExprNodes.py line 2936:
File "/usr/local/lib/python2.4/site-packages/Pyrex/Compiler/ExprNodes.py",
line 402, in generate_evaluation_code
self.generate_result_code(code)
File "/usr/local/lib/python2.4/site-packages/Pyrex/Compiler/ExprNodes.py",
line 2936, in generate_result_code
rhs = typecast(rhs, self.type, c_long_type)
NameError: global name 'c_long_type' is not defined
This is a bug (c_long_type needs to be qualified), but changing this to use
PyrexTypes.c_long_type doesn't get me much further:
File "/usr/local/lib/python2.4/site-packages/Pyrex/Compiler/ExprNodes.py",
line 402, in generate_evaluation_code
self.generate_result_code(code)
File "/usr/local/lib/python2.4/site-packages/Pyrex/Compiler/ExprNodes.py",
line 2936, in generate_result_code
rhs = typecast(rhs, self.type, PyrexTypes.c_long_type)
File "/usr/local/lib/python2.4/site-packages/Pyrex/Compiler/PyrexTypes.py",
line 821, in typecast
if to_type is from_type or \
AttributeError: 'str' object has no attribute 'is_pyobject'
This is because rhs is assigned to a string right before the typecast call in
ExprNodes.py:
rhs = "%s(%s)" % (function, operand)
if self.type.is_enum:
rhs = typecast(rhs, self.type, PyrexTypes.c_long_type)
and the typecast code in PyrexTypes.py is:
def typecast(to_type, from_type, expr_code):
if to_type is from_type or \
(not to_type.is_pyobject and assignable_from(to_type, from_type)):
return expr_code
else:
#print "typecast: to", to_type, "from", from_type ###
return to_type.cast_code(expr_code)
Neither of these code paths handle to_type being a string. I suspect the bug
is in the ExprNodes.py function, but I'm not sure what the correct fix is
supposed to be.
I'll work on getting a small testcase together for this.
Thanks,
Peter
More information about the Pyrex
mailing list