summaryrefslogtreecommitdiff
path: root/numpy/f2py/lib/py_wrap_subprogram.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/f2py/lib/py_wrap_subprogram.py')
-rw-r--r--numpy/f2py/lib/py_wrap_subprogram.py13
1 files changed, 9 insertions, 4 deletions
diff --git a/numpy/f2py/lib/py_wrap_subprogram.py b/numpy/f2py/lib/py_wrap_subprogram.py
index 719d3fb29..0d3c8ed7e 100644
--- a/numpy/f2py/lib/py_wrap_subprogram.py
+++ b/numpy/f2py/lib/py_wrap_subprogram.py
@@ -57,6 +57,7 @@ static PyObject* %(cname)s(PyObject *capi_self, PyObject *capi_args, PyObject *c
typedef void (*%(name)s_functype)();
'''
extern_template_module = '''\
+extern void %(init_func)s_f( %(name)s_functype);
static %(name)s_functype %(name)s_func_ptr;
'''
objdecl_template_module = '''
@@ -77,14 +78,16 @@ static void %(init_func)s_c(%(name)s_functype func_ptr) {
%(init_func)s_f(%(init_func)s_c);
'''
- _defined = []
def __init__(self, parent, block):
WrapperBase.__init__(self)
self.name = name = pyname = block.name
self.cname = cname = '%s_%s' % (parent.cname,name)
- if cname in self._defined:
+
+ defined = parent.defined_capi_codes
+ if cname in defined:
return
- self._defined.append(cname)
+ defined.append(cname)
+
self.info('Generating interface for %s: %s' % (block.__class__, cname))
if pyname.startswith('f2pywrap_'):
@@ -99,6 +102,8 @@ static void %(init_func)s_c(%(name)s_functype func_ptr) {
self.objdecl_template = ''
self.fortran_code_template = ''
+ WrapperCPPMacro(parent, 'F_FUNC')
+
if isinstance(block.parent, Module):
self.mname = block.parent.name
self.init_func = '%s_init' % (name)
@@ -179,7 +184,7 @@ static void %(init_func)s_c(%(name)s_functype func_ptr) {
self.return_format_list.append('O&')
self.return_obj_list.append('\npyobj_from_%s, &%s' % (ti.ctype, argname))
- WrapperCPPMacro(parent, 'F_FUNC')
+
self.call_list.append('%s_f(%s);' % (name,', '.join(args_f+extra_args_f)))
self.clean_pyobjfrom_list.reverse()