From cbc11c2674209c3c51eb5c9851863dacea13366b Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Thu, 15 Apr 2021 16:49:14 +0200 Subject: [PATCH] parser: Minor semantic checks to improve error messages --- vala/valaparser.vala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vala/valaparser.vala b/vala/valaparser.vala index bad086982..cba7c51b2 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -2497,12 +2497,18 @@ public class Vala.Parser : CodeVisitor { case TokenType.CONSTRUCT: if (context.profile == Profile.GOBJECT) { rollback (begin); + if (!(parent is TypeSymbol)) { + throw new ParseError.SYNTAX ("unexpected `construct' declaration"); + } parse_constructor_declaration (parent, attrs); return; } break; case TokenType.TILDE: rollback (begin); + if (!(parent is TypeSymbol)) { + throw new ParseError.SYNTAX ("unexpected `destructor' declaration"); + } parse_destructor_declaration (parent, attrs); return; case TokenType.OPEN_BRACE: @@ -2581,6 +2587,9 @@ public class Vala.Parser : CodeVisitor { break; case TokenType.OPEN_PARENS: rollback (begin); + if (!(parent is TypeSymbol)) { + throw new ParseError.SYNTAX ("unexpected `constructor' declaration"); + } parse_creation_method_declaration (parent, attrs); return; default: @@ -2593,6 +2602,9 @@ public class Vala.Parser : CodeVisitor { parse_delegate_declaration (parent, attrs); return; case TokenType.SIGNAL: + if (!(parent is ObjectTypeSymbol)) { + throw new ParseError.SYNTAX ("unexpected `signal' declaration"); + } parse_signal_declaration (parent, attrs); return; default: @@ -2613,6 +2625,9 @@ public class Vala.Parser : CodeVisitor { case TokenType.OPEN_BRACE: case TokenType.THROWS: rollback (begin); + if (!(parent is TypeSymbol)) { + throw new ParseError.SYNTAX ("unexpected `property' declaration"); + } parse_property_declaration (parent, attrs); return; default: -- 2.47.3