]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Report error when returning owned variable in method or property with
authorJürg Billeter <j@bitron.ch>
Fri, 16 Jan 2009 20:50:07 +0000 (20:50 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 16 Jan 2009 20:50:07 +0000 (20:50 +0000)
2009-01-16  Jürg Billeter  <j@bitron.ch>

* vala/valaexpression.vala:
* vala/valareturnstatement.vala:

Report error when returning owned variable in method or property
with unowned return value, fixes bug 547102

svn path=/trunk/; revision=2365

ChangeLog
vala/valaexpression.vala
vala/valareturnstatement.vala

index 0f3298aad6a782874516f85227009f79d0a5a3c4..eaaae32d861168521ac9416e9945d1e8883b6e3b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-01-16  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valaexpression.vala:
+       * vala/valareturnstatement.vala:
+
+       Report error when returning owned variable in method or property
+       with unowned return value, fixes bug 547102
+
 2009-01-16  Jürg Billeter  <j@bitron.ch>
 
        * vapi/packages/gconf-2.0/:
index 95fd844a31411a38e8dea1df4c455069dd6f8a75..8f37efd7a82b78b6e1271b2374e5ff3a6d02fc04 100644 (file)
@@ -1,6 +1,6 @@
 /* valaexpression.vala
  *
- * Copyright (C) 2006-2008  Jürg Billeter
+ * Copyright (C) 2006-2009  Jürg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -91,7 +91,7 @@ public abstract class Vala.Expression : CodeNode {
                        var stmt = parent_node as Statement;
                        var local = parent_node as LocalVariable;
                        if (stmt != null) {
-                               return stmt;
+                               return (Statement) parent_node;
                        } else if (expr != null) {
                                return expr.parent_statement;
                        } else if (local != null) {
index 2f6a2bd882165fb9ccf7654c975fa20bc5be5d12..79e2fbaae4b5437cc8791c96ec5985cd4179b1cd 100644 (file)
@@ -126,10 +126,12 @@ public class Vala.ReturnStatement : CodeNode, Statement {
                        return false;
                }
 
-               if (return_expression.symbol_reference is LocalVariable &&
-                   return_expression.value_type.is_disposable () &&
+               var local = return_expression.symbol_reference as LocalVariable;
+               if (local != null && local.variable_type.is_disposable () &&
                    !analyzer.current_return_type.value_owned) {
-                       Report.warning (source_reference, "Local variable with strong reference used as return value and method return type hasn't been declared to transfer ownership");
+                       error = true;
+                       Report.error (source_reference, "Local variable with strong reference used as return value and method return type has not been declared to transfer ownership");
+                       return false;
                }
 
                if (return_expression is NullLiteral