From: Marc-André Lureau Date: Sun, 17 Jan 2010 15:35:46 +0000 (+0100) Subject: Accept pre- and postconditions for constructors X-Git-Tag: 0.7.10~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef7bf64f7544384dbe6dd375609f9413bb2c7e84;p=thirdparty%2Fvala.git Accept pre- and postconditions for constructors Fixes bug 607110. --- diff --git a/vala/valacreationmethod.vala b/vala/valacreationmethod.vala index 8469e1778..8bcaecfa1 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 5a29d139f..4b3c7fde7 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)) {