Commit 6d5d7ce2 authored by Stefan Behnel's avatar Stefan Behnel

minor refactoring to reduce code redundancy

parent 9127adce
...@@ -1402,6 +1402,23 @@ class FuncDefNode(StatNode, BlockNode): ...@@ -1402,6 +1402,23 @@ class FuncDefNode(StatNode, BlockNode):
"Argument type '%s' is incomplete" % arg.type) "Argument type '%s' is incomplete" % arg.type)
return env.declare_arg(arg.name, arg.type, arg.pos) return env.declare_arg(arg.name, arg.type, arg.pos)
def generate_arg_type_test(self, arg, code):
# Generate type test for one argument.
if arg.type.typeobj_is_available():
typeptr_cname = arg.type.typeptr_cname
arg_code = "((PyObject *)%s)" % arg.entry.cname
code.putln(
'if (unlikely(!__Pyx_ArgTypeTest(%s, %s, %d, "%s", %s))) %s' % (
arg_code,
typeptr_cname,
arg.accept_none,
arg.name,
arg.type.is_builtin_type,
code.error_goto(arg.pos)))
else:
error(arg.pos, "Cannot test type of extern C class "
"without type object name specification")
def generate_wrapper_functions(self, code): def generate_wrapper_functions(self, code):
pass pass
...@@ -1651,23 +1668,6 @@ class CFuncDefNode(FuncDefNode): ...@@ -1651,23 +1668,6 @@ class CFuncDefNode(FuncDefNode):
if arg.needs_type_test: if arg.needs_type_test:
self.generate_arg_type_test(arg, code) self.generate_arg_type_test(arg, code)
def generate_arg_type_test(self, arg, code):
# Generate type test for one argument.
if arg.type.typeobj_is_available():
typeptr_cname = arg.type.typeptr_cname
arg_code = "((PyObject *)%s)" % arg.cname
code.putln(
'if (unlikely(!__Pyx_ArgTypeTest(%s, %s, %d, "%s", %s))) %s' % (
arg_code,
typeptr_cname,
arg.accept_none,
arg.name,
type.is_builtin_type,
code.error_goto(arg.pos)))
else:
error(arg.pos, "Cannot test type of extern C class "
"without type object name specification")
def error_value(self): def error_value(self):
if self.return_type.is_pyobject: if self.return_type.is_pyobject:
return "0" return "0"
...@@ -2654,23 +2654,6 @@ class DefNode(FuncDefNode): ...@@ -2654,23 +2654,6 @@ class DefNode(FuncDefNode):
if arg.needs_type_test: if arg.needs_type_test:
self.generate_arg_type_test(arg, code) self.generate_arg_type_test(arg, code)
def generate_arg_type_test(self, arg, code):
# Generate type test for one argument.
if arg.type.typeobj_is_available():
typeptr_cname = arg.type.typeptr_cname
arg_code = "((PyObject *)%s)" % arg.entry.cname
code.putln(
'if (unlikely(!__Pyx_ArgTypeTest(%s, %s, %d, "%s", %s))) %s' % (
arg_code,
typeptr_cname,
arg.accept_none,
arg.name,
arg.type.is_builtin_type,
code.error_goto(arg.pos)))
else:
error(arg.pos, "Cannot test type of extern C class "
"without type object name specification")
def error_value(self): def error_value(self):
return self.entry.signature.error_value return self.entry.signature.error_value
......
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