summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuerg Billeter <j@bitron.ch>2007-11-04 10:36:14 +0000
committerJürg Billeter <juergbi@src.gnome.org>2007-11-04 10:36:14 +0000
commit0f9181b4517e436a33714e5d818bd58d63f4e068 (patch)
tree489dcd01067fc07bd3da6ca4565db108ab1b21af
parent8b48ec9ac550c5ae6183dfebd35ebd91aa58e147 (diff)
downloadvala-0f9181b4517e436a33714e5d818bd58d63f4e068.tar.gz
use gconstpointer where appropriate for generics
2007-11-04 Juerg Billeter <j@bitron.ch> * vala/valatypereference.vala, gobject/valaccodegenerator.vala: use gconstpointer where appropriate for generics svn path=/trunk/; revision=678
-rw-r--r--ChangeLog5
-rw-r--r--gobject/valaccodegenerator.vala16
-rw-r--r--vala/valatypereference.vala9
3 files changed, 23 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 439978ead..1d0817d53 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-11-04 Jürg Billeter <j@bitron.ch>
+
+ * vala/valatypereference.vala, gobject/valaccodegenerator.vala: use
+ gconstpointer where appropriate for generics
+
2007-11-03 Jürg Billeter <j@bitron.ch>
* gobject/valaccodegenerator.vala, ccode/valaccodemacroreplacement.vala:
diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala
index d7074fe8e..887d8bf27 100644
--- a/gobject/valaccodegenerator.vala
+++ b/gobject/valaccodegenerator.vala
@@ -2257,9 +2257,14 @@ public class Vala.CCodeGenerator : CodeGenerator {
var cdupisnull = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, get_dup_func_expression (expr.static_type), new CCodeConstant ("NULL"));
cisnull = new CCodeBinaryExpression (CCodeBinaryOperator.OR, cisnull, cdupisnull);
}
-
- ccall.add_argument (ctemp);
-
+
+ if (expr.static_type.data_type != null) {
+ ccall.add_argument (ctemp);
+ } else {
+ // cast from gconstpointer to gpointer as GBoxedCopyFunc expects gpointer
+ ccall.add_argument (new CCodeCastExpression (ctemp, "gpointer"));
+ }
+
var ccomma = new CCodeCommaExpression ();
ccomma.append_expression (new CCodeAssignment (ctemp, (CCodeExpression) expr.ccodenode));
@@ -2291,7 +2296,10 @@ public class Vala.CCodeGenerator : CodeGenerator {
} else {
// the value might be non-null even when the dup function is null,
// so we may not just use NULL for type parameters
- cifnull = ctemp;
+
+ // cast from gconstpointer to gpointer as methods in
+ // generic classes may not return gconstpointer
+ cifnull = new CCodeCastExpression (ctemp, "gpointer");
}
ccomma.append_expression (new CCodeConditionalExpression (cisnull, cifnull, ccall));
diff --git a/vala/valatypereference.vala b/vala/valatypereference.vala
index 2c21927d5..a7e71a0f9 100644
--- a/vala/valatypereference.vala
+++ b/vala/valatypereference.vala
@@ -211,7 +211,6 @@ public class Vala.TypeReference : CodeNode {
}
string ptr;
- string arr;
if (type_parameter != null || (!data_type.is_reference_type () && !is_ref && !is_out)) {
ptr = "";
} else if ((data_type.is_reference_type () && !is_ref && !is_out) || (!data_type.is_reference_type () && (is_ref || is_out))) {
@@ -220,9 +219,13 @@ public class Vala.TypeReference : CodeNode {
ptr = "**";
}
if (data_type != null) {
- return data_type.get_cname (const_type).concat (ptr, arr, null);
+ return data_type.get_cname (const_type) + ptr;
} else if (type_parameter != null) {
- return "gpointer".concat (ptr, arr, null);
+ if (const_type) {
+ return "gconstpointer";
+ } else {
+ return "gpointer";
+ }
} else {
/* raise error */
Report.error (source_reference, "unresolved type reference");