def as_cython_attribute(self):
return None
- def as_none_safe_node(self, error, message):
+ def as_none_safe_node(self, message, error="PyExc_TypeError"):
# Wraps the node in a NoneCheckNode if it is not known to be
# not-None (e.g. because it is a Python literal).
if self.may_be_none():
env.use_utility_code(char_in_bytes_utility_code)
if not isinstance(self.operand2, (UnicodeNode, BytesNode)):
self.operand2 = self.operand2.as_none_safe_node(
- "PyExc_TypeError",
"argument of type 'NoneType' is not iterable")
else:
common_type = py_object_type
return node
unpack_temp_node = UtilNodes.LetRefNode(
- slice_node.as_none_safe_node("PyExc_TypeError", "'NoneType' is not iterable"))
+ slice_node.as_none_safe_node("'NoneType' is not iterable"))
slice_base_node = ExprNodes.PythonCapiCallNode(
slice_node.pos, unpack_func, unpack_func_type,
return node
arg = pos_args[0]
if arg.type is Builtin.dict_type:
- arg = arg.as_none_safe_node("PyExc_TypeError", "'NoneType' is not iterable")
+ arg = arg.as_none_safe_node("'NoneType' is not iterable")
return ExprNodes.PythonCapiCallNode(
node.pos, "PyDict_Copy", self.PyDict_Copy_func_type,
args = [arg],
if not isinstance(list_arg, (ExprNodes.ComprehensionNode,
ExprNodes.ListNode)):
pos_args[0] = list_arg.as_none_safe_node(
- "PyExc_TypeError", "'NoneType' object is not iterable")
+ "'NoneType' object is not iterable")
return ExprNodes.PythonCapiCallNode(
node.pos, "PyList_AsTuple", self.PyList_AsTuple_func_type,
return node
if not arg.is_literal:
arg = arg.as_none_safe_node(
- "PyExc_TypeError", "object of type 'NoneType' has no len()")
+ "object of type 'NoneType' has no len()")
new_node = ExprNodes.PythonCapiCallNode(
node.pos, cfunc_name, self.PyObject_Size_func_type,
args = [arg],
if not type_arg.type_entry:
# arbitrary variable, needs a None check for safety
type_arg = type_arg.as_none_safe_node(
- "PyExc_TypeError",
"object.__new__(X): X is not a type object (NoneType)")
return ExprNodes.PythonCapiCallNode(
self_arg = args[0]
if is_unbound_method:
self_arg = self_arg.as_none_safe_node(
- "PyExc_TypeError",
"descriptor '%s' requires a '%s' object but received a 'NoneType'" % (
attr_name, node.function.obj.name))
else:
self_arg = self_arg.as_none_safe_node(
- "PyExc_AttributeError",
- "'NoneType' object has no attribute '%s'" % attr_name)
+ "'NoneType' object has no attribute '%s'" % attr_name,
+ error = "PyExc_AttributeError")
args[0] = self_arg
return ExprNodes.PythonCapiCallNode(
node.pos, name, func_type,