@@ -708,9 +708,9 @@ def get_data_type(t):
708708 variables_decl += " " + get_data_type (self .return_type ) \
709709 + "_" + self .fn_name + "_return_value;\n "
710710 elif self .array_as_return_type :
711- variables_decl += " " + get_data_type ( \
712- self .array_as_return_type [ 1 ][ 1 ][: - 2 ]) + "_" + self . fn_name \
713- + "_return_value ;\n "
711+ variables_decl += " " + self . array_as_return_type [ 1 ][ 1 ] + "_" \
712+ + self .fn_name + "_return_value = malloc(sizeof(" \
713+ + self . array_as_return_type [ 1 ][ 1 ][: - 2 ] + ")) ;\n "
714714 else :
715715 variables_decl = ""
716716 # ----------------------------------------------------------------------
@@ -780,18 +780,22 @@ def get_data_type(t):
780780 return Py_BuildValue("{ self .return_type_format } ", _{ self .fn_name } _return_value);"""
781781 else :
782782 if self .array_as_return_type :
783- fill_return_details = f"""
784- _{ self .fn_name } _return_value.data = malloc(sizeof({ self .array_as_return_type [1 ][2 ][:- 2 ]} ));
785- _{ self .fn_name } _return_value.n_dims = 1;
786- _{ self .fn_name } _return_value.dims[0].lower_bound = 0;
787- _{ self .fn_name } _return_value.dims[0].length = { self .array_as_return_type [1 ][3 ]} ;
788- _{ self .fn_name } _return_value.is_allocated = false;
789- { self .fn_name } ({ pass_args } , &_{ self .fn_name } _return_value);
783+ fill_return_details = f"""\n
784+ _{ self .fn_name } _return_value->data = malloc({ self .array_as_return_type [1 ][3 ]
785+ } * sizeof({ self .array_as_return_type [1 ][2 ][:- 2 ]} ));
786+ _{ self .fn_name } _return_value->n_dims = 1;
787+ _{ self .fn_name } _return_value->dims[0].lower_bound = 0;
788+ _{ self .fn_name } _return_value->dims[0].length = {
789+ self .array_as_return_type [1 ][3 ]} ;
790+ _{ self .fn_name } _return_value->is_allocated = false;
791+
792+ // Call the C function
793+ { self .fn_name } ({ pass_args } , &_{ self .fn_name } _return_value[0]);
790794
791795 // Build and return the result as a Python object
792796 PyObject* list_obj = PyList_New({ self .array_as_return_type [1 ][3 ]} );
793797 for (int i = 0; i < { self .array_as_return_type [1 ][3 ]} ; i++) {{
794- PyObject* element = PyFloat_FromDouble(_{ self .fn_name } _return_value. data[i]);
798+ PyObject* element = PyFloat_FromDouble(_{ self .fn_name } _return_value-> data[i]);
795799 PyList_SetItem(list_obj, i, element);
796800 }}
797801 return list_obj;"""
0 commit comments