From 00a5ade403067ab17a42624c745e60b01c084334 Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Thu, 22 Apr 2010 08:03:46 +0200 Subject: [PATCH] simplify ExprNode.as_none_safe_node() with a sensible default exception type --- Cython/Compiler/ExprNodes.py | 3 +-- Cython/Compiler/Optimize.py | 14 ++++++-------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 4777fe48..a4d336d9 100755 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -643,7 +643,7 @@ class ExprNode(Node): 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(): @@ -5815,7 +5815,6 @@ class PrimaryCmpNode(ExprNode, CmpNode): 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 diff --git a/Cython/Compiler/Optimize.py b/Cython/Compiler/Optimize.py index 9cff706b..f2d55a69 100644 --- a/Cython/Compiler/Optimize.py +++ b/Cython/Compiler/Optimize.py @@ -173,7 +173,7 @@ class IterationTransform(Visitor.VisitorTransform): 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, @@ -1312,7 +1312,7 @@ class OptimizeBuiltinCalls(Visitor.EnvTransform): 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], @@ -1336,7 +1336,7 @@ class OptimizeBuiltinCalls(Visitor.EnvTransform): 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, @@ -1497,7 +1497,7 @@ class OptimizeBuiltinCalls(Visitor.EnvTransform): 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], @@ -1561,7 +1561,6 @@ class OptimizeBuiltinCalls(Visitor.EnvTransform): 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( @@ -2123,13 +2122,12 @@ class OptimizeBuiltinCalls(Visitor.EnvTransform): 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, -- 2.26.2