[vala] Fix check for missing return statements in non-void methods



commit 5f971c5dc3a0dc4539b1de18047be724c05639b1
Author: Jürg Billeter <j bitron ch>
Date:   Mon Nov 15 20:02:01 2010 +0100

    Fix check for missing return statements in non-void methods

 vala/valaconstructor.vala      |    8 ++++++--
 vala/valadestructor.vala       |    6 +++++-
 vala/valaflowanalyzer.vala     |    2 +-
 vala/valamethod.vala           |    4 ++++
 vala/valapropertyaccessor.vala |    4 ++++
 vala/valasubroutine.vala       |    2 ++
 6 files changed, 22 insertions(+), 4 deletions(-)
---
diff --git a/vala/valaconstructor.vala b/vala/valaconstructor.vala
index 6c6d9dd..d16fc13 100644
--- a/vala/valaconstructor.vala
+++ b/vala/valaconstructor.vala
@@ -1,6 +1,6 @@
 /* valaconstructor.vala
  *
- * Copyright (C) 2006-2009  Jürg Billeter
+ * Copyright (C) 2006-2010  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
@@ -35,7 +35,11 @@ public class Vala.Constructor : Subroutine {
 	 * Specifies whether this is an instance or a class constructor.
 	 */
 	public MemberBinding binding { get; set; default = MemberBinding.INSTANCE; }
-	
+
+	public override bool has_result {
+		get { return false; }
+	}
+
 	/**
 	 * Creates a new constructor.
 	 *
diff --git a/vala/valadestructor.vala b/vala/valadestructor.vala
index b051ca5..7ee3843 100644
--- a/vala/valadestructor.vala
+++ b/vala/valadestructor.vala
@@ -1,6 +1,6 @@
 /* valadestructor.vala
  *
- * Copyright (C) 2006-2008  Jürg Billeter
+ * Copyright (C) 2006-2010  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
@@ -36,6 +36,10 @@ public class Vala.Destructor : Subroutine {
 	 */
 	public MemberBinding binding { get; set; default = MemberBinding.INSTANCE; }
 
+	public override bool has_result {
+		get { return false; }
+	}
+
 	/**
 	 * Creates a new destructor.
 	 *
diff --git a/vala/valaflowanalyzer.vala b/vala/valaflowanalyzer.vala
index da9c335..010c443 100644
--- a/vala/valaflowanalyzer.vala
+++ b/vala/valaflowanalyzer.vala
@@ -208,7 +208,7 @@ public class Vala.FlowAnalyzer : CodeVisitor {
 		if (current_block != null) {
 			// end of method body reachable
 
-			if (context.profile != Profile.DOVA && m.result_var != null) {
+			if (context.profile != Profile.DOVA && m.has_result) {
 				Report.error (m.source_reference, "missing return statement at end of subroutine body");
 				m.error = true;
 			}
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index e86741c..bc301f5 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -43,6 +43,10 @@ public class Vala.Method : Subroutine {
 		}
 	}
 
+	public override bool has_result {
+		get { return !(return_type is VoidType); }
+	}
+
 	/**
 	 * Specifies whether this method may only be called with an instance of
 	 * the contained type.
diff --git a/vala/valapropertyaccessor.vala b/vala/valapropertyaccessor.vala
index 678eb4c..fbec601 100644
--- a/vala/valapropertyaccessor.vala
+++ b/vala/valapropertyaccessor.vala
@@ -67,6 +67,10 @@ public class Vala.PropertyAccessor : Subroutine {
 	 */
 	public bool automatic_body { get; set; }
 
+	public override bool has_result {
+		get { return readable; }
+	}
+
 	/**
 	 * Represents the generated value parameter in a set accessor.
 	 */
diff --git a/vala/valasubroutine.vala b/vala/valasubroutine.vala
index c481d15..73cab98 100644
--- a/vala/valasubroutine.vala
+++ b/vala/valasubroutine.vala
@@ -34,6 +34,8 @@ public abstract class Vala.Subroutine : Symbol {
 	 */
 	public LocalVariable result_var { get; set; }
 
+	public abstract bool has_result { get; }
+
 	protected Subroutine (string? name, SourceReference? source_reference, Comment? comment = null) {
 		base (name, source_reference, comment);
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]