]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
parser: Minor semantic checks to improve error messages
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 15 Apr 2021 14:49:14 +0000 (16:49 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 28 Apr 2021 06:44:24 +0000 (08:44 +0200)
vala/valaparser.vala

index 832f1233e6cfa47809b158aa1050e8c290476cc3..d3f0875feafa552ac898b89359bad3ed4929b3cb 100644 (file)
@@ -2489,12 +2489,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:
@@ -2573,6 +2579,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:
@@ -2585,6 +2594,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:
@@ -2605,6 +2617,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: