]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix struct dup function for GValue
authorJürg Billeter <j@bitron.ch>
Sun, 14 Dec 2008 17:15:51 +0000 (17:15 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sun, 14 Dec 2008 17:15:51 +0000 (17:15 +0000)
2008-12-14  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodebasemodule.vala:

Fix struct dup function for GValue

svn path=/trunk/; revision=2144

ChangeLog
gobject/valaccodebasemodule.vala

index ccee45d8c696ed24d20396efbcdebff37106be4e..9956797951fb73e9da84339c6559398f5709cda2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-12-14  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodebasemodule.vala:
+
+       Fix struct dup function for GValue
+
 2008-12-14  Jürg Billeter  <j@bitron.ch>
 
        * gobject/valaccodebasemodule.vala:
index ea43563967c08da630f7dc11fc6bd394990e70b2..c17eb790a38c6235c6ab02fb7ff477695098f0f3 100644 (file)
@@ -1533,14 +1533,22 @@ public class Vala.CCodeBaseModule : CCodeModule {
 
                var block = new CCodeBlock ();
 
-               var dup_call = new CCodeFunctionCall (new CCodeIdentifier ("g_memdup"));
-               dup_call.add_argument (new CCodeIdentifier ("self"));
+               if (value_type.type_symbol == gvalue_type) {
+                       var dup_call = new CCodeFunctionCall (new CCodeIdentifier ("g_boxed_copy"));
+                       dup_call.add_argument (new CCodeIdentifier ("G_TYPE_VALUE"));
+                       dup_call.add_argument (new CCodeIdentifier ("self"));
 
-               var sizeof_call = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
-               sizeof_call.add_argument (new CCodeIdentifier (value_type.type_symbol.get_cname ()));
-               dup_call.add_argument (sizeof_call);
+                       block.add_statement (new CCodeReturnStatement (dup_call));
+               } else {
+                       var dup_call = new CCodeFunctionCall (new CCodeIdentifier ("g_memdup"));
+                       dup_call.add_argument (new CCodeIdentifier ("self"));
+
+                       var sizeof_call = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
+                       sizeof_call.add_argument (new CCodeIdentifier (value_type.type_symbol.get_cname ()));
+                       dup_call.add_argument (sizeof_call);
 
-               block.add_statement (new CCodeReturnStatement (dup_call));
+                       block.add_statement (new CCodeReturnStatement (dup_call));
+               }
 
                // append to file