43
43
foreach (FormalParameter param in m.get_parameters ()) {
44
var param_type = param.parameter_type.copy ();
44
var param_type = param.variable_type.copy ();
45
45
param_type.value_owned = true;
46
46
data.add_field (param_type.get_cname (), get_variable_cname (param.name));
48
if (param.parameter_type is ArrayType) {
49
var array_type = (ArrayType) param.parameter_type;
48
if (param.variable_type is ArrayType) {
49
var array_type = (ArrayType) param.variable_type;
50
50
for (int dim = 1; dim <= array_type.rank; dim++) {
51
51
data.add_field ("gint", get_array_length_cname (get_variable_cname (param.name), dim));
53
} else if (param.parameter_type is DelegateType) {
54
var deleg_type = (DelegateType) param.parameter_type;
53
} else if (param.variable_type is DelegateType) {
54
var deleg_type = (DelegateType) param.variable_type;
55
55
if (deleg_type.delegate_symbol.has_target) {
56
56
data.add_field ("gpointer", get_delegate_target_cname (get_variable_cname (param.name)));
57
57
data.add_field ("GDestroyNotify", get_delegate_target_destroy_notify_cname (get_variable_cname (param.name)));
98
98
foreach (FormalParameter param in m.get_parameters ()) {
99
99
if (param.direction != ParameterDirection.OUT) {
100
var param_type = param.parameter_type.copy ();
100
var param_type = param.variable_type.copy ();
101
101
param_type.value_owned = true;
103
103
if (requires_destroy (param_type)) {
104
104
var ma = new MemberAccess.simple (param.name);
105
105
ma.symbol_reference = param;
106
ma.value_type = param.parameter_type.copy ();
107
freeblock.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_variable_cname (param.name)), param.parameter_type, ma)));
106
ma.value_type = param.variable_type.copy ();
107
freeblock.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_variable_cname (param.name)), param.variable_type, ma)));
226
226
foreach (FormalParameter param in m.get_parameters ()) {
227
227
if (param.direction != ParameterDirection.OUT) {
228
var param_type = param.parameter_type.copy ();
228
var param_type = param.variable_type.copy ();
229
229
param_type.value_owned = true;
231
231
// create copy if necessary as variables in async methods may need to be kept alive
232
232
CCodeExpression cparam = get_variable_cexpression (param.name);
233
if (param.parameter_type.is_real_non_null_struct_type ()) {
233
if (param.variable_type.is_real_non_null_struct_type ()) {
234
234
cparam = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, cparam);
236
if (requires_copy (param_type) && !param.parameter_type.value_owned) {
236
if (requires_copy (param_type) && !param.variable_type.value_owned) {
237
237
var ma = new MemberAccess.simple (param.name);
238
238
ma.symbol_reference = param;
239
cparam = get_ref_cexpression (param.parameter_type, cparam, ma, param);
239
cparam = get_ref_cexpression (param.variable_type, cparam, ma, param);
242
242
asyncblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)), cparam)));
243
if (param.parameter_type is ArrayType) {
244
var array_type = (ArrayType) param.parameter_type;
243
if (param.variable_type is ArrayType) {
244
var array_type = (ArrayType) param.variable_type;
245
245
for (int dim = 1; dim <= array_type.rank; dim++) {
246
246
asyncblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (data_var, get_array_length_cname (get_variable_cname (param.name), dim)), new CCodeIdentifier (get_array_length_cname (get_variable_cname (param.name), dim)))));
248
} else if (param.parameter_type is DelegateType) {
249
var deleg_type = (DelegateType) param.parameter_type;
248
} else if (param.variable_type is DelegateType) {
249
var deleg_type = (DelegateType) param.variable_type;
250
250
if (deleg_type.delegate_symbol.has_target) {
251
251
asyncblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (data_var, get_delegate_target_cname (get_variable_cname (param.name))), new CCodeIdentifier (get_delegate_target_cname (get_variable_cname (param.name))))));
252
252
if (deleg_type.value_owned) {
432
432
foreach (FormalParameter param in m.get_parameters ()) {
433
433
if (param.direction != ParameterDirection.IN) {
434
434
finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier (param.name)), new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)))));
435
if (!(param.parameter_type is ValueType) || param.parameter_type.nullable) {
435
if (!(param.variable_type is ValueType) || param.variable_type.nullable) {
436
436
finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)), new CCodeConstant ("NULL"))));