From: Luca Bruno Date: Thu, 5 Aug 2010 07:23:13 +0000 (+0200) Subject: GAsync: Fix array parameters without length X-Git-Tag: 0.9.5~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ead11099766f535d31c63495f4ea4a8d4442e47f;p=thirdparty%2Fvala.git GAsync: Fix array parameters without length Fixes bug 626053. --- diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala index 5d429e027..21c9651aa 100644 --- a/codegen/valaccodearraymodule.vala +++ b/codegen/valaccodearraymodule.vala @@ -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) { diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala index c406b4b74..9be065710 100644 --- a/codegen/valagasyncmodule.vala +++ b/codegen/valagasyncmodule.vala @@ -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")))));