diff --git a/api/GenApi.py b/api/GenApi.py index 16b3d2091720a851109987ceb47445a6fd20dead..3ecf9b818e7b8355a862b684ea874ecb58dbf834 100644 --- a/api/GenApi.py +++ b/api/GenApi.py @@ -272,7 +272,7 @@ def ivectorvectorint(name, value=None, python_value=None, julia_value=None): a.julia_arg = ("convert(Vector{Vector{Cint}}," + name + "), " + api_name_n + ", length(" + name + ")") a.fortran_type = "type(c_ptr), intent(out)" - a.fortran_type_post = (" " * 8 + "type(c_ptr), intent(out) :: " + name + "_n\n" + + a.fortran_type_post = (" " * 8 + "type(c_ptr), intent(out) :: " + name + "_n\n" + " " * 8 + "integer(c_size_t) :: " + name + "_nn") a.fortran_name_post = ", " + name + "_n," + name + "_nn" return a @@ -352,7 +352,7 @@ def ivectorvectordouble(name, value=None, python_value=None, julia_value=None): a.julia_arg = ("convert(Vector{Vector{Cdouble}}," + name + "), " + api_name_n + ", length(" + name + ")") a.fortran_type = "type(c_ptr), intent(out)" - a.fortran_type_post = (" " * 8 + "type(c_ptr), intent(out) :: " + name + "_n\n" + + a.fortran_type_post = (" " * 8 + "type(c_ptr), intent(out) :: " + name + "_n\n" + " " * 8 + "integer(c_size_t) :: " + name + "_nn") a.fortran_name_post = ", " + name + "_n," + name + "_nn" return a @@ -1849,23 +1849,20 @@ class API: def write_fortran(self): - def write_module(module, c_namespace, cpp_namespace, indent): - cpp_namespace += module.name + "::" - if c_namespace: - c_namespace += module.name[0].upper() + module.name[1:] + + def write_module(f, m, c_mpath, f_mpath, indent): + f_mpath += m.name + "::" + if c_mpath: + c_mpath += m.name[0].upper() + m.name[1:] else: - c_namespace = module.name + c_mpath = m.name indent += " " - for rtype, name, args, doc, special in module.fs: - fname = c_namespace + name[0].upper() + name[1:] + for rtype, name, args, doc, special in m.fs: + fname = c_mpath + name[0].upper() + name[1:] tab = " " * 4 # Documentation (Doxygen) self.fwrite(f, "\n" + tab + "!> " + ("\n" + tab + "!! ").join(textwrap.wrap(doc, 75)) + "\n") - fnameapi = "! " + ns.upper() + "_API " + (rtype.rc_type if rtype else - "void") + " " + fname + "(" - self.flog('f', cpp_namespace.replace('::', '/') + name) - # Procedure definition fnamef = tab + ("function" if rtype else "subroutine") + " " + fname + "(" # Procedure name and Argument list @@ -1882,20 +1879,19 @@ class API: # Procedure end self.fwrite(f, tab + "end " + ("function" if rtype else "subroutine") + " " + fname + "\n") - for m in module.submodules: - write_module(m, c_namespace, cpp_namespace, indent) + for m in m.submodules: + write_module(f, m, c_mpath, f_mpath, indent) self.current_lineno = 1 with open(ns + ".f90", "w") as f: - self.fwrite( - f, - fortran_header.format(self.copyright, self.issues, - ns.upper(), self.code, - self.version_major, self.version_minor, - self.version_patch, ns)) - for module in self.modules: - write_module(module, "", "", "") - self.fwrite(f, fortran_footer) + self.fwrite( + f, + fortran_header.format(self.copyright, self.issues, ns.upper(), + self.code, self.version_major, + self.version_minor, self.version_patch)) + for module in self.modules: + write_module(f, module, "", "", "") + self.fwrite(f, fortran_footer) def write_texi(self):