~ubuntu-branches/ubuntu/vivid/vala/vivid

« back to all changes in this revision

Viewing changes to codegen/valagasyncmodule.vala

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2010-07-28 07:58:01 UTC
  • mfrom: (1.5.5 upstream) (7.3.14 experimental)
  • Revision ID: james.westby@ubuntu.com-20100728075801-18u9cg5hv5oety6m
Tags: 0.9.4-1
New upstream development release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
                }
42
42
 
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));
47
47
 
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));
52
52
                                }
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)));
97
97
 
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;
102
102
 
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)));
108
108
                                }
109
109
                        }
110
110
                }
225
225
 
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;
230
230
 
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);
235
235
                                }
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);
240
240
                                }
241
241
 
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)))));
247
247
                                        }
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) {
343
343
                                header_declarations.add_include ("gio/gio.h");
344
344
                        }
345
345
 
346
 
                        if (!m.is_abstract) {
 
346
                        if (!m.is_abstract && m.body != null) {
347
347
                                var data = generate_data_struct (m);
348
348
 
349
349
                                append_function (generate_free_function (m));
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"))));
437
437
                                }
438
438
                        }