diff options
author | Juerg Billeter <j@bitron.ch> | 2007-11-04 10:36:14 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2007-11-04 10:36:14 +0000 |
commit | 0f9181b4517e436a33714e5d818bd58d63f4e068 (patch) | |
tree | 489dcd01067fc07bd3da6ca4565db108ab1b21af | |
parent | 8b48ec9ac550c5ae6183dfebd35ebd91aa58e147 (diff) | |
download | vala-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-- | ChangeLog | 5 | ||||
-rw-r--r-- | gobject/valaccodegenerator.vala | 16 | ||||
-rw-r--r-- | vala/valatypereference.vala | 9 |
3 files changed, 23 insertions, 7 deletions
@@ -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"); |