From: Jürg Billeter Date: Thu, 9 Sep 2010 15:57:25 +0000 (+0200) Subject: codegen: Fix struct copy function for structs with array fields X-Git-Tag: 0.11.0~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55c2303fd2eb315db7fc8edc3dc19e517de2e583;p=thirdparty%2Fvala.git codegen: Fix struct copy function for structs with array fields --- diff --git a/codegen/valaccodestructmodule.vala b/codegen/valaccodestructmodule.vala index 51e5d7f81..5a8dc778b 100644 --- a/codegen/valaccodestructmodule.vala +++ b/codegen/valaccodestructmodule.vala @@ -251,9 +251,7 @@ public class Vala.CCodeStructModule : CCodeBaseModule { function.add_parameter (new CCodeFormalParameter ("self", "const " + st.get_cname () + "*")); function.add_parameter (new CCodeFormalParameter ("dest", st.get_cname () + "*")); - var cblock = new CCodeBlock (); - var cfrag = new CCodeFragment (); - cblock.add_statement (cfrag); + push_function (function); foreach (var f in st.get_fields ()) { if (f.binding == MemberBinding.INSTANCE) { @@ -281,22 +279,22 @@ public class Vala.CCodeStructModule : CCodeBaseModule { array_copy_call.add_argument (dest); array_copy_call.add_argument (copy); array_copy_call.add_argument (size); - cblock.add_statement (new CCodeExpressionStatement (array_copy_call)); + ccode.add_expression (array_copy_call); } else { - cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (dest, copy))); + ccode.add_expression (new CCodeAssignment (dest, copy)); if (array_type != null) { for (int dim = 1; dim <= array_type.rank; dim++) { var len_src = new CCodeMemberAccess.pointer (new CCodeIdentifier ("self"), get_array_length_cname (f.name, dim)); var len_dest = new CCodeMemberAccess.pointer (new CCodeIdentifier ("dest"), get_array_length_cname (f.name, dim)); - cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (len_dest, len_src))); + ccode.add_expression (new CCodeAssignment (len_dest, len_src)); } } } } } - function.block = cblock; + pop_function (); cfile.add_function (function); }