]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Clean up unused GError in case of catch statement without arguments
authorAlexander Bokovoy <ab@altlinux.org>
Sun, 25 Oct 2009 09:21:40 +0000 (11:21 +0200)
committerJürg Billeter <j@bitron.ch>
Tue, 27 Oct 2009 15:40:23 +0000 (16:40 +0100)
When catch statement has no arguments, no access to a GError is possible
from Vala source code. Therefore, do not create temporary variable which
is not used. Also, clear error object as it is not passed upwards then.

codegen/valagerrormodule.vala

index 98528d30f7c45ac413ff8839c6e0d92db17ca1ca..aca6c68f3c3caf18a35aad0410f90c3bd63be56d 100644 (file)
@@ -337,9 +337,16 @@ internal class Vala.GErrorModule : CCodeDelegateModule {
                        closure_struct.add_field ("GError *", variable_name);
                        cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression (variable_name), get_variable_cexpression ("_inner_error_"))));
                } else {
-                       var cdecl = new CCodeDeclaration ("GError *");
-                       cdecl.add_declarator (new CCodeVariableDeclarator (variable_name, get_variable_cexpression ("_inner_error_")));
-                       cblock.add_statement (cdecl);
+                       if (clause.variable_name != null) {
+                               var cdecl = new CCodeDeclaration ("GError *");
+                               cdecl.add_declarator (new CCodeVariableDeclarator (variable_name, get_variable_cexpression ("_inner_error_")));
+                               cblock.add_statement (cdecl);
+                       } else {
+                               // error object is not used within catch statement, clear it
+                               var cclear = new CCodeFunctionCall (new CCodeIdentifier ("g_clear_error"));
+                               cclear.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression ("_inner_error_")));
+                               cblock.add_statement (new CCodeExpressionStatement (cclear));
+                       }
                }
                cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression ("_inner_error_"), new CCodeConstant ("NULL"))));