From: Rico Tzschichholz Date: Mon, 9 Nov 2020 14:38:38 +0000 (+0100) Subject: vala: Avoid taking extra reference of foreach collection for index iteration X-Git-Tag: 0.51.1~176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d45eee6e8c233e15383b57f1dd0706f93084ccc2;p=thirdparty%2Fvala.git vala: Avoid taking extra reference of foreach collection for index iteration --- diff --git a/vala/valaforeachstatement.vala b/vala/valaforeachstatement.vala index da80b24aa..258a81dae 100644 --- a/vala/valaforeachstatement.vala +++ b/vala/valaforeachstatement.vala @@ -205,7 +205,11 @@ public class Vala.ForeachStatement : Block { return false; } - add_statement (new DeclarationStatement (new LocalVariable (null, "_%s_list".printf (variable_name), collection, source_reference), source_reference)); + var list_type = collection_type.copy (); + if (collection.symbol_reference is Variable) { + list_type.value_owned = false; + } + add_statement (new DeclarationStatement (new LocalVariable (list_type, "_%s_list".printf (variable_name), collection, source_reference), source_reference)); add_statement (new DeclarationStatement (new LocalVariable (null, "_%s_size".printf (variable_name), new MemberAccess (new MemberAccess.simple ("_%s_list".printf (variable_name), source_reference), "size", source_reference), source_reference), source_reference)); add_statement (new DeclarationStatement (new LocalVariable (null, "_%s_index".printf (variable_name), new UnaryExpression (UnaryOperator.MINUS, new IntegerLiteral ("1", source_reference), source_reference), source_reference), source_reference)); var next = new UnaryExpression (UnaryOperator.INCREMENT, new MemberAccess.simple ("_%s_index".printf (variable_name), source_reference), source_reference);