[vala] GAsync: Fix array parameters without length
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] GAsync: Fix array parameters without length
- Date: Mon, 9 Aug 2010 08:05:19 +0000 (UTC)
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]