]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
GAsync: Fix array parameters without length
authorLuca Bruno <lethalman88@gmail.com>
Thu, 5 Aug 2010 07:23:13 +0000 (09:23 +0200)
committerJürg Billeter <j@bitron.ch>
Mon, 9 Aug 2010 08:04:16 +0000 (10:04 +0200)
Fixes bug 626053.

codegen/valaccodearraymodule.vala
codegen/valagasyncmodule.vala

index 5d429e0274bc0d91df612d52038a387d023f9a49..21c9651aac4e4a794188440cfa69f02895da2394 100644 (file)
@@ -191,14 +191,6 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                                        } else {
                                                return length_expr;
                                        }
-                               } else if (current_method != null && current_method.coroutine) {
-                                       var length_expr = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_array_length_cname (get_variable_cname (param.name), dim));
-                                       if (is_out) {
-                                               // passing array as out/ref
-                                               return new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, length_expr);
-                                       } else {
-                                               return length_expr;
-                                       }
                                } else {
                                        if (param.array_null_terminated) {
                                                var carray_expr = get_variable_cexpression (param.name);
@@ -232,14 +224,6 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
                                        } else {
                                                return length_expr;
                                        }
-                               } else if (current_method != null && current_method.coroutine) {
-                                       var length_expr = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_array_length_cname (get_variable_cname (local.name), dim));
-                                       if (is_out) {
-                                               // passing array as out/ref
-                                               return new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, length_expr);
-                                       } else {
-                                               return length_expr;
-                                       }
                                } else {
                                        var length_expr = get_variable_cexpression (get_array_length_cname (get_variable_cname (local.name), dim));
                                        if (is_out) {
index c406b4b74641acbdb7f5ffa366a5a7ae3c6302ef..9be065710dca505adc53bd4cbf7e06d0908ff8b4 100644 (file)
@@ -47,8 +47,10 @@ public class Vala.GAsyncModule : GSignalModule {
 
                        if (param.variable_type is ArrayType) {
                                var array_type = (ArrayType) param.variable_type;
-                               for (int dim = 1; dim <= array_type.rank; dim++) {
-                                       data.add_field ("gint", get_array_length_cname (get_variable_cname (param.name), dim));
+                               if (!param.no_array_length) {
+                                       for (int dim = 1; dim <= array_type.rank; dim++) {
+                                               data.add_field ("gint", get_array_length_cname (get_variable_cname (param.name), dim));
+                                       }
                                }
                        } else if (param.variable_type is DelegateType) {
                                var deleg_type = (DelegateType) param.variable_type;
@@ -63,8 +65,10 @@ public class Vala.GAsyncModule : GSignalModule {
                        data.add_field (m.return_type.get_cname (), "result");
                        if (m.return_type is ArrayType) {
                                var array_type = (ArrayType) m.return_type;
-                               for (int dim = 1; dim <= array_type.rank; dim++) {
-                                       data.add_field ("gint", get_array_length_cname ("result", dim));
+                               if (!m.no_array_length) {
+                                       for (int dim = 1; dim <= array_type.rank; dim++) {
+                                               data.add_field ("gint", get_array_length_cname ("result", dim));
+                                       }
                                }
                        } else if (m.return_type is DelegateType) {
                                var deleg_type = (DelegateType) m.return_type;
@@ -242,8 +246,10 @@ public class Vala.GAsyncModule : GSignalModule {
                                asyncblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeMemberAccess.pointer (data_var, get_variable_cname (param.name)), cparam)));
                                if (param.variable_type is ArrayType) {
                                        var array_type = (ArrayType) param.variable_type;
-                                       for (int dim = 1; dim <= array_type.rank; dim++) {
-                                               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)))));
+                                       if (!param.no_array_length) {
+                                               for (int dim = 1; dim <= array_type.rank; dim++) {
+                                                       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)))));
+                                               }
                                        }
                                } else if (param.variable_type is DelegateType) {
                                        var deleg_type = (DelegateType) param.variable_type;
@@ -449,8 +455,10 @@ public class Vala.GAsyncModule : GSignalModule {
                        finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("result"), new CCodeMemberAccess.pointer (data_var, "result"))));
                        if (return_type is ArrayType) {
                                var array_type = (ArrayType) return_type;
-                               for (int dim = 1; dim <= array_type.rank; dim++) {
-                                       finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier (get_array_length_cname ("result", dim))), new CCodeMemberAccess.pointer (data_var, get_array_length_cname ("result", dim)))));
+                               if (!m.no_array_length) {
+                                       for (int dim = 1; dim <= array_type.rank; dim++) {
+                                               finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier (get_array_length_cname ("result", dim))), new CCodeMemberAccess.pointer (data_var, get_array_length_cname ("result", dim)))));
+                                       }
                                }
                        } else if (return_type is DelegateType && ((DelegateType) return_type).delegate_symbol.has_target) {
                                finishblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier (get_delegate_target_cname ("result"))), new CCodeMemberAccess.pointer (data_var, get_delegate_target_cname ("result")))));