[vala] Accept pre- and postconditions for constructors



commit ef7bf64f7544384dbe6dd375609f9413bb2c7e84
Author: Marc-André Lureau <marcandre lureau gmail com>
Date:   Sun Jan 17 16:35:46 2010 +0100

    Accept pre- and postconditions for constructors
    
    Fixes bug 607110.

 vala/valacreationmethod.vala |   16 ++++++++++++++++
 vala/valaparser.vala         |   10 ++++++++++
 2 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/vala/valacreationmethod.vala b/vala/valacreationmethod.vala
index 8469e17..8bcaecf 100644
--- a/vala/valacreationmethod.vala
+++ b/vala/valacreationmethod.vala
@@ -80,6 +80,14 @@ public class Vala.CreationMethod : Method {
 			error_type.accept (visitor);
 		}
 
+		foreach (Expression precondition in get_preconditions ()) {
+			precondition.accept (visitor);
+		}
+
+		foreach (Expression postcondition in get_postconditions ()) {
+			postcondition.accept (visitor);
+		}
+
 		if (body != null) {
 			body.accept (visitor);
 		}
@@ -153,6 +161,14 @@ public class Vala.CreationMethod : Method {
 			error_type.check (analyzer);
 		}
 
+		foreach (Expression precondition in get_preconditions ()) {
+			precondition.check (analyzer);
+		}
+
+		foreach (Expression postcondition in get_postconditions ()) {
+			postcondition.check (analyzer);
+		}
+
 		if (body != null) {
 			body.check (analyzer);
 
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 5a29d13..4b3c7fd 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -2991,6 +2991,16 @@ public class Vala.Parser : CodeVisitor {
 				method.add_error_type (parse_type ());
 			} while (accept (TokenType.COMMA));
 		}
+		while (accept (TokenType.REQUIRES)) {
+			expect (TokenType.OPEN_PARENS);
+			method.add_precondition (parse_expression ());
+			expect (TokenType.CLOSE_PARENS);
+		}
+		while (accept (TokenType.ENSURES)) {
+			expect (TokenType.OPEN_PARENS);
+			method.add_postcondition (parse_expression ());
+			expect (TokenType.CLOSE_PARENS);
+		}
 		method.access = access;
 		set_attributes (method, attrs);
 		if (!accept (TokenType.SEMICOLON)) {



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