]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
GValue: Fix cast from nullable GLib.Value
authorMarc-André Lureau <marcandre.lureau@gmail.com>
Thu, 29 Oct 2009 23:39:05 +0000 (00:39 +0100)
committerJürg Billeter <j@bitron.ch>
Thu, 7 Jan 2010 17:29:08 +0000 (18:29 +0100)
Fixes bug 585050.

codegen/valaccodebasemodule.vala

index 7a1b4552a564ae803877774649c3ea9906ba21bb..2266fb61fce2bff0db4fa1d7688b402b19cb3703 100644 (file)
@@ -4005,7 +4005,15 @@ internal class Vala.CCodeBaseModule : CCodeModule {
                    && expr.type_reference.get_type_id () != null) {
                        // explicit conversion from GValue
                        var ccall = new CCodeFunctionCall (get_value_getter_function (expr.type_reference));
-                       ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, (CCodeExpression) expr.inner.ccodenode));
+                       CCodeExpression gvalue;
+                       if (expr.inner.value_type.nullable) {
+                               // cast from Value?, no need to get address
+                               gvalue = (CCodeExpression) expr.inner.ccodenode;
+                       } else {
+                               // value getter function expects pointer to GValue, get address of non-null Value
+                               gvalue = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, (CCodeExpression) expr.inner.ccodenode);
+                       }
+                       ccall.add_argument (gvalue);
                        expr.ccodenode = ccall;
                        if (expr.type_reference is ArrayType) {
                                // null-terminated string array