vala r2239 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2239 - in trunk: . gobject
- Date: Mon, 22 Dec 2008 21:29:49 +0000 (UTC)
Author: juergbi
Date: Mon Dec 22 21:29:49 2008
New Revision: 2239
URL: http://svn.gnome.org/viewvc/vala?rev=2239&view=rev
Log:
2008-12-22 JÃrg Billeter <j bitron ch>
* gobject/valaccodebasemodule.vala:
Use copy function in generated dup function for structs if
necessary
Modified:
trunk/ChangeLog
trunk/gobject/valaccodebasemodule.vala
Modified: trunk/gobject/valaccodebasemodule.vala
==============================================================================
--- trunk/gobject/valaccodebasemodule.vala (original)
+++ trunk/gobject/valaccodebasemodule.vala Mon Dec 22 21:29:49 2008
@@ -1649,14 +1649,33 @@
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 cdecl = new CCodeDeclaration (value_type.get_cname ());
+ cdecl.add_declarator (new CCodeVariableDeclarator ("dup"));
+ block.add_statement (cdecl);
+
+ var creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
+ creation_call.add_argument (new CCodeConstant (value_type.data_type.get_cname ()));
+ creation_call.add_argument (new CCodeConstant ("1"));
+ block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("dup"), creation_call)));
+
+ var st = value_type.data_type as Struct;
+ if (st != null && st.is_disposable ()) {
+ var copy_call = new CCodeFunctionCall (new CCodeIdentifier (st.get_copy_function ()));
+ copy_call.add_argument (new CCodeIdentifier ("self"));
+ copy_call.add_argument (new CCodeIdentifier ("dup"));
+ block.add_statement (new CCodeExpressionStatement (copy_call));
+ } else {
+ var sizeof_call = new CCodeFunctionCall (new CCodeIdentifier ("sizeof"));
+ sizeof_call.add_argument (new CCodeConstant (value_type.data_type.get_cname ()));
- 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);
+ var copy_call = new CCodeFunctionCall (new CCodeIdentifier ("memcpy"));
+ copy_call.add_argument (new CCodeIdentifier ("dup"));
+ copy_call.add_argument (new CCodeIdentifier ("self"));
+ copy_call.add_argument (sizeof_call);
+ block.add_statement (new CCodeExpressionStatement (copy_call));
+ }
- block.add_statement (new CCodeReturnStatement (dup_call));
+ block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("dup")));
}
// append to file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]