@@ -708,9 +708,9 @@ def get_data_type(t):
708
708
variables_decl += " " + get_data_type (self .return_type ) \
709
709
+ "_" + self .fn_name + "_return_value;\n "
710
710
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 "
714
714
else :
715
715
variables_decl = ""
716
716
# ----------------------------------------------------------------------
@@ -780,18 +780,22 @@ def get_data_type(t):
780
780
return Py_BuildValue("{ self .return_type_format } ", _{ self .fn_name } _return_value);"""
781
781
else :
782
782
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]);
790
794
791
795
// Build and return the result as a Python object
792
796
PyObject* list_obj = PyList_New({ self .array_as_return_type [1 ][3 ]} );
793
797
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]);
795
799
PyList_SetItem(list_obj, i, element);
796
800
}}
797
801
return list_obj;"""
0 commit comments