[vala] GAsync: Fix array parameters without length



commit ead11099766f535d31c63495f4ea4a8d4442e47f
Author: Luca Bruno <lethalman88 gmail com>
Date:   Thu Aug 5 09:23:13 2010 +0200

    GAsync: Fix array parameters without length
    
    Fixes bug 626053.

 codegen/valaccodearraymodule.vala |   16 ----------------
 codegen/valagasyncmodule.vala     |   24 ++++++++++++++++--------
 2 files changed, 16 insertions(+), 24 deletions(-)
---
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index 5d429e0..21c9651 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 c406b4b..9be0657 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")))));



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]